Compare commits

..
2607 Commits
Author SHA1 Message Date
Home Assistant Version Control 00b4a2e511 .storage/lovelace_resources 2026-10-18 07:02:01 +00:00
Home Assistant Version Control ce875b90a1 .ha_run.lock, zigbee2mqtt/state.json 2026-10-18 07:01:33 +00:00
Home Assistant Version Control c19d447abc .storage/lovelace_resources 2026-10-18 06:59:29 +00:00
Home Assistant Version Control 7235e0ddda .ha_run.lock 2026-10-18 06:59:07 +00:00
Home Assistant Version Control 0c22b3c1bb .storage/lovelace_resources, session-ses_06b0.md 2026-10-18 06:57:05 +00:00
Home Assistant Version Control fb59831907 .ha_run.lock 2026-10-18 06:56:45 +00:00
Home Assistant Version Control 241a84307d zigbee2mqtt/state.json 2026-10-18 06:56:12 +00:00
Home Assistant Version Control 51b542113d zigbee2mqtt/state.json 2026-10-18 06:52:33 +00:00
Home Assistant Version Control 579dac6ca4 hilo_eventhistory_state.yaml 2026-10-18 06:48:58 +00:00
Home Assistant Version Control eb57375984 hilo_eventhistory_state.yaml 2026-10-18 06:47:36 +00:00
Home Assistant Version Control 6a83a3c6f8 3 files 2026-10-18 06:45:24 +00:00
Home Assistant Version Control e18146eb07 3 files 2026-10-18 06:41:03 +00:00
Home Assistant Version Control e3d3d595a0 .storage/lovelace_resources 2026-10-18 06:37:27 +00:00
Home Assistant Version Control b9c88955bf .ha_run.lock 2026-10-18 06:36:59 +00:00
Home Assistant Version Control 53ea7c4198 zigbee2mqtt/state.json 2026-10-18 06:36:39 +00:00
Home Assistant Version Control 685ba5e65d 3 files 2026-10-18 06:30:44 +00:00
Home Assistant Version Control 3ecc4dd7c3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:25:52 +00:00
Home Assistant Version Control 98eebd204c zigbee2mqtt/coordinator_backup.json 2026-10-18 06:25:42 +00:00
Home Assistant Version Control 949071b7f1 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-18 06:25:30 +00:00
Home Assistant Version Control 26627e7490 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:24:17 +00:00
Home Assistant Version Control b4772e7fc8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:23:53 +00:00
Home Assistant Version Control 10aad334cc .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:22:59 +00:00
Home Assistant Version Control dd40f388f8 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-18 06:22:35 +00:00
Home Assistant Version Control fb0dd4cf70 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:21:56 +00:00
Home Assistant Version Control d21270f3fc .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:21:50 +00:00
Home Assistant Version Control 068474c7e4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:20:52 +00:00
Home Assistant Version Control 4f7f9d913c .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:20:14 +00:00
Home Assistant Version Control 39dc7201de .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:19:42 +00:00
Home Assistant Version Control f219442d6f .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:19:18 +00:00
Home Assistant Version Control a2556d0665 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:18:54 +00:00
Home Assistant Version Control 694c10d185 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:18:30 +00:00
Home Assistant Version Control 8d2419e1d5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-18 06:18:06 +00:00
Home Assistant Version Control f8d7d2dabe .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:11:53 +00:00
Home Assistant Version Control ce7a457426 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-18 06:11:38 +00:00
Home Assistant Version Control b39f36dac3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:06:23 +00:00
Home Assistant Version Control 3a56403748 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:05:09 +00:00
Home Assistant Version Control 55f59c8b87 3 files 2026-10-18 06:05:00 +00:00
Home Assistant Version Control a033e1b161 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:01:27 +00:00
Home Assistant Version Control 5b1d7c7a10 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:01:17 +00:00
Home Assistant Version Control 8b89f35f23 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 06:00:57 +00:00
Home Assistant Version Control 535cbbc390 .ha_mcp/backups/dashboard.3d-printer-cellphone.20261018_060039.yaml, .storage/lovelace.3d_printer_cellphone 2026-10-18 06:00:47 +00:00
Home Assistant Version Control 5366fda3a8 zigbee2mqtt/state.json 2026-10-18 05:59:45 +00:00
Home Assistant Version Control e977ab9794 .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 05:56:05 +00:00
Home Assistant Version Control b8634258df .ha_mcp/logs/mcp_usage.jsonl 2026-10-18 05:55:56 +00:00
Home Assistant Version Control dae3cae9ca .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-18 05:55:21 +00:00
Home Assistant Version Control fbe06815c8 zigbee2mqtt/state.json 2026-10-18 05:28:57 +00:00
Home Assistant Version Control 4cd41a2b38 zigbee2mqtt/state.json 2026-10-18 04:46:54 +00:00
Home Assistant Version Control 13e61e2165 zigbee2mqtt/state.json 2026-10-18 04:21:53 +00:00
Home Assistant Version Control 2ef74e1ad9 zigbee2mqtt/state.json 2026-10-18 03:55:21 +00:00
Home Assistant Version Control 277967a366 zigbee2mqtt/state.json 2026-10-18 03:28:30 +00:00
Home Assistant Version Control 74a23862b6 zigbee2mqtt/state.json 2026-10-18 03:11:29 +00:00
Home Assistant Version Control 7f7cffca2e zigbee2mqtt/state.json 2026-10-18 02:17:25 +00:00
Home Assistant Version Control f57bdd49c7 zigbee2mqtt/state.json 2026-10-18 02:05:01 +00:00
Home Assistant Version Control 15d26e7b0b zigbee2mqtt/state.json 2026-10-18 01:28:27 +00:00
Home Assistant Version Control c82dcdefb7 zigbee2mqtt/state.json 2026-10-18 01:09:56 +00:00
Home Assistant Version Control 82044b3cde zigbee2mqtt/state.json 2026-10-18 00:47:02 +00:00
Home Assistant Version Control de5c888be6 zigbee2mqtt/state.json 2026-10-18 00:25:30 +00:00
Home Assistant Version Control 52de574b0b zigbee2mqtt/state.json 2026-10-17 23:35:04 +00:00
Home Assistant Version Control 76a8f254de zigbee2mqtt/state.json 2026-10-17 23:28:04 +00:00
Home Assistant Version Control 98cb1ce209 zigbee2mqtt/state.json 2026-10-17 23:11:19 +00:00
Home Assistant Version Control 2869d35f63 zigbee2mqtt/state.json 2026-10-17 22:50:12 +00:00
Home Assistant Version Control 80170172e3 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-17 22:37:17 +00:00
Home Assistant Version Control 4da12e621d zigbee2mqtt/state.json 2026-10-17 21:48:44 +00:00
Home Assistant Version Control c091703392 zigbee2mqtt/state.json 2026-10-17 21:27:37 +00:00
Home Assistant Version Control 84911f8729 zigbee2mqtt/state.json 2026-10-17 21:06:47 +00:00
Home Assistant Version Control ddce9982b2 zigbee2mqtt/state.json 2026-10-17 20:22:19 +00:00
Home Assistant Version Control df192bed8d zigbee2mqtt/state.json 2026-10-17 19:35:40 +00:00
Home Assistant Version Control 176420e24b zigbee2mqtt/state.json 2026-10-17 19:27:21 +00:00
Home Assistant Version Control a73a196d2d zigbee2mqtt/state.json 2026-10-17 18:59:24 +00:00
Home Assistant Version Control d7a16c20b9 zigbee2mqtt/state.json 2026-10-17 17:27:11 +00:00
Home Assistant Version Control 599cf46141 zigbee2mqtt/state.json 2026-10-17 15:27:04 +00:00
Home Assistant Version Control 240ca73c73 zigbee2mqtt/state.json 2026-10-17 13:26:52 +00:00
Home Assistant Version Control 784ba32cfc zigbee2mqtt/state.json 2026-10-17 11:26:39 +00:00
Home Assistant Version Control 7af34643ab zigbee2mqtt/state.json 2026-10-17 09:26:38 +00:00
Home Assistant Version Control 0ffe4eaf4d zigbee2mqtt/state.json 2026-10-17 07:26:34 +00:00
Home Assistant Version Control 220a92411d zigbee2mqtt/state.json 2026-10-17 05:26:33 +00:00
Home Assistant Version Control e8c1444f50 zigbee2mqtt/state.json 2026-10-17 03:26:27 +00:00
Home Assistant Version Control a61fe3a611 zigbee2mqtt/state.json 2026-10-17 01:26:22 +00:00
Home Assistant Version Control 7036d3e9fa zigbee2mqtt/state.json 2026-10-17 00:45:33 +00:00
Home Assistant Version Control 1c997c9696 zigbee2mqtt/state.json 2026-10-17 00:27:03 +00:00
Home Assistant Version Control 1b4c6933c2 zigbee2mqtt/state.json 2026-10-17 00:10:49 +00:00
Home Assistant Version Control 6e960c83ae zigbee2mqtt/state.json 2026-10-16 23:27:50 +00:00
Home Assistant Version Control 2bed23faa3 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-16 22:37:14 +00:00
Home Assistant Version Control 18a96d2ff3 zigbee2mqtt/state.json 2026-10-16 21:25:32 +00:00
Home Assistant Version Control 23e5d12f9f zigbee2mqtt/state.json 2026-10-16 21:03:14 +00:00
Home Assistant Version Control e3523e7775 zigbee2mqtt/state.json 2026-10-16 20:45:57 +00:00
Home Assistant Version Control c80208fceb .storage/lovelace.3d_printer_cellphone 2026-10-16 20:40:21 +00:00
Home Assistant Version Control 7734ad9aa1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:40:09 +00:00
Home Assistant Version Control bea97a70b5 .storage/lovelace.3d_printer_cellphone 2026-10-16 20:39:51 +00:00
Home Assistant Version Control 95de97af0f .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:39:39 +00:00
Home Assistant Version Control 4ac1d496b8 3 files 2026-10-16 20:39:13 +00:00
Home Assistant Version Control 1e3039cdaf .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:36:21 +00:00
Home Assistant Version Control 0549944c6c .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:35:41 +00:00
Home Assistant Version Control a33220ec96 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:35:33 +00:00
Home Assistant Version Control 1905d50da6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:35:25 +00:00
Home Assistant Version Control 35d2d865a2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:35:09 +00:00
Home Assistant Version Control 1eae6a49ee .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:34:55 +00:00
Home Assistant Version Control 038ced03b3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:34:39 +00:00
Home Assistant Version Control f03eb546b5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:32:41 +00:00
Home Assistant Version Control fac8d5e400 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:32:35 +00:00
Home Assistant Version Control 0b156d0ba2 4 files 2026-10-16 20:32:27 +00:00
Home Assistant Version Control 7577b196bf .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:31:40 +00:00
Home Assistant Version Control b5416ec9c3 3 files 2026-10-16 20:30:36 +00:00
Home Assistant Version Control 1481e2c87e 3 files 2026-10-16 20:29:58 +00:00
Home Assistant Version Control 6cfbc9a91e .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 20:28:26 +00:00
Home Assistant Version Control dca6fb8955 opencode/decisions.yaml 2026-10-16 20:25:36 +00:00
Home Assistant Version Control 39130686b5 opencode/decisions.yaml 2026-10-16 20:25:26 +00:00
Home Assistant Version Control 32076e9ad5 4 files 2026-10-16 20:21:58 +00:00
Home Assistant Version Control d151600916 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:20:38 +00:00
Home Assistant Version Control 38e821f95a .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:20:26 +00:00
Home Assistant Version Control 569a945005 opencode/decisions.yaml 2026-10-16 20:18:24 +00:00
Home Assistant Version Control a7583965eb 4 files 2026-10-16 20:18:02 +00:00
Home Assistant Version Control 5c2be30851 3 files 2026-10-16 20:16:28 +00:00
Home Assistant Version Control 7663ac9d5d .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:15:19 +00:00
Home Assistant Version Control bd1aadb35c .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:14:19 +00:00
Home Assistant Version Control 2f759716d3 .ha_mcp/backups/dashboard.3d-printer-cellphone.20261016_201344.yaml, .storage/lovelace.3d_printer_cellphone 2026-10-16 20:13:50 +00:00
Home Assistant Version Control edf6ef9010 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:12:10 +00:00
Home Assistant Version Control d868470f90 4 files 2026-10-16 20:12:01 +00:00
Home Assistant Version Control 3c9fcfb512 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:10:47 +00:00
Home Assistant Version Control 6ec0fcd8ed .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-10-16 20:10:33 +00:00
Home Assistant Version Control f3eb650d05 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:09:49 +00:00
Home Assistant Version Control 9d10760784 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:09:23 +00:00
Home Assistant Version Control 0ad43565e4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:09:13 +00:00
Home Assistant Version Control adb15e0ef7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:07:45 +00:00
Home Assistant Version Control 07e97820fb .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:07:06 +00:00
Home Assistant Version Control 9697d93805 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 20:07:01 +00:00
Home Assistant Version Control c469580ce3 .ha_mcp/logs/mcp_usage.jsonl, configuration.yaml 2026-10-16 20:06:47 +00:00
Home Assistant Version Control 69d1f0d17a .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:04:05 +00:00
Home Assistant Version Control e295e3566c .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 20:03:51 +00:00
Home Assistant Version Control b4a92113ca .ha_mcp/logs/mcp_usage.jsonl, configuration.yaml 2026-10-16 20:03:29 +00:00
Home Assistant Version Control 698ee960e7 3 files 2026-10-16 20:02:39 +00:00
Home Assistant Version Control 1210fde1ff configuration.yaml 2026-10-16 20:01:11 +00:00
Home Assistant Version Control 3a6c110a77 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:59:21 +00:00
Home Assistant Version Control e2e8d731fd .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:58:59 +00:00
Home Assistant Version Control 28a37b71d2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:58:41 +00:00
Home Assistant Version Control 3fac27a20d configuration.yaml 2026-10-16 19:58:31 +00:00
Home Assistant Version Control 2df0df86f3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:57:25 +00:00
Home Assistant Version Control 443536a1b1 zigbee2mqtt/state.json 2026-10-16 19:57:21 +00:00
Home Assistant Version Control 349dd2d570 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:56:15 +00:00
Home Assistant Version Control ef019fe009 .ha_mcp/logs/mcp_usage.jsonl, configuration.yaml 2026-10-16 19:54:06 +00:00
Home Assistant Version Control 711681771a .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:53:24 +00:00
Home Assistant Version Control f9f31e64b6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:53:13 +00:00
Home Assistant Version Control 3d2c8d6577 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:52:56 +00:00
Home Assistant Version Control 2bd6681dd4 configuration.yaml 2026-10-16 19:52:42 +00:00
Home Assistant Version Control 6fabf740d5 zigbee2mqtt/state.json 2026-10-16 19:52:10 +00:00
Home Assistant Version Control 41c6c0cc53 zigbee2mqtt/state.json 2026-10-16 19:51:54 +00:00
Home Assistant Version Control e0140120a6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 19:45:26 +00:00
Home Assistant Version Control 474c21b1ff .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:40:34 +00:00
Home Assistant Version Control d25bf64ada .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 19:40:24 +00:00
Home Assistant Version Control a52a698fd2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:31:53 +00:00
Home Assistant Version Control fbf82b796e .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 19:27:37 +00:00
Home Assistant Version Control a007c5190f .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:26:19 +00:00
Home Assistant Version Control 5ea4bb16e1 zigbee2mqtt/state.json 2026-10-16 19:25:15 +00:00
Home Assistant Version Control 260c1194fa .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 19:16:44 +00:00
Home Assistant Version Control 03e9cc1f75 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 19:16:20 +00:00
Home Assistant Version Control e198fef3bb .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 18:49:21 +00:00
Home Assistant Version Control 7176862bd9 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 18:48:53 +00:00
Home Assistant Version Control 799122e9db .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 18:38:30 +00:00
Home Assistant Version Control 55e296fa0b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 18:36:32 +00:00
Home Assistant Version Control 63e729e51e .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 18:27:12 +00:00
Home Assistant Version Control 4d0facb24f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 18:27:01 +00:00
Home Assistant Version Control 43bad71200 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 18:24:53 +00:00
Home Assistant Version Control e4fcb63b60 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 18:24:36 +00:00
Home Assistant Version Control 8c4d92e938 zigbee2mqtt/state.json 2026-10-16 17:22:12 +00:00
Home Assistant Version Control fa854ab238 .storage/lovelace_resources 2026-10-16 17:21:26 +00:00
Home Assistant Version Control 9920cf53c9 .ha_run.lock 2026-10-16 17:20:56 +00:00
Home Assistant Version Control e9e6b63f10 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 17:19:27 +00:00
Home Assistant Version Control 60654074b2 configuration.yaml, zigbee2mqtt/state.json 2026-10-16 17:18:51 +00:00
Home Assistant Version Control 16cc6992ab zigbee2mqtt/state.json 2026-10-16 16:37:55 +00:00
Home Assistant Version Control 1aa17fdc6f zigbee2mqtt/state.json 2026-10-16 16:31:37 +00:00
Home Assistant Version Control 0973ceb56d zigbee2mqtt/state.json 2026-10-16 14:53:36 +00:00
Home Assistant Version Control 03d4508844 zigbee2mqtt/state.json 2026-10-16 14:38:20 +00:00
Home Assistant Version Control c6d576d71d zigbee2mqtt/state.json 2026-10-16 14:31:35 +00:00
Home Assistant Version Control 3eb2f38547 zigbee2mqtt/state.json 2026-10-16 14:23:55 +00:00
Home Assistant Version Control b2bd4fcc37 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 14:04:02 +00:00
Home Assistant Version Control 34e71e2dc6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-16 14:03:51 +00:00
Home Assistant Version Control d9d5ffae98 4 files 2026-10-16 14:03:20 +00:00
Home Assistant Version Control e488cc5057 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 14:02:45 +00:00
Home Assistant Version Control 12ced0be5b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-16 13:59:25 +00:00
Home Assistant Version Control ca8536edd2 zigbee2mqtt/state.json 2026-10-16 13:52:59 +00:00
Home Assistant Version Control 64eb0c647c 251 files 2026-10-16 12:38:25 +00:00
Home Assistant Version Control 3acf0cdf8d zigbee2mqtt/state.json 2026-10-16 12:09:27 +00:00
Home Assistant Version Control c26981a04f zigbee2mqtt/state.json 2026-10-16 11:15:08 +00:00
Home Assistant Version Control 11f1ee5533 zigbee2mqtt/state.json 2026-10-16 10:09:24 +00:00
Home Assistant Version Control 13007486a4 zigbee2mqtt/state.json 2026-10-16 08:09:24 +00:00
Home Assistant Version Control a042677426 zigbee2mqtt/state.json 2026-10-16 06:09:23 +00:00
Home Assistant Version Control 6fad53d102 zigbee2mqtt/state.json 2026-10-16 04:09:21 +00:00
Home Assistant Version Control 665d4d2f22 zigbee2mqtt/state.json 2026-10-16 02:09:20 +00:00
Home Assistant Version Control 47c7f20f23 zigbee2mqtt/state.json 2026-10-16 02:01:31 +00:00
Home Assistant Version Control 4955643c81 zigbee2mqtt/state.json 2026-10-16 01:52:45 +00:00
Home Assistant Version Control 7e8f2f5f19 zigbee2mqtt/state.json 2026-10-16 01:45:23 +00:00
Home Assistant Version Control 8ebd84b8ad zigbee2mqtt/state.json 2026-10-16 01:40:59 +00:00
Home Assistant Version Control ac1304a583 zigbee2mqtt/state.json 2026-10-16 00:09:19 +00:00
Home Assistant Version Control 5ca9799d5f zigbee2mqtt/state.json 2026-10-16 00:02:21 +00:00
Home Assistant Version Control d4db37d188 zigbee2mqtt/state.json 2026-10-15 23:54:58 +00:00
Home Assistant Version Control 0947c416e0 zigbee2mqtt/state.json 2026-10-15 23:47:37 +00:00
Home Assistant Version Control 9043cf2fc9 zigbee2mqtt/state.json 2026-10-15 23:41:41 +00:00
Home Assistant Version Control 9a2382f11c zigbee2mqtt/state.json 2026-10-15 23:00:45 +00:00
Home Assistant Version Control 6dec61306b zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-15 22:37:15 +00:00
Home Assistant Version Control c898183811 zigbee2mqtt/state.json 2026-10-15 22:08:45 +00:00
Home Assistant Version Control 42a68e4da9 zigbee2mqtt/state.json 2026-10-15 21:13:42 +00:00
Home Assistant Version Control 6946360252 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 21:03:31 +00:00
Home Assistant Version Control b8dbcc281d .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 21:02:55 +00:00
Home Assistant Version Control 1ff932aa47 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 21:02:43 +00:00
Home Assistant Version Control 12c7d115d8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 21:02:31 +00:00
Home Assistant Version Control 2c301030e6 3 files 2026-10-15 21:02:23 +00:00
Home Assistant Version Control fcea77b9f2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 21:01:31 +00:00
Home Assistant Version Control 28e98c2450 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 21:01:19 +00:00
Home Assistant Version Control 35f083a8cc 3 files 2026-10-15 21:01:13 +00:00
Home Assistant Version Control bff6fb6de1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 20:59:13 +00:00
Home Assistant Version Control bdd308dcad .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 20:58:13 +00:00
Home Assistant Version Control e3e4db83e3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 20:57:35 +00:00
Home Assistant Version Control d0200381ac .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 20:57:11 +00:00
Home Assistant Version Control 4c05a5cfc7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 20:56:25 +00:00
Home Assistant Version Control dd710dc2e4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 20:39:46 +00:00
Home Assistant Version Control 36dc013dd6 zigbee2mqtt/state.json 2026-10-15 20:20:08 +00:00
Home Assistant Version Control 87506205a0 zigbee2mqtt/state.json 2026-10-15 20:09:10 +00:00
Home Assistant Version Control e5649c2d52 zigbee2mqtt/state.json 2026-10-15 19:37:27 +00:00
Home Assistant Version Control 2c9aa2e3a2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:55:27 +00:00
Home Assistant Version Control 9d2c446156 3 files 2026-10-15 18:53:39 +00:00
Home Assistant Version Control 9ad5da69d0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 18:52:03 +00:00
Home Assistant Version Control bb72c64c03 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:51:47 +00:00
Home Assistant Version Control c5aceee651 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:49:13 +00:00
Home Assistant Version Control 64e9597c9f .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:48:57 +00:00
Home Assistant Version Control 016da2ed53 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:48:47 +00:00
Home Assistant Version Control d891bdf976 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 18:47:03 +00:00
Home Assistant Version Control a5f1d0ab2f .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:46:45 +00:00
Home Assistant Version Control 01a9e76aff 3 files 2026-10-15 18:45:33 +00:00
Home Assistant Version Control 8fcc94ef5a .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:43:37 +00:00
Home Assistant Version Control e99d0a7410 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:43:03 +00:00
Home Assistant Version Control b3599589f5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 18:42:53 +00:00
Home Assistant Version Control 856d994e0b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:40:24 +00:00
Home Assistant Version Control 53b4922b87 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 18:40:03 +00:00
Home Assistant Version Control e303e7087f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 18:38:25 +00:00
Home Assistant Version Control 3d0eb0790c .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-15 18:35:43 +00:00
Home Assistant Version Control 4390a25384 zigbee2mqtt/state.json 2026-10-15 18:13:49 +00:00
Home Assistant Version Control 98931cbe68 zigbee2mqtt/state.json 2026-10-15 18:08:59 +00:00
Home Assistant Version Control 6bc199355d opencode/decisions.yaml 2026-10-15 17:59:46 +00:00
Home Assistant Version Control 1e6145f2f4 opencode/decisions.yaml, zigbee2mqtt/state.json 2026-10-15 17:59:34 +00:00
Home Assistant Version Control ed20f8889d opencode/decisions.yaml 2026-10-15 17:46:33 +00:00
Home Assistant Version Control 5ebc38eac8 opencode/decisions.yaml, zigbee2mqtt/state.json 2026-10-15 17:46:23 +00:00
Home Assistant Version Control e9a0bb27cc .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:40:53 +00:00
Home Assistant Version Control d834d96143 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:40:31 +00:00
Home Assistant Version Control 005a004f44 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:40:27 +00:00
Home Assistant Version Control 28d9f2955e .ha_mcp/backups/dashboard.3d-printer-cellphone.20261015_174011.yaml, .storage/lovelace.3d_printer_cellphone 2026-10-15 17:40:17 +00:00
Home Assistant Version Control 105667e37d .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 17:39:39 +00:00
Home Assistant Version Control 322763702c .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:36:25 +00:00
Home Assistant Version Control 1a65eb554d .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-15 17:34:21 +00:00
Home Assistant Version Control 71ff8668a0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:24:28 +00:00
Home Assistant Version Control feef187540 .storage/lovelace.3d_printer_cellphone 2026-10-15 17:24:18 +00:00
Home Assistant Version Control cfd23d8979 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:23:46 +00:00
Home Assistant Version Control d50ee0617c .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:23:28 +00:00
Home Assistant Version Control da6a5bca32 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:23:14 +00:00
Home Assistant Version Control 0ff7685d8a .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:22:48 +00:00
Home Assistant Version Control 82a0a06cfb .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 17:22:10 +00:00
Home Assistant Version Control 220c9b6774 4 files 2026-10-15 17:21:46 +00:00
Home Assistant Version Control ab85ee4b98 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 17:14:27 +00:00
Home Assistant Version Control b92618efb5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:11:43 +00:00
Home Assistant Version Control 155fca0d69 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:11:21 +00:00
Home Assistant Version Control 2a592b3bd8 .ha_mcp/backups/dashboard.3d-printer-cellphone.20261015_171100.yaml, .storage/lovelace.3d_printer_cellphone 2026-10-15 17:11:08 +00:00
Home Assistant Version Control 26b193cd10 .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.3d_printer_cellphone 2026-10-15 17:09:43 +00:00
Home Assistant Version Control 7df2e24154 .storage/lovelace.3d_printer_cellphone 2026-10-15 17:09:35 +00:00
Home Assistant Version Control 7cff5e1903 .storage/lovelace.3d_printer_cellphone 2026-10-15 17:09:27 +00:00
Home Assistant Version Control 190fdff26b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:09:05 +00:00
Home Assistant Version Control 50f8f64dd3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 17:08:53 +00:00
Home Assistant Version Control ae6a6439ff .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 17:07:29 +00:00
Home Assistant Version Control 00c2f5c77d .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 16:47:22 +00:00
Home Assistant Version Control 34689c374e .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:46:20 +00:00
Home Assistant Version Control 6b9338707b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:45:38 +00:00
Home Assistant Version Control f546815c1a .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:45:03 +00:00
Home Assistant Version Control 169eb77bb8 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 16:43:38 +00:00
Home Assistant Version Control 340f99bbb2 zigbee2mqtt/state.json 2026-10-15 16:32:37 +00:00
Home Assistant Version Control 85299a8f13 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:26:26 +00:00
Home Assistant Version Control f2cc42b438 .storage/lovelace.3d_printer_cellphone 2026-10-15 16:26:16 +00:00
Home Assistant Version Control c81c3fa8bd .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:23:50 +00:00
Home Assistant Version Control 98094fb15d .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 16:23:00 +00:00
Home Assistant Version Control 8141aba5a1 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 16:17:16 +00:00
Home Assistant Version Control 5ee7e2d168 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 16:16:32 +00:00
Home Assistant Version Control f6278ba3dd zigbee2mqtt/state.json 2026-10-15 16:08:55 +00:00
Home Assistant Version Control b9186f48e6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 16:02:01 +00:00
Home Assistant Version Control 4bed1e6a38 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:01:14 +00:00
Home Assistant Version Control 6d5a6cb776 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 16:00:37 +00:00
Home Assistant Version Control 7eee4e36aa .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 15:59:13 +00:00
Home Assistant Version Control 177993d586 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 15:58:47 +00:00
Home Assistant Version Control cbe6fafeba .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 15:57:51 +00:00
Home Assistant Version Control fe6e616a56 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 15:06:52 +00:00
Home Assistant Version Control 41b5f4ffe5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 15:06:37 +00:00
Home Assistant Version Control 6599dacd2b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 15:06:32 +00:00
Home Assistant Version Control 87a85e9465 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 14:54:13 +00:00
Home Assistant Version Control 3d63c7cc30 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-10-15 14:53:49 +00:00
Home Assistant Version Control 0e8b2fc84b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 14:52:13 +00:00
Home Assistant Version Control 121e0c2c42 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 14:52:01 +00:00
Home Assistant Version Control 6864e98f9e .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-15 14:50:21 +00:00
Home Assistant Version Control 19a8269cb4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 14:45:13 +00:00
Home Assistant Version Control a218a7bf31 zigbee2mqtt/state.json 2026-10-15 14:08:56 +00:00
Home Assistant Version Control a22261d5c6 zigbee2mqtt/state.json 2026-10-15 13:53:17 +00:00
Home Assistant Version Control 1e4ec8416d .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:47:45 +00:00
Home Assistant Version Control 3e8437d098 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 13:47:09 +00:00
Home Assistant Version Control 0c7ab129dc .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:45:01 +00:00
Home Assistant Version Control 9d627cfc71 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:44:36 +00:00
Home Assistant Version Control 2f1a1a035b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:43:54 +00:00
Home Assistant Version Control 63dc5fffef .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:43:42 +00:00
Home Assistant Version Control 9d32101ab8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:43:03 +00:00
Home Assistant Version Control 9d4eaa5551 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:42:24 +00:00
Home Assistant Version Control 29befcd845 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 13:42:08 +00:00
Home Assistant Version Control 90d32d5573 6 files 2026-10-15 13:24:00 +00:00
Home Assistant Version Control c85606c96e 3 files 2026-10-15 13:23:24 +00:00
Home Assistant Version Control c181946323 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:22:45 +00:00
Home Assistant Version Control fc649c3b3f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 13:22:37 +00:00
Home Assistant Version Control a069024f9d .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-15 13:17:13 +00:00
Home Assistant Version Control fe530e8b02 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:13:29 +00:00
Home Assistant Version Control 434175866e .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:13:11 +00:00
Home Assistant Version Control 953106747b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:12:47 +00:00
Home Assistant Version Control 6323cfeb0c automations.yaml, zigbee2mqtt/state.json 2026-10-15 13:12:41 +00:00
Home Assistant Version Control 09c61b0496 automations.yaml 2026-10-15 13:11:35 +00:00
Home Assistant Version Control 2cada56779 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 13:11:17 +00:00
Home Assistant Version Control 2d4f51c6e1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:03:14 +00:00
Home Assistant Version Control 65226027bc .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 13:02:22 +00:00
Home Assistant Version Control c6afe29375 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 13:01:58 +00:00
Home Assistant Version Control 6ad5d66739 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 12:57:16 +00:00
Home Assistant Version Control de4e8a3503 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 12:54:58 +00:00
Home Assistant Version Control cc44f44c1b .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 12:54:50 +00:00
Home Assistant Version Control 9d331a7809 automations.yaml 2026-10-15 12:54:18 +00:00
Home Assistant Version Control e94b3714bd scripts.yaml, zigbee2mqtt/state.json 2026-10-15 12:54:04 +00:00
Home Assistant Version Control e6b1b4fac8 automations.yaml, zigbee2mqtt/state.json 2026-10-15 12:49:47 +00:00
Home Assistant Version Control 597166a690 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 12:43:21 +00:00
Home Assistant Version Control bf18f46326 .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 12:40:33 +00:00
Home Assistant Version Control 91f484e869 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 12:39:55 +00:00
Home Assistant Version Control 540713bc6e .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 12:30:48 +00:00
Home Assistant Version Control cb5739e98f .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 12:28:26 +00:00
Home Assistant Version Control 7ce3b2ea3f .ha_mcp/logs/mcp_usage.jsonl 2026-10-15 12:27:34 +00:00
Home Assistant Version Control 12413003be .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-15 12:26:56 +00:00
Home Assistant Version Control d879679e3d zigbee2mqtt/state.json 2026-10-15 12:13:40 +00:00
Home Assistant Version Control 4f1a63a4de zigbee2mqtt/state.json 2026-10-15 12:08:53 +00:00
Home Assistant Version Control d34dd1a83a zigbee2mqtt/state.json 2026-10-15 11:15:10 +00:00
Home Assistant Version Control 68180fd5c2 zigbee2mqtt/state.json 2026-10-15 10:08:52 +00:00
Home Assistant Version Control 189139eec0 zigbee2mqtt/state.json 2026-10-15 08:08:50 +00:00
Home Assistant Version Control 59faf9d2a3 zigbee2mqtt/state.json 2026-10-15 07:45:27 +00:00
Home Assistant Version Control 061c5ea6b7 zigbee2mqtt/state.json 2026-10-15 06:24:29 +00:00
Home Assistant Version Control 5a88128c65 zigbee2mqtt/state.json 2026-10-15 06:08:50 +00:00
Home Assistant Version Control a08daf338c zigbee2mqtt/state.json 2026-10-15 04:45:02 +00:00
Home Assistant Version Control eab2cd063a zigbee2mqtt/state.json 2026-10-15 04:08:45 +00:00
Home Assistant Version Control eba278cd85 zigbee2mqtt/state.json 2026-10-15 03:04:44 +00:00
Home Assistant Version Control 0fed32522a zigbee2mqtt/state.json 2026-10-15 02:13:44 +00:00
Home Assistant Version Control 5ec7a83c84 zigbee2mqtt/state.json 2026-10-15 02:08:38 +00:00
Home Assistant Version Control 0c707a75f7 zigbee2mqtt/state.json 2026-10-15 00:23:59 +00:00
Home Assistant Version Control cb16526563 zigbee2mqtt/state.json 2026-10-15 00:14:10 +00:00
Home Assistant Version Control 993881cecc zigbee2mqtt/state.json 2026-10-15 00:08:37 +00:00
Home Assistant Version Control 76690b4156 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-14 22:37:15 +00:00
Home Assistant Version Control 2d7df97b7e zigbee2mqtt/state.json 2026-10-14 22:34:09 +00:00
Home Assistant Version Control b3786b1675 zigbee2mqtt/state.json 2026-10-14 22:08:28 +00:00
Home Assistant Version Control 5c2fcdd445 zigbee2mqtt/state.json 2026-10-14 20:48:53 +00:00
Home Assistant Version Control 7da42d1e33 zigbee2mqtt/state.json 2026-10-14 20:08:23 +00:00
Home Assistant Version Control 29d46268a6 zigbee2mqtt/state.json 2026-10-14 19:04:37 +00:00
Home Assistant Version Control febb1aa844 zigbee2mqtt/state.json 2026-10-14 18:55:23 +00:00
Home Assistant Version Control d442d98416 291 files 2026-10-14 18:12:52 +00:00
Home Assistant Version Control 280501d2e8 291 files 2026-10-14 18:10:18 +00:00
Home Assistant Version Control c4e0178d8a .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:50:53 +00:00
Home Assistant Version Control 97a016496f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:50:43 +00:00
Home Assistant Version Control 2535ba0311 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:44:30 +00:00
Home Assistant Version Control 0e6fc70ccd .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:38:40 +00:00
Home Assistant Version Control c7901085d0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:38:22 +00:00
Home Assistant Version Control 14b2b965cf .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:38:05 +00:00
Home Assistant Version Control 90f73b4f4e automations.yaml 2026-10-14 17:37:30 +00:00
Home Assistant Version Control 44118bd4f4 automations.yaml 2026-10-14 17:37:18 +00:00
Home Assistant Version Control 27d0300552 automations.yaml, zigbee2mqtt/state.json 2026-10-14 17:37:12 +00:00
Home Assistant Version Control 470c6d252c .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:33:32 +00:00
Home Assistant Version Control fbd2b3f57b .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:33:06 +00:00
Home Assistant Version Control 0e3a61f78d .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:32:40 +00:00
Home Assistant Version Control 2d70d4ab60 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:32:32 +00:00
Home Assistant Version Control 871496be89 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:32:24 +00:00
Home Assistant Version Control 51bd33200f .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:31:52 +00:00
Home Assistant Version Control bb5afc8b9b .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:31:31 +00:00
Home Assistant Version Control 0e189ba388 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:30:53 +00:00
Home Assistant Version Control 9dc8b9f5a4 automations.yaml 2026-10-14 17:28:43 +00:00
Home Assistant Version Control bac81fd7cd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:28:07 +00:00
Home Assistant Version Control 6689261564 .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.sparkx_i7 2026-10-14 17:26:44 +00:00
Home Assistant Version Control 00adaf82b4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:26:29 +00:00
Home Assistant Version Control 1f6982ca86 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:26:22 +00:00
Home Assistant Version Control c478e3d3c6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:24:20 +00:00
Home Assistant Version Control 9032e16ef6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:23:11 +00:00
Home Assistant Version Control 2a1dca6ef2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:19:29 +00:00
Home Assistant Version Control d885e0bd46 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:18:53 +00:00
Home Assistant Version Control eec92ee548 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:18:31 +00:00
Home Assistant Version Control 08f5221f71 .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.sparkx_i7 2026-10-14 17:13:31 +00:00
Home Assistant Version Control cc13346a6e .storage/lovelace.sparkx_i7 2026-10-14 17:13:21 +00:00
Home Assistant Version Control cafe8a5d87 .storage/lovelace.sparkx_i7 2026-10-14 17:13:07 +00:00
Home Assistant Version Control 9f8ed4ce39 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-14 17:12:57 +00:00
Home Assistant Version Control 191ddaa9ec .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:11:47 +00:00
Home Assistant Version Control 4cf7da5990 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:11:29 +00:00
Home Assistant Version Control c38cfb3c40 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:08:30 +00:00
Home Assistant Version Control 88411a0456 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 17:08:00 +00:00
Home Assistant Version Control 314a19b8ea .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 17:07:53 +00:00
Home Assistant Version Control 45024d8090 zigbee2mqtt/state.json 2026-10-14 16:38:09 +00:00
Home Assistant Version Control 973527c348 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 15:43:44 +00:00
Home Assistant Version Control 0a9e6b9e6e zigbee2mqtt/state.json 2026-10-14 15:39:03 +00:00
Home Assistant Version Control 2cf80b0460 zigbee2mqtt/state.json 2026-10-14 15:33:58 +00:00
Home Assistant Version Control ab7489808e zigbee2mqtt/state.json 2026-10-14 14:38:05 +00:00
Home Assistant Version Control 75f5d6697e automations.yaml, zigbee2mqtt/state.json 2026-10-14 14:01:09 +00:00
Home Assistant Version Control be225cebad .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 13:53:24 +00:00
Home Assistant Version Control 73ba0d594c .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 13:52:22 +00:00
Home Assistant Version Control 56b7e77c72 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:52:14 +00:00
Home Assistant Version Control 558dcd12ac .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:51:54 +00:00
Home Assistant Version Control e5a43e6273 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:32:25 +00:00
Home Assistant Version Control 37090c78e4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 13:30:35 +00:00
Home Assistant Version Control 7afb069afe .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:30:27 +00:00
Home Assistant Version Control 70be1b658e .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 13:17:16 +00:00
Home Assistant Version Control 07c92f6886 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:17:02 +00:00
Home Assistant Version Control b6c71b1d37 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:15:52 +00:00
Home Assistant Version Control 73b050224b .ha_mcp/logs/mcp_usage.jsonl 2026-10-14 13:01:33 +00:00
Home Assistant Version Control 7898dfa944 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-14 13:00:23 +00:00
Home Assistant Version Control 41f460e488 zigbee2mqtt/state.json 2026-10-14 12:38:05 +00:00
Home Assistant Version Control f23f73a002 zigbee2mqtt/state.json 2026-10-14 11:15:07 +00:00
Home Assistant Version Control 77ad5efab5 zigbee2mqtt/state.json 2026-10-14 10:38:05 +00:00
Home Assistant Version Control d14173e8c1 zigbee2mqtt/state.json 2026-10-14 08:38:05 +00:00
Home Assistant Version Control 671cffef6e zigbee2mqtt/state.json 2026-10-14 06:38:02 +00:00
Home Assistant Version Control 471b6732ba zigbee2mqtt/state.json 2026-10-14 04:38:02 +00:00
Home Assistant Version Control 7459288cde zigbee2mqtt/state.json 2026-10-14 02:38:02 +00:00
Home Assistant Version Control 248ac59040 zigbee2mqtt/state.json 2026-10-14 00:38:00 +00:00
Home Assistant Version Control 68f17be10f zigbee2mqtt/state.json 2026-10-14 00:04:14 +00:00
Home Assistant Version Control d6ba6b23f6 zigbee2mqtt/state.json 2026-10-13 23:10:55 +00:00
Home Assistant Version Control 4e86a7b168 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-13 22:37:17 +00:00
Home Assistant Version Control 79862d6c38 zigbee2mqtt/state.json 2026-10-13 22:15:38 +00:00
Home Assistant Version Control 1312225349 zigbee2mqtt/state.json 2026-10-13 21:19:49 +00:00
Home Assistant Version Control 8dd1d71388 zigbee2mqtt/state.json 2026-10-13 20:37:40 +00:00
Home Assistant Version Control c710d94273 zigbee2mqtt/state.json 2026-10-13 20:35:21 +00:00
Home Assistant Version Control 590cfb2e67 zigbee2mqtt/state.json 2026-10-13 18:37:39 +00:00
Home Assistant Version Control b9975ab046 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-13 16:37:38 +00:00
Home Assistant Version Control 120767720f zigbee2mqtt/state.json 2026-10-13 14:37:35 +00:00
Home Assistant Version Control e1505ded53 zigbee2mqtt/state.json 2026-10-13 12:37:34 +00:00
Home Assistant Version Control d981ab605b zigbee2mqtt/state.json 2026-10-13 11:15:07 +00:00
Home Assistant Version Control 2bb4ed31f1 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-13 10:37:33 +00:00
Home Assistant Version Control 01ffe42b42 zigbee2mqtt/state.json 2026-10-13 08:37:31 +00:00
Home Assistant Version Control 959033c826 zigbee2mqtt/state.json 2026-10-13 06:37:30 +00:00
Home Assistant Version Control 089d15aab4 zigbee2mqtt/state.json 2026-10-13 05:43:27 +00:00
Home Assistant Version Control ccf6260a1f zigbee2mqtt/state.json 2026-10-13 04:50:26 +00:00
Home Assistant Version Control a1eca7486d zigbee2mqtt/state.json 2026-10-13 04:37:29 +00:00
Home Assistant Version Control 865d5d8adc zigbee2mqtt/state.json 2026-10-13 03:54:19 +00:00
Home Assistant Version Control 24bb232fc0 zigbee2mqtt/state.json 2026-10-13 02:58:59 +00:00
Home Assistant Version Control 18eb35ffd7 zigbee2mqtt/state.json 2026-10-13 02:37:25 +00:00
Home Assistant Version Control 0bf0f85881 zigbee2mqtt/state.json 2026-10-13 02:14:05 +00:00
Home Assistant Version Control f2f3ab0d03 zigbee2mqtt/state.json 2026-10-13 00:37:22 +00:00
Home Assistant Version Control c16aed0874 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-12 22:37:15 +00:00
Home Assistant Version Control 55ecbe695e .storage/lovelace_resources 2026-10-12 22:33:27 +00:00
Home Assistant Version Control a9cadb54fe .ha_run.lock 2026-10-12 22:32:59 +00:00
Home Assistant Version Control 957b247d4a 8 files 2026-10-12 22:32:16 +00:00
Home Assistant Version Control b12fb1db7c zigbee2mqtt/state.json 2026-10-12 22:10:36 +00:00
Home Assistant Version Control 53ff2f8848 zigbee2mqtt/state.json 2026-10-12 20:10:34 +00:00
Home Assistant Version Control 137d0fcf86 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-12 18:10:35 +00:00
Home Assistant Version Control 6832b08d40 opencode/decisions.yaml 2026-10-12 16:54:54 +00:00
Home Assistant Version Control 2d55334aee opencode/decisions.yaml, zigbee2mqtt/state.json 2026-10-12 16:54:46 +00:00
Home Assistant Version Control 14741fec48 opencode/decisions.yaml 2026-10-12 16:50:34 +00:00
Home Assistant Version Control 73a570a1fc .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:48:46 +00:00
Home Assistant Version Control f80416cc46 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:47:40 +00:00
Home Assistant Version Control b630341e3d .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:47:16 +00:00
Home Assistant Version Control d66c9ef3c0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 16:47:04 +00:00
Home Assistant Version Control 1458b96ad3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:42:57 +00:00
Home Assistant Version Control 5ed91ed14e .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:42:47 +00:00
Home Assistant Version Control 2c720116e6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 16:42:19 +00:00
Home Assistant Version Control 18fab66ae5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:40:41 +00:00
Home Assistant Version Control b3af4761ee .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:37:51 +00:00
Home Assistant Version Control d65892b2d0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 16:37:37 +00:00
Home Assistant Version Control adbee2d864 3 files 2026-10-12 16:33:17 +00:00
Home Assistant Version Control 1c1eaa75b3 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 16:33:01 +00:00
Home Assistant Version Control ba79e72d95 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-10-12 16:31:27 +00:00
Home Assistant Version Control e306c60ee0 3 files 2026-10-12 16:31:21 +00:00
Home Assistant Version Control 98cf7a3f24 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 16:29:45 +00:00
Home Assistant Version Control 1fe729a7b8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:25:54 +00:00
Home Assistant Version Control 4763476cda .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:25:30 +00:00
Home Assistant Version Control f97f6a77bf .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:24:42 +00:00
Home Assistant Version Control 555b5629e0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 16:24:22 +00:00
Home Assistant Version Control 8290a19869 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 16:24:09 +00:00
Home Assistant Version Control cea0c6bafe zigbee2mqtt/state.json 2026-10-12 16:10:31 +00:00
Home Assistant Version Control 44b389809f zigbee2mqtt/state.json 2026-10-12 16:04:43 +00:00
Home Assistant Version Control 0f1ffdbd06 zigbee2mqtt/state.json 2026-10-12 15:27:29 +00:00
Home Assistant Version Control 1f76cfa68a zigbee2mqtt/state.json 2026-10-12 14:45:13 +00:00
Home Assistant Version Control d8dbd5e255 zigbee2mqtt/state.json 2026-10-12 14:10:30 +00:00
Home Assistant Version Control 5ab99d2d8e zigbee2mqtt/state.json 2026-10-12 14:05:04 +00:00
Home Assistant Version Control 910d0f0780 zigbee2mqtt/state.json 2026-10-12 13:29:44 +00:00
Home Assistant Version Control 758f30a7f3 zigbee2mqtt/state.json 2026-10-12 12:10:31 +00:00
Home Assistant Version Control ece9b211f3 zigbee2mqtt/state.json 2026-10-12 10:10:30 +00:00
Home Assistant Version Control 5b83a2f5da zigbee2mqtt/state.json 2026-10-12 08:10:30 +00:00
Home Assistant Version Control 0f9277f002 zigbee2mqtt/state.json 2026-10-12 06:10:30 +00:00
Home Assistant Version Control ac1b29af5a zigbee2mqtt/state.json 2026-10-12 04:14:55 +00:00
Home Assistant Version Control 95074a59c5 zigbee2mqtt/state.json 2026-10-12 04:10:29 +00:00
Home Assistant Version Control 08f469e981 zigbee2mqtt/state.json 2026-10-12 03:38:05 +00:00
Home Assistant Version Control f13494a739 zigbee2mqtt/state.json 2026-10-12 02:59:23 +00:00
Home Assistant Version Control 811d40d87e zigbee2mqtt/state.json 2026-10-12 02:20:36 +00:00
Home Assistant Version Control 3d0f4295d2 zigbee2mqtt/state.json 2026-10-12 02:10:27 +00:00
Home Assistant Version Control da38570085 zigbee2mqtt/state.json 2026-10-12 01:49:05 +00:00
Home Assistant Version Control eada01941c opencode/decisions.yaml, zigbee2mqtt/state.json 2026-10-12 01:07:28 +00:00
Home Assistant Version Control a5dbec3b78 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:06:34 +00:00
Home Assistant Version Control 3024b2fae2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:05:23 +00:00
Home Assistant Version Control 58b063a43b .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:05:14 +00:00
Home Assistant Version Control 3eb9411a32 4 files 2026-10-12 01:05:06 +00:00
Home Assistant Version Control c6b93676ed .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:01:37 +00:00
Home Assistant Version Control d4d82ba4c5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:00:45 +00:00
Home Assistant Version Control 247396ef90 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:00:17 +00:00
Home Assistant Version Control b9e022ce2c .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 01:00:01 +00:00
Home Assistant Version Control 0918193cf0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-12 00:57:59 +00:00
Home Assistant Version Control 469d706b6b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-12 00:57:35 +00:00
Home Assistant Version Control 479a06d324 zigbee2mqtt/state.json 2026-10-12 00:38:14 +00:00
Home Assistant Version Control 529af07f2d zigbee2mqtt/state.json 2026-10-12 00:10:28 +00:00
Home Assistant Version Control f0590c2b28 198 files 2026-10-11 23:52:32 +00:00
Home Assistant Version Control 669d229519 198 files 2026-10-11 23:51:59 +00:00
Home Assistant Version Control 4a64770282 zigbee2mqtt/state.json 2026-10-11 23:18:37 +00:00
Home Assistant Version Control 5cda67fef4 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-11 22:37:15 +00:00
Home Assistant Version Control 633f3ef608 zigbee2mqtt/state.json 2026-10-11 22:10:27 +00:00
Home Assistant Version Control 7b23cdd45e zigbee2mqtt/state.json 2026-10-11 21:48:54 +00:00
Home Assistant Version Control f5b8f921df zigbee2mqtt/state.json 2026-10-11 21:41:47 +00:00
Home Assistant Version Control 13b2d67744 zigbee2mqtt/state.json 2026-10-11 21:34:49 +00:00
Home Assistant Version Control bc3f24aa55 zigbee2mqtt/state.json 2026-10-11 21:27:19 +00:00
Home Assistant Version Control d1d362b788 zigbee2mqtt/state.json 2026-10-11 21:21:57 +00:00
Home Assistant Version Control 53eb4f8c9f zigbee2mqtt/state.json 2026-10-11 20:10:28 +00:00
Home Assistant Version Control 9e0411e09c zigbee2mqtt/state.json 2026-10-11 18:10:26 +00:00
Home Assistant Version Control 567c2759eb .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 17:24:13 +00:00
Home Assistant Version Control c79c28a0e2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 17:20:13 +00:00
Home Assistant Version Control 45511311c9 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 17:19:17 +00:00
Home Assistant Version Control f0541b8166 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 17:15:19 +00:00
Home Assistant Version Control d0b663eccb .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 17:14:05 +00:00
Home Assistant Version Control e035b2461e .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 17:13:25 +00:00
Home Assistant Version Control f2eebfc289 zigbee2mqtt/state.json 2026-10-11 17:07:56 +00:00
Home Assistant Version Control 3107bd5d68 zigbee2mqtt/state.json 2026-10-11 17:00:50 +00:00
Home Assistant Version Control dfb39d2bec zigbee2mqtt/state.json 2026-10-11 16:53:52 +00:00
Home Assistant Version Control 8369395df7 zigbee2mqtt/state.json 2026-10-11 16:46:19 +00:00
Home Assistant Version Control 38369ab51a zigbee2mqtt/state.json 2026-10-11 16:40:59 +00:00
Home Assistant Version Control acf7a7f11e zigbee2mqtt/state.json 2026-10-11 16:10:25 +00:00
Home Assistant Version Control a4d74e8a25 zigbee2mqtt/state.json 2026-10-11 14:10:25 +00:00
Home Assistant Version Control 8938379223 zigbee2mqtt/state.json 2026-10-11 12:10:24 +00:00
Home Assistant Version Control 0e80d14210 zigbee2mqtt/state.json 2026-10-11 10:10:25 +00:00
Home Assistant Version Control 8f5eeb5bd4 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-11 08:10:23 +00:00
Home Assistant Version Control 26ee89e474 opencode/decisions.yaml 2026-10-11 07:15:19 +00:00
Home Assistant Version Control ed834bcb69 opencode/decisions.yaml 2026-10-11 07:13:43 +00:00
Home Assistant Version Control 7a06282e89 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:12:23 +00:00
Home Assistant Version Control d48fde9978 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 07:12:15 +00:00
Home Assistant Version Control dfce6e58c5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:10:33 +00:00
Home Assistant Version Control 7e6adda187 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:07:45 +00:00
Home Assistant Version Control 0c4a1604a8 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 07:07:21 +00:00
Home Assistant Version Control 737b8b0dde .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:03:16 +00:00
Home Assistant Version Control f6ca2546db zigbee2mqtt/state.json 2026-10-11 07:02:13 +00:00
Home Assistant Version Control 4ca64ac264 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:01:24 +00:00
Home Assistant Version Control 6576ea71d7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:00:56 +00:00
Home Assistant Version Control 0dc6ce1da5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:00:36 +00:00
Home Assistant Version Control b7e9dcef8c .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 07:00:30 +00:00
Home Assistant Version Control 99239e2ae6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 06:59:42 +00:00
Home Assistant Version Control 231a532125 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 06:59:32 +00:00
Home Assistant Version Control f2589f273c .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 06:59:08 +00:00
Home Assistant Version Control 5ec0455fe6 opencode/decisions.yaml, zigbee2mqtt/state.json 2026-10-11 06:07:11 +00:00
Home Assistant Version Control 03b2253a49 opencode/decisions.yaml 2026-10-11 06:04:35 +00:00
Home Assistant Version Control 1026d18f0c .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 06:02:49 +00:00
Home Assistant Version Control b40ad5ed6b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 06:02:19 +00:00
Home Assistant Version Control 48c7e7f665 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:58:39 +00:00
Home Assistant Version Control ba905397c1 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 05:58:27 +00:00
Home Assistant Version Control 32082ca3f9 zigbee2mqtt/state.json 2026-10-11 05:53:24 +00:00
Home Assistant Version Control 7cd29017b2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:48:56 +00:00
Home Assistant Version Control ddbc06e9f1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:48:32 +00:00
Home Assistant Version Control 6d10c4da08 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:48:04 +00:00
Home Assistant Version Control f545663ddf .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 05:47:02 +00:00
Home Assistant Version Control 915e2cc4e4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:46:46 +00:00
Home Assistant Version Control a60258fded .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:46:32 +00:00
Home Assistant Version Control f7fc0dde85 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:46:08 +00:00
Home Assistant Version Control e54e90f1fc .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:45:44 +00:00
Home Assistant Version Control e1dfaa34af .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:45:34 +00:00
Home Assistant Version Control 0c6d6e9384 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:45:12 +00:00
Home Assistant Version Control 26c9f0821e .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:42:18 +00:00
Home Assistant Version Control 52e4fbfc01 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 05:41:58 +00:00
Home Assistant Version Control 41d66b85cf .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:41:04 +00:00
Home Assistant Version Control d885b14b0f .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 05:40:49 +00:00
Home Assistant Version Control 88437657c7 zigbee2mqtt/state.json 2026-10-11 05:38:49 +00:00
Home Assistant Version Control cf66d68fee zigbee2mqtt/state.json 2026-10-11 05:30:05 +00:00
Home Assistant Version Control 7fe50e78d1 zigbee2mqtt/state.json 2026-10-11 05:17:40 +00:00
Home Assistant Version Control 396dbdd9df zigbee2mqtt/state.json 2026-10-11 05:05:08 +00:00
Home Assistant Version Control cb744ba2f8 .storage/lovelace.3d_printer_cellphone 2026-10-11 05:01:31 +00:00
Home Assistant Version Control 69b4b8ee4e .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-11 05:01:25 +00:00
Home Assistant Version Control 23113e06de zigbee2mqtt/state.json 2026-10-11 04:52:37 +00:00
Home Assistant Version Control 7163e7140f zigbee2mqtt/state.json 2026-10-11 04:41:45 +00:00
Home Assistant Version Control 81d685333b zigbee2mqtt/state.json 2026-10-11 04:28:16 +00:00
Home Assistant Version Control 0acc764c83 zigbee2mqtt/state.json 2026-10-11 04:07:06 +00:00
Home Assistant Version Control e421d78da5 .storage/lovelace_resources 2026-10-11 04:06:22 +00:00
Home Assistant Version Control 1451d59fe0 .HA_VERSION, .ha_run.lock 2026-10-11 04:05:50 +00:00
Home Assistant Version Control 578238056e zigbee2mqtt/state.json 2026-10-11 04:04:52 +00:00
Home Assistant Version Control 82a1b7c0c5 7 files 2026-10-11 04:01:13 +00:00
Home Assistant Version Control 260329b79f opencode/decisions.yaml 2026-10-11 03:59:51 +00:00
Home Assistant Version Control a287203d7d .storage/lovelace.3d_printer_cellphone 2026-10-11 03:58:26 +00:00
Home Assistant Version Control e19f825a58 .storage/lovelace.3d_printer_cellphone 2026-10-11 03:58:18 +00:00
Home Assistant Version Control 00c0e8b19a opencode/decisions.yaml, zigbee2mqtt/state.json 2026-10-11 03:57:10 +00:00
Home Assistant Version Control 96522aaf6b .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:56:37 +00:00
Home Assistant Version Control 620287ad78 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:56:17 +00:00
Home Assistant Version Control 556596925a .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:56:09 +00:00
Home Assistant Version Control 577e90bf29 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:55:27 +00:00
Home Assistant Version Control 9d736edac2 .storage/lovelace.sparkx_i7 2026-10-11 03:54:43 +00:00
Home Assistant Version Control c61d938bca .storage/lovelace.sparkx_i7 2026-10-11 03:54:35 +00:00
Home Assistant Version Control b9ba8107be .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:53:06 +00:00
Home Assistant Version Control d6ce5ccb64 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:52:55 +00:00
Home Assistant Version Control 1d36a93b36 5 files 2026-10-11 03:52:46 +00:00
Home Assistant Version Control df9bc2ed01 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 03:52:17 +00:00
Home Assistant Version Control af24a60c60 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:50:57 +00:00
Home Assistant Version Control 6ecc323623 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 03:50:19 +00:00
Home Assistant Version Control 02981555cf .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:44:27 +00:00
Home Assistant Version Control 51af4cb572 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:43:59 +00:00
Home Assistant Version Control 95d220d9f1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:43:51 +00:00
Home Assistant Version Control 7fa4f4a0ec .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:43:21 +00:00
Home Assistant Version Control 363ddc8287 .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:42:59 +00:00
Home Assistant Version Control 1fdd5d330c .ha_mcp/logs/mcp_usage.jsonl 2026-10-11 03:42:09 +00:00
Home Assistant Version Control 106aaadf43 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-11 03:41:57 +00:00
Home Assistant Version Control 403e78afb2 zigbee2mqtt/state.json 2026-10-11 03:36:38 +00:00
Home Assistant Version Control 15a376f70e zigbee2mqtt/state.json 2026-10-11 03:07:49 +00:00
Home Assistant Version Control 66e759bcea zigbee2mqtt/state.json 2026-10-11 02:35:03 +00:00
Home Assistant Version Control 1eaad727cb zigbee2mqtt/state.json 2026-10-11 02:29:34 +00:00
Home Assistant Version Control 4eed5b325b zigbee2mqtt/state.json 2026-10-11 02:02:39 +00:00
Home Assistant Version Control 6170385f1e zigbee2mqtt/state.json 2026-10-11 01:38:03 +00:00
Home Assistant Version Control 4d61124f3e .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-11 00:32:06 +00:00
Home Assistant Version Control 6ef68d05a4 .storage/lovelace.3d_printer_cellphone 2026-10-11 00:31:45 +00:00
Home Assistant Version Control 73b3dda925 .storage/lovelace.3d_printer_cellphone 2026-10-11 00:31:33 +00:00
Home Assistant Version Control d005454cee zigbee2mqtt/state.json 2026-10-11 00:29:29 +00:00
Home Assistant Version Control cb893ad65a zigbee2mqtt/state.json 2026-10-11 00:17:25 +00:00
Home Assistant Version Control 1f7b2afe21 zigbee2mqtt/state.json 2026-10-11 00:04:40 +00:00
Home Assistant Version Control 2eb0f324ba zigbee2mqtt/state.json 2026-10-10 23:50:59 +00:00
Home Assistant Version Control 382ca4ba46 zigbee2mqtt/state.json 2026-10-10 23:41:03 +00:00
Home Assistant Version Control 8860ac275c zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-10 22:37:15 +00:00
Home Assistant Version Control 3bbd0c7680 zigbee2mqtt/state.json 2026-10-10 22:29:24 +00:00
Home Assistant Version Control 89e858dd53 zigbee2mqtt/state.json 2026-10-10 20:29:23 +00:00
Home Assistant Version Control 6256492512 zigbee2mqtt/state.json 2026-10-10 19:40:25 +00:00
Home Assistant Version Control ca89efc4c4 zigbee2mqtt/state.json 2026-10-10 19:26:55 +00:00
Home Assistant Version Control 15a94e9123 zigbee2mqtt/state.json 2026-10-10 19:26:51 +00:00
Home Assistant Version Control 949ccdf6ea zigbee2mqtt/state.json 2026-10-10 19:14:36 +00:00
Home Assistant Version Control f0df0a3bf2 zigbee2mqtt/state.json 2026-10-10 19:00:57 +00:00
Home Assistant Version Control 8b2e6140b4 zigbee2mqtt/state.json 2026-10-10 18:50:39 +00:00
Home Assistant Version Control f25883df31 zigbee2mqtt/state.json 2026-10-10 18:29:19 +00:00
Home Assistant Version Control 32a2424462 .storage/lovelace_resources 2026-10-10 18:22:49 +00:00
Home Assistant Version Control a20d97c47f .ha_run.lock 2026-10-10 18:22:37 +00:00
Home Assistant Version Control 65bd949f79 zigbee2mqtt/state.json 2026-10-10 18:22:01 +00:00
Home Assistant Version Control 43417ba793 zigbee2mqtt/state.json 2026-10-10 18:13:44 +00:00
Home Assistant Version Control 9782c68dfc zigbee2mqtt/state.json 2026-10-10 18:11:38 +00:00
Home Assistant Version Control 29049432d1 zigbee2mqtt/state.json 2026-10-10 17:05:49 +00:00
Home Assistant Version Control 8eaf16d200 zigbee2mqtt/state.json 2026-10-10 16:11:23 +00:00
Home Assistant Version Control 792b15ce09 zigbee2mqtt/state.json 2026-10-10 15:54:50 +00:00
Home Assistant Version Control bfafb4c28a 221 files 2026-10-10 15:24:58 +00:00
Home Assistant Version Control ae12b88c7d .storage/lovelace.sparkx_i7 2026-10-10 14:49:58 +00:00
Home Assistant Version Control 9f25ba685a .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-10 14:49:40 +00:00
Home Assistant Version Control 5e7e8f7a1b .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-10 14:42:18 +00:00
Home Assistant Version Control 299c9285a4 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-10 14:41:00 +00:00
Home Assistant Version Control bc5d540ee0 .storage/lovelace.3d_printer_cellphone 2026-10-10 14:21:49 +00:00
Home Assistant Version Control db60b7cbb5 .storage/lovelace.3d_printer_cellphone 2026-10-10 14:21:13 +00:00
Home Assistant Version Control 1d9a0fa06f .storage/lovelace.3d_printer_cellphone 2026-10-10 14:20:45 +00:00
Home Assistant Version Control b4e3a77691 .storage/lovelace.3d_printer_cellphone 2026-10-10 14:20:21 +00:00
Home Assistant Version Control 8ce5e76e6f .storage/lovelace.3d_printer_cellphone 2026-10-10 14:19:27 +00:00
Home Assistant Version Control b837dd5e1f .storage/lovelace.3d_printer_cellphone 2026-10-10 14:19:13 +00:00
Home Assistant Version Control ca5fc2a506 zigbee2mqtt/state.json 2026-10-10 14:17:16 +00:00
Home Assistant Version Control c0388f645e zigbee2mqtt/state.json 2026-10-10 14:11:14 +00:00
Home Assistant Version Control 177b77f967 zigbee2mqtt/state.json 2026-10-10 12:11:10 +00:00
Home Assistant Version Control b5be4a78aa zigbee2mqtt/state.json 2026-10-10 10:11:11 +00:00
Home Assistant Version Control 1c32453cbe zigbee2mqtt/state.json 2026-10-10 08:11:06 +00:00
Home Assistant Version Control abf21ee50d .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 07:24:43 +00:00
Home Assistant Version Control 45dbb3e351 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 07:17:07 +00:00
Home Assistant Version Control 50b11c12d8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 07:14:56 +00:00
Home Assistant Version Control 76812a3020 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 07:12:56 +00:00
Home Assistant Version Control 82f8d93f37 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 07:10:17 +00:00
Home Assistant Version Control 1fd82d4b5e .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 07:04:42 +00:00
Home Assistant Version Control 89135ce585 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 07:04:24 +00:00
Home Assistant Version Control 4cf7a5f254 4 files 2026-10-10 07:02:58 +00:00
Home Assistant Version Control 8aa679cd78 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:58:29 +00:00
Home Assistant Version Control 8123c44593 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:56:21 +00:00
Home Assistant Version Control 135415c6f1 3 files 2026-10-10 06:55:56 +00:00
Home Assistant Version Control 0cb4d1e37d .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:51:49 +00:00
Home Assistant Version Control 79031966cd .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:49:49 +00:00
Home Assistant Version Control db8db0ee1c .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:49:37 +00:00
Home Assistant Version Control b33ff8b2c0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:47:47 +00:00
Home Assistant Version Control f40b8bcde2 3 files 2026-10-10 06:45:49 +00:00
Home Assistant Version Control d889b7bb11 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:44:57 +00:00
Home Assistant Version Control e932b993ed .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:44:03 +00:00
Home Assistant Version Control b45d80f0ba .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:43:53 +00:00
Home Assistant Version Control 8a31f94cbe .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:43:27 +00:00
Home Assistant Version Control 54f7b4dc69 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:43:15 +00:00
Home Assistant Version Control 234da9b12f .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:42:47 +00:00
Home Assistant Version Control 2fbfb98bd6 3 files 2026-10-10 06:42:39 +00:00
Home Assistant Version Control 95734c2f81 .ha_mcp/backups/entity.input_text.total_filament_used.20261010_064039.yaml, .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:40:41 +00:00
Home Assistant Version Control 035587c84e .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:40:32 +00:00
Home Assistant Version Control d615f54c93 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:40:21 +00:00
Home Assistant Version Control 8248b1fb79 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:39:09 +00:00
Home Assistant Version Control 9b26cb08cf .storage/lovelace_resources 2026-10-10 06:38:13 +00:00
Home Assistant Version Control 55dd6a3754 4 files 2026-10-10 06:38:02 +00:00
Home Assistant Version Control 8b759845d6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:34:54 +00:00
Home Assistant Version Control 0c79667475 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:33:36 +00:00
Home Assistant Version Control d7658a083b .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:32:56 +00:00
Home Assistant Version Control 0984512886 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:32:50 +00:00
Home Assistant Version Control dd49acd3b5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:31:24 +00:00
Home Assistant Version Control 4be0526b27 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:25:28 +00:00
Home Assistant Version Control d375007ca7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:23:24 +00:00
Home Assistant Version Control 82978ed5d4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:22:35 +00:00
Home Assistant Version Control ccc09a05ab .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:22:00 +00:00
Home Assistant Version Control 0e1ecdedc0 3 files 2026-10-10 06:18:38 +00:00
Home Assistant Version Control 8f08bd7fae .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:17:31 +00:00
Home Assistant Version Control 33b50cb742 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:17:05 +00:00
Home Assistant Version Control 57fd6978ee .ha_mcp/logs/mcp_usage.jsonl 2026-10-10 06:15:29 +00:00
Home Assistant Version Control 07777999b0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 06:14:43 +00:00
Home Assistant Version Control 9338f84fcd .storage/lovelace.printer_stats 2026-10-10 06:10:25 +00:00
Home Assistant Version Control 2d6e4fc6a2 .storage/lovelace_resources 2026-10-10 06:07:12 +00:00
Home Assistant Version Control 0d84e8ec03 zigbee2mqtt/state.json 2026-10-10 06:06:57 +00:00
Home Assistant Version Control 932a461221 .ha_run.lock 2026-10-10 06:06:49 +00:00
Home Assistant Version Control ab3a1ac547 5 files 2026-10-10 06:05:47 +00:00
Home Assistant Version Control a48ea7372b zigbee2mqtt/state.json 2026-10-10 05:57:46 +00:00
Home Assistant Version Control 45c8260a41 .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-10 04:24:14 +00:00
Home Assistant Version Control 8185a9d7e2 .storage/lovelace.3d_printer_cellphone 2026-10-10 04:05:37 +00:00
Home Assistant Version Control 434bf9cb85 .storage/lovelace.3d_printer_cellphone 2026-10-10 04:03:35 +00:00
Home Assistant Version Control 4e617ec724 .storage/lovelace.3d_printer_cellphone 2026-10-10 04:03:19 +00:00
Home Assistant Version Control 6d5aaa0c7d .storage/lovelace.3d_printer_cellphone 2026-10-10 04:03:05 +00:00
Home Assistant Version Control c1b84ea111 .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-10 04:02:59 +00:00
Home Assistant Version Control b74af6a39e .storage/lovelace.3d_printer_cellphone 2026-10-10 03:59:45 +00:00
Home Assistant Version Control 5e1af4fd2d .storage/lovelace.3d_printer_cellphone 2026-10-10 03:58:33 +00:00
Home Assistant Version Control 8bddc7379c zigbee2mqtt/state.json 2026-10-10 03:57:41 +00:00
Home Assistant Version Control 2ad7eb5b6e zigbee2mqtt/state.json 2026-10-10 03:27:49 +00:00
Home Assistant Version Control d3d7698659 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 03:02:02 +00:00
Home Assistant Version Control 52b10b4c7a .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 03:01:47 +00:00
Home Assistant Version Control 523f274f71 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 02:51:53 +00:00
Home Assistant Version Control 81a2eb9d62 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-10 02:46:38 +00:00
Home Assistant Version Control 8840af8561 zigbee2mqtt/state.json 2026-10-10 02:29:16 +00:00
Home Assistant Version Control 362dd1fcca zigbee2mqtt/state.json 2026-10-10 01:57:40 +00:00
Home Assistant Version Control 7197dfe348 zigbee2mqtt/state.json 2026-10-10 01:42:21 +00:00
Home Assistant Version Control 7d9b8eeb68 4 files 2026-10-10 00:13:34 +00:00
Home Assistant Version Control 374cb40aed zigbee2mqtt/state.json 2026-10-10 00:11:25 +00:00
Home Assistant Version Control e33fd39db5 zigbee2mqtt/state.json 2026-10-09 23:57:38 +00:00
Home Assistant Version Control 28700c448d .storage/lovelace.3d_printer_cellphone 2026-10-09 23:49:44 +00:00
Home Assistant Version Control 4a31b4d119 .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-09 23:49:19 +00:00
Home Assistant Version Control 0e4dca107d automations.yaml 2026-10-09 23:41:02 +00:00
Home Assistant Version Control 1504a9c5e8 automations.yaml 2026-10-09 23:39:43 +00:00
Home Assistant Version Control 75b83840ce automations.yaml 2026-10-09 23:37:57 +00:00
Home Assistant Version Control ba6a3f7e34 automations.yaml, zigbee2mqtt/state.json 2026-10-09 23:37:11 +00:00
Home Assistant Version Control 7fcf2df2f4 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:32:55 +00:00
Home Assistant Version Control 025580f22c .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-09 23:32:35 +00:00
Home Assistant Version Control 190acad612 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:31:23 +00:00
Home Assistant Version Control ff5b30536c .storage/lovelace.3d_printer_cellphone 2026-10-09 23:31:19 +00:00
Home Assistant Version Control cc507a6d98 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:31:11 +00:00
Home Assistant Version Control c34586db4a .storage/lovelace.3d_printer_cellphone 2026-10-09 23:30:59 +00:00
Home Assistant Version Control 1b3240464e .storage/lovelace.3d_printer_cellphone 2026-10-09 23:30:27 +00:00
Home Assistant Version Control c58475e02d .storage/lovelace.3d_printer_cellphone 2026-10-09 23:30:11 +00:00
Home Assistant Version Control 627357f2e0 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:27:27 +00:00
Home Assistant Version Control e0307a9bd9 .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-09 23:27:05 +00:00
Home Assistant Version Control 272ead9af3 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:26:05 +00:00
Home Assistant Version Control aa6e9f845b .storage/lovelace.3d_printer_cellphone 2026-10-09 23:25:33 +00:00
Home Assistant Version Control 9f60c89e77 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:25:15 +00:00
Home Assistant Version Control df7c5787d9 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 23:22:50 +00:00
Home Assistant Version Control 04de91c450 zigbee2mqtt/state.json 2026-10-09 23:18:54 +00:00
Home Assistant Version Control 9d9404c854 zigbee2mqtt/state.json 2026-10-09 23:14:28 +00:00
Home Assistant Version Control 6f73c378f1 zigbee2mqtt/state.json 2026-10-09 23:10:28 +00:00
Home Assistant Version Control 6d07a1139d .storage/lovelace.3d_printer_cellphone 2026-10-09 23:02:21 +00:00
Home Assistant Version Control 413d785c51 .storage/lovelace.3d_printer_cellphone 2026-10-09 23:02:07 +00:00
Home Assistant Version Control bd5f074375 .storage/lovelace_dashboards, zigbee2mqtt/state.json 2026-10-09 23:01:57 +00:00
Home Assistant Version Control 8c71d45fb1 .storage/lovelace.3d_printer_cellphone, zigbee2mqtt/state.json 2026-10-09 23:01:44 +00:00
Home Assistant Version Control 18dc662edf .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:50:35 +00:00
Home Assistant Version Control 026fb05e3f .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:50:19 +00:00
Home Assistant Version Control b645c669a5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 22:48:15 +00:00
Home Assistant Version Control 20fc6b6c6c .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:46:44 +00:00
Home Assistant Version Control 586e4435bf .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:46:09 +00:00
Home Assistant Version Control 20ba640df7 .storage/lovelace.sparkx_i7 2026-10-09 22:43:02 +00:00
Home Assistant Version Control 938ee9578f .storage/lovelace.sparkx_i7 2026-10-09 22:42:44 +00:00
Home Assistant Version Control 82506bafa8 .storage/lovelace.sparkx_i7 2026-10-09 22:42:38 +00:00
Home Assistant Version Control 5919515f16 .storage/lovelace.sparkx_i7 2026-10-09 22:42:28 +00:00
Home Assistant Version Control f06ab59c37 zigbee2mqtt/state.json 2026-10-09 22:41:54 +00:00
Home Assistant Version Control 9329aaeb9a .storage/lovelace.sparkx_i7 2026-10-09 22:41:50 +00:00
Home Assistant Version Control 32b672aec1 .storage/lovelace.sparkx_i7 2026-10-09 22:41:24 +00:00
Home Assistant Version Control 1f5d02c600 .storage/lovelace.sparkx_i7 2026-10-09 22:40:56 +00:00
Home Assistant Version Control 1a827a617b .storage/lovelace.sparkx_i7 2026-10-09 22:40:38 +00:00
Home Assistant Version Control 8d821ebf18 3 files 2026-10-09 22:37:12 +00:00
Home Assistant Version Control eae118dc2a .storage/lovelace.sparkx_i7 2026-10-09 22:36:00 +00:00
Home Assistant Version Control e73518564c .storage/lovelace.sparkx_i7 2026-10-09 22:35:00 +00:00
Home Assistant Version Control 37b85a4603 .storage/lovelace.sparkx_i7 2026-10-09 22:33:54 +00:00
Home Assistant Version Control 0ccc4317bf .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 22:32:22 +00:00
Home Assistant Version Control 42ffea1c09 zigbee2mqtt/state.json 2026-10-09 22:31:12 +00:00
Home Assistant Version Control f709a42bae .storage/lovelace.sparkx_i7 2026-10-09 22:26:10 +00:00
Home Assistant Version Control 54c2d7111d .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 22:24:15 +00:00
Home Assistant Version Control ae74b5d002 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:17:41 +00:00
Home Assistant Version Control 187b4e5e88 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:17:31 +00:00
Home Assistant Version Control 64f2701444 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:17:15 +00:00
Home Assistant Version Control fd229a9454 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 22:17:01 +00:00
Home Assistant Version Control 7eb1d93ea5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:16:49 +00:00
Home Assistant Version Control 7a309ed337 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:16:37 +00:00
Home Assistant Version Control e5c12c2d22 .ha_mcp/backups/dashboard.sparkx-i7.20261009_221529.yaml, .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:15:35 +00:00
Home Assistant Version Control 877fd0bd66 .storage/lovelace.sparkx_i7 2026-10-09 22:14:19 +00:00
Home Assistant Version Control e2f2071b14 3 files 2026-10-09 22:14:01 +00:00
Home Assistant Version Control 33bdd927d8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:13:25 +00:00
Home Assistant Version Control 8b87a0de16 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 22:12:37 +00:00
Home Assistant Version Control e1c76d3a14 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:09:34 +00:00
Home Assistant Version Control c9864d20ee .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:08:56 +00:00
Home Assistant Version Control fe266f0ba1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:08:28 +00:00
Home Assistant Version Control 68a3e7e42d .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:08:05 +00:00
Home Assistant Version Control 7779a6c251 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:07:07 +00:00
Home Assistant Version Control 728a85a872 zigbee2mqtt/state.json 2026-10-09 22:06:55 +00:00
Home Assistant Version Control 8f0d676f04 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:06:51 +00:00
Home Assistant Version Control 56d444f581 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:06:48 +00:00
Home Assistant Version Control 739cb714e4 4 files 2026-10-09 22:06:39 +00:00
Home Assistant Version Control 404942debb .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:04:54 +00:00
Home Assistant Version Control a75bc4b7ab 3 files 2026-10-09 22:04:27 +00:00
Home Assistant Version Control cecef2da65 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:04:15 +00:00
Home Assistant Version Control 332d20ea65 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 22:03:38 +00:00
Home Assistant Version Control 9290d0dbc4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 22:00:32 +00:00
Home Assistant Version Control bb74eb9582 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 21:59:58 +00:00
Home Assistant Version Control 5fbfcf7509 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 21:59:50 +00:00
Home Assistant Version Control d7cde30b39 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 21:58:34 +00:00
Home Assistant Version Control bfe6ae3a08 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 21:57:30 +00:00
Home Assistant Version Control b0c325ac97 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 21:56:36 +00:00
Home Assistant Version Control d59ac02761 zigbee2mqtt/state.json 2026-10-09 21:23:09 +00:00
Home Assistant Version Control f61b2b5e38 zigbee2mqtt/state.json 2026-10-09 20:30:17 +00:00
Home Assistant Version Control 3f7c6a3aa1 zigbee2mqtt/state.json 2026-10-09 19:57:33 +00:00
Home Assistant Version Control 319962bdff zigbee2mqtt/state.json 2026-10-09 19:49:31 +00:00
Home Assistant Version Control a20d749512 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 18:48:57 +00:00
Home Assistant Version Control 2fa099f1ef 5 files 2026-10-09 18:48:56 +00:00
Home Assistant Version Control a986fba532 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 18:42:24 +00:00
Home Assistant Version Control fa4ffc2ee5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 18:42:07 +00:00
Home Assistant Version Control 155b69909d .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 18:41:48 +00:00
Home Assistant Version Control 57501f146c .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 18:41:30 +00:00
Home Assistant Version Control 11caccf477 zigbee2mqtt/state.json 2026-10-09 18:37:50 +00:00
Home Assistant Version Control 7ee4566c48 zigbee2mqtt/state.json 2026-10-09 18:29:58 +00:00
Home Assistant Version Control 58fd27c1c2 zigbee2mqtt/state.json 2026-10-09 17:57:31 +00:00
Home Assistant Version Control faad14b20f zigbee2mqtt/state.json 2026-10-09 15:57:32 +00:00
Home Assistant Version Control d6e3d15baa zigbee2mqtt/state.json 2026-10-09 13:57:31 +00:00
Home Assistant Version Control 4358ea9101 zigbee2mqtt/state.json 2026-10-09 12:14:49 +00:00
Home Assistant Version Control 1278c978fa zigbee2mqtt/state.json 2026-10-09 12:02:52 +00:00
Home Assistant Version Control 1e1b12d52b 187 files 2026-10-09 11:57:31 +00:00
Home Assistant Version Control 28fa34d78a zigbee2mqtt/state.json 2026-10-09 10:25:08 +00:00
Home Assistant Version Control 7b45821eb1 zigbee2mqtt/state.json 2026-10-09 08:25:05 +00:00
Home Assistant Version Control ad87718757 zigbee2mqtt/state.json 2026-10-09 06:25:06 +00:00
Home Assistant Version Control 98bc027907 zigbee2mqtt/state.json 2026-10-09 04:25:06 +00:00
Home Assistant Version Control 6c9f72977c zigbee2mqtt/state.json 2026-10-09 02:25:05 +00:00
Home Assistant Version Control ab2cf4c03f .storage/lovelace.sparkx_i7 2026-10-09 02:17:12 +00:00
Home Assistant Version Control 618d4edec0 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 02:17:00 +00:00
Home Assistant Version Control bbf4b8b805 .storage/lovelace.sparkx_i7 2026-10-09 02:16:36 +00:00
Home Assistant Version Control 7d27e6bd96 .storage/lovelace.sparkx_i7 2026-10-09 02:16:26 +00:00
Home Assistant Version Control 26e08f54a5 .storage/lovelace.sparkx_i7 2026-10-09 02:15:52 +00:00
Home Assistant Version Control 2c0001b0f4 .storage/lovelace.sparkx_i7 2026-10-09 02:15:48 +00:00
Home Assistant Version Control 0e1b1895bc .storage/lovelace.sparkx_i7 2026-10-09 02:15:40 +00:00
Home Assistant Version Control 923a43f71f .storage/lovelace.sparkx_i7 2026-10-09 02:15:10 +00:00
Home Assistant Version Control 63a1ebf419 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-09 02:14:52 +00:00
Home Assistant Version Control 011f031411 .storage/lovelace.sparkx_i7 2026-10-09 02:06:50 +00:00
Home Assistant Version Control 9893095eb4 .storage/lovelace.sparkx_i7 2026-10-09 02:06:18 +00:00
Home Assistant Version Control ce53869003 .storage/lovelace_resources 2026-10-09 02:05:37 +00:00
Home Assistant Version Control b5b5a5c0d5 www/community/Filament-Card/filament-card.js, zigbee2mqtt/state.json 2026-10-09 02:05:28 +00:00
Home Assistant Version Control 5876ba3970 zigbee2mqtt/state.json 2026-10-09 01:52:21 +00:00
Home Assistant Version Control 0be0c10d0a 3 files 2026-10-09 01:04:48 +00:00
Home Assistant Version Control fe8d0c5ece .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 01:03:14 +00:00
Home Assistant Version Control 984c8f3c22 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 01:02:50 +00:00
Home Assistant Version Control caec62c62a .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 01:00:10 +00:00
Home Assistant Version Control 9e00c6af57 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:58:36 +00:00
Home Assistant Version Control 1edba97e89 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:58:02 +00:00
Home Assistant Version Control 5a35bfc073 zigbee2mqtt/state.json 2026-10-09 00:53:08 +00:00
Home Assistant Version Control aa09b1a427 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:46:17 +00:00
Home Assistant Version Control 32f5873720 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:46:09 +00:00
Home Assistant Version Control c26e6966b8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:43:03 +00:00
Home Assistant Version Control 8234ead52c .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:42:39 +00:00
Home Assistant Version Control 6742284bd5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:42:25 +00:00
Home Assistant Version Control a64b9e4fe4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:41:15 +00:00
Home Assistant Version Control 194ba46214 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:39:56 +00:00
Home Assistant Version Control 0d2f753991 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:37:11 +00:00
Home Assistant Version Control 40fcf10725 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:34:56 +00:00
Home Assistant Version Control 008ffbcd5c .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:33:16 +00:00
Home Assistant Version Control 47f2505ac8 7 files 2026-10-09 00:32:55 +00:00
Home Assistant Version Control 61558e3763 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:31:16 +00:00
Home Assistant Version Control af21511612 3 files 2026-10-09 00:29:32 +00:00
Home Assistant Version Control 40231507e8 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:28:38 +00:00
Home Assistant Version Control f0bed0771c 3 files 2026-10-09 00:26:24 +00:00
Home Assistant Version Control 34bcb98b08 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:25:38 +00:00
Home Assistant Version Control 4b5b2a7c01 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:23:50 +00:00
Home Assistant Version Control 5b850df496 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:23:36 +00:00
Home Assistant Version Control 840392e304 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:22:56 +00:00
Home Assistant Version Control 824e8dfc53 6 files 2026-10-09 00:22:48 +00:00
Home Assistant Version Control 3f81db79af .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:21:49 +00:00
Home Assistant Version Control b82a133046 4 files 2026-10-09 00:21:32 +00:00
Home Assistant Version Control 5ca8693679 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:20:42 +00:00
Home Assistant Version Control 7ba6780482 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:18:45 +00:00
Home Assistant Version Control 6326b58d43 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:09:45 +00:00
Home Assistant Version Control 8025622ee1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-09 00:03:59 +00:00
Home Assistant Version Control 19c29176b4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-09 00:03:33 +00:00
Home Assistant Version Control d41518c5ff zigbee2mqtt/state.json 2026-10-08 23:53:08 +00:00
Home Assistant Version Control 31642b63c2 zigbee2mqtt/state.json 2026-10-08 23:31:57 +00:00
Home Assistant Version Control 89e29352cf zigbee2mqtt/state.json 2026-10-08 23:11:30 +00:00
Home Assistant Version Control 334e08f276 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:49:46 +00:00
Home Assistant Version Control 0831f34873 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:47:38 +00:00
Home Assistant Version Control 4b28ae3439 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 22:47:30 +00:00
Home Assistant Version Control 4a96821fdd .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:46:06 +00:00
Home Assistant Version Control c9fabfda17 3 files 2026-10-08 22:44:31 +00:00
Home Assistant Version Control f02488d07b .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:44:08 +00:00
Home Assistant Version Control 66ca8c6700 3 files 2026-10-08 22:43:58 +00:00
Home Assistant Version Control 9508af5283 .storage/lovelace.sparkx_i7 2026-10-08 22:43:52 +00:00
Home Assistant Version Control 3fa383e917 .ha_mcp/backups/dashboard.sparkx-i7.20261008_224327.yaml, .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:43:34 +00:00
Home Assistant Version Control 52462a2e80 .storage/lovelace.sparkx_i7 2026-10-08 22:43:26 +00:00
Home Assistant Version Control af36e0ae2d .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-08 22:42:50 +00:00
Home Assistant Version Control ae315f974e zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-08 22:37:16 +00:00
Home Assistant Version Control 0b2a7ebcb0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:35:47 +00:00
Home Assistant Version Control d93ca72c9c .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:35:04 +00:00
Home Assistant Version Control a7c00fd875 zigbee2mqtt/state.json 2026-10-08 22:32:59 +00:00
Home Assistant Version Control 49f1477211 .ha_mcp/backups/dashboard.sparkx-i7.20261008_223010.yaml, .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:30:18 +00:00
Home Assistant Version Control 83a667fe4e .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 22:28:17 +00:00
Home Assistant Version Control 4f9c9cc7fb .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:26:33 +00:00
Home Assistant Version Control b93af7a132 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:24:57 +00:00
Home Assistant Version Control 6d857b8eac .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:23:15 +00:00
Home Assistant Version Control e8a673976f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 22:22:17 +00:00
Home Assistant Version Control 351283845d .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:21:43 +00:00
Home Assistant Version Control 542ce39c7e .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:21:29 +00:00
Home Assistant Version Control 25b089d7c5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:20:09 +00:00
Home Assistant Version Control e6d91f0e3c 3 files 2026-10-08 22:19:33 +00:00
Home Assistant Version Control a2c6a9a479 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:17:31 +00:00
Home Assistant Version Control 02441d4b0a .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:17:22 +00:00
Home Assistant Version Control 45a3fb96e4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:17:15 +00:00
Home Assistant Version Control f6401a7dd8 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 22:16:58 +00:00
Home Assistant Version Control 24c7f259c0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:12:56 +00:00
Home Assistant Version Control 85bea604ac .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 22:12:50 +00:00
Home Assistant Version Control 90b1da1ded .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:09:24 +00:00
Home Assistant Version Control 0b10e7bd41 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:08:44 +00:00
Home Assistant Version Control b84317e6ad .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 22:06:58 +00:00
Home Assistant Version Control 4568aa4bc9 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 22:06:54 +00:00
Home Assistant Version Control 132be24e62 zigbee2mqtt/state.json 2026-10-08 20:25:00 +00:00
Home Assistant Version Control 9286385384 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 19:01:47 +00:00
Home Assistant Version Control 099892746b .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 19:01:27 +00:00
Home Assistant Version Control b2a223c8a7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:59:31 +00:00
Home Assistant Version Control c748fd1ce6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:59:19 +00:00
Home Assistant Version Control 9d1b42d0b4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:55:29 +00:00
Home Assistant Version Control f81acb1cad .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:54:32 +00:00
Home Assistant Version Control 1f01fac51f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:54:03 +00:00
Home Assistant Version Control 4927db4775 3 files 2026-10-08 18:51:19 +00:00
Home Assistant Version Control 8c1e03e3b2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:50:38 +00:00
Home Assistant Version Control b59fb9b833 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:50:22 +00:00
Home Assistant Version Control df8e2c9fbf .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:48:02 +00:00
Home Assistant Version Control 62ac0b44d7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:47:38 +00:00
Home Assistant Version Control 2bc8c2cfc6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:46:17 +00:00
Home Assistant Version Control a57daf490f 3 files 2026-10-08 18:46:13 +00:00
Home Assistant Version Control 7a51cfda90 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:44:02 +00:00
Home Assistant Version Control 864d218d93 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:40:58 +00:00
Home Assistant Version Control b12ae0c3ca .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:37:33 +00:00
Home Assistant Version Control 39811f09bd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:37:04 +00:00
Home Assistant Version Control 9328b7e53f .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:35:10 +00:00
Home Assistant Version Control 1ad50fd5fe 4 files 2026-10-08 18:35:02 +00:00
Home Assistant Version Control 9abe9051eb .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:31:37 +00:00
Home Assistant Version Control 383f4a5d1c .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:30:27 +00:00
Home Assistant Version Control 8a40fdbb82 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:28:59 +00:00
Home Assistant Version Control a2fcc7cea2 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:23:45 +00:00
Home Assistant Version Control 33f5271936 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:11:24 +00:00
Home Assistant Version Control f1275cb9df .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:09:42 +00:00
Home Assistant Version Control 695e36d0b0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:07:48 +00:00
Home Assistant Version Control 44853fa9d6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:06:40 +00:00
Home Assistant Version Control 0c05c4fb0d .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 18:04:57 +00:00
Home Assistant Version Control 3150c88c41 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 18:04:10 +00:00
Home Assistant Version Control 286450793a .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:59:04 +00:00
Home Assistant Version Control 2cfd769372 4 files 2026-10-08 17:58:54 +00:00
Home Assistant Version Control fbbb4e5e1d .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:56:23 +00:00
Home Assistant Version Control 57950cba9c 4 files 2026-10-08 17:53:01 +00:00
Home Assistant Version Control 3735908183 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:50:55 +00:00
Home Assistant Version Control 0161cf3354 3 files 2026-10-08 17:50:35 +00:00
Home Assistant Version Control 15213159f2 .ha_mcp/backups/automation.automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete.20261008_174935.yaml, .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:49:41 +00:00
Home Assistant Version Control fe0580a072 3 files 2026-10-08 17:48:05 +00:00
Home Assistant Version Control 07ccc37338 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:46:05 +00:00
Home Assistant Version Control 1b7ae00ddb 3 files 2026-10-08 17:45:13 +00:00
Home Assistant Version Control 62c37588ba .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:44:13 +00:00
Home Assistant Version Control 36a475c7e2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:40:02 +00:00
Home Assistant Version Control 90b8f5c6aa .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:39:50 +00:00
Home Assistant Version Control c9127907c8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:39:42 +00:00
Home Assistant Version Control 30d9ca1ead .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:38:50 +00:00
Home Assistant Version Control f2ab664f8c .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:32:52 +00:00
Home Assistant Version Control 39e841f3a0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:30:24 +00:00
Home Assistant Version Control d3ef59dc03 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:30:12 +00:00
Home Assistant Version Control da28f7d1f1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:28:04 +00:00
Home Assistant Version Control 195db5fda0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:27:33 +00:00
Home Assistant Version Control 716a6db425 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:27:22 +00:00
Home Assistant Version Control 9bd42fa6da .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:27:12 +00:00
Home Assistant Version Control a0517d26b0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:24:31 +00:00
Home Assistant Version Control c7e2f918f7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:22:47 +00:00
Home Assistant Version Control d8162c9902 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:21:31 +00:00
Home Assistant Version Control fc8df2232d 3 files 2026-10-08 17:12:21 +00:00
Home Assistant Version Control a8d590eefb .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:08:01 +00:00
Home Assistant Version Control dcf5d496b7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:07:50 +00:00
Home Assistant Version Control 6b006080ff .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:02:48 +00:00
Home Assistant Version Control de5683cf33 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 17:00:56 +00:00
Home Assistant Version Control 09228d7e91 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 17:00:38 +00:00
Home Assistant Version Control caa8078e75 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:55:12 +00:00
Home Assistant Version Control 2012e5545e .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:54:06 +00:00
Home Assistant Version Control 915b3e0e2d .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:53:35 +00:00
Home Assistant Version Control 0c17f1e798 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 16:52:20 +00:00
Home Assistant Version Control c6f0491cec .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:51:27 +00:00
Home Assistant Version Control 518ecdcdb8 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:50:53 +00:00
Home Assistant Version Control 873882876f .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:50:02 +00:00
Home Assistant Version Control 291f0ee7bc 3 files 2026-10-08 16:48:12 +00:00
Home Assistant Version Control 1cf6531c96 3 files 2026-10-08 16:47:51 +00:00
Home Assistant Version Control bdf036ebc9 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:44:39 +00:00
Home Assistant Version Control a9d4d2c0e1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:43:03 +00:00
Home Assistant Version Control 744dda5cb1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:42:57 +00:00
Home Assistant Version Control df5f1e0946 3 files 2026-10-08 16:42:21 +00:00
Home Assistant Version Control eb5543055a .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:38:40 +00:00
Home Assistant Version Control b5cfec6042 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 16:38:33 +00:00
Home Assistant Version Control 295defab8f .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:34:57 +00:00
Home Assistant Version Control 9ac102f616 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-10-08 16:34:53 +00:00
Home Assistant Version Control 0c886ae0d3 3 files 2026-10-08 16:34:46 +00:00
Home Assistant Version Control 818daf9788 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:34:41 +00:00
Home Assistant Version Control 8801f64e10 3 files 2026-10-08 16:34:38 +00:00
Home Assistant Version Control 2f6d84e32c 3 files 2026-10-08 16:34:05 +00:00
Home Assistant Version Control 32f05e404b .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:31:36 +00:00
Home Assistant Version Control 62dcac88b2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:31:30 +00:00
Home Assistant Version Control c8f5ba2669 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 16:30:54 +00:00
Home Assistant Version Control 4b8d1d372a .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:25:52 +00:00
Home Assistant Version Control 238047e712 zigbee2mqtt/state.json 2026-10-08 16:24:56 +00:00
Home Assistant Version Control 4f80d5c5c3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:21:46 +00:00
Home Assistant Version Control b7714b9ef9 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:21:14 +00:00
Home Assistant Version Control 76512a1e14 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:19:42 +00:00
Home Assistant Version Control 28685cf17c .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:19:21 +00:00
Home Assistant Version Control 2e398ab671 .storage/lovelace_resources 2026-10-08 16:18:25 +00:00
Home Assistant Version Control 4cdc02c5d0 .ha_run.lock 2026-10-08 16:17:57 +00:00
Home Assistant Version Control 3a51dadce2 6 files 2026-10-08 16:17:25 +00:00
Home Assistant Version Control 7afcd1f691 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:16:12 +00:00
Home Assistant Version Control de2087ac4e .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 16:12:25 +00:00
Home Assistant Version Control f209e87c74 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:11:29 +00:00
Home Assistant Version Control f1b333cfec .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 16:10:31 +00:00
Home Assistant Version Control 61e4f1f104 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:05:07 +00:00
Home Assistant Version Control a6af02a5d1 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 16:02:38 +00:00
Home Assistant Version Control 76ac38b7c3 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:01:19 +00:00
Home Assistant Version Control 61b17e9777 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:00:52 +00:00
Home Assistant Version Control 1d82a41c8e .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:00:44 +00:00
Home Assistant Version Control a9bce441a9 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 16:00:30 +00:00
Home Assistant Version Control 5d9961768e zigbee2mqtt/state.json 2026-10-08 15:57:35 +00:00
Home Assistant Version Control ffc1a64469 zigbee2mqtt/state.json 2026-10-08 14:50:48 +00:00
Home Assistant Version Control 6abfe946ed zigbee2mqtt/state.json 2026-10-08 14:20:16 +00:00
Home Assistant Version Control 12fd034c2a zigbee2mqtt/state.json 2026-10-08 13:37:11 +00:00
Home Assistant Version Control b4ccfed4e0 .storage/lovelace_resources 2026-10-08 13:33:55 +00:00
Home Assistant Version Control a4d25dc364 5 files 2026-10-08 13:33:42 +00:00
Home Assistant Version Control f70a3c8f69 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:58:35 +00:00
Home Assistant Version Control 8e011c7bfa .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:58:18 +00:00
Home Assistant Version Control c640c877bc .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:55:41 +00:00
Home Assistant Version Control c0d57d3880 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:55:33 +00:00
Home Assistant Version Control c8706b2e99 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:55:18 +00:00
Home Assistant Version Control 09077329b2 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:53:43 +00:00
Home Assistant Version Control 08d12f9ccc .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:53:35 +00:00
Home Assistant Version Control 659aa30884 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:52:47 +00:00
Home Assistant Version Control f5aadad031 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:52:19 +00:00
Home Assistant Version Control aabc473d7e .cache/brands/integrations/nest/logo.png 2026-10-08 12:51:13 +00:00
Home Assistant Version Control 2e2b3a8b22 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:47:57 +00:00
Home Assistant Version Control 5fe331e5b7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:46:15 +00:00
Home Assistant Version Control 6fb3b766bf .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:44:55 +00:00
Home Assistant Version Control cebbf04c1f .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:44:45 +00:00
Home Assistant Version Control 485e580629 .storage/lovelace_resources 2026-10-08 12:44:13 +00:00
Home Assistant Version Control ce3617fae5 .ha_run.lock 2026-10-08 12:43:53 +00:00
Home Assistant Version Control c38cac84e8 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:43:16 +00:00
Home Assistant Version Control bb266098d7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:37:42 +00:00
Home Assistant Version Control 295a508324 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:33:12 +00:00
Home Assistant Version Control 9e2b2a031f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:33:02 +00:00
Home Assistant Version Control 122baca20f .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:19:29 +00:00
Home Assistant Version Control 8866a9f0dc .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:18:35 +00:00
Home Assistant Version Control 16dc1b63ca .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:17:51 +00:00
Home Assistant Version Control c429dba32e .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:16:39 +00:00
Home Assistant Version Control 57b0d48305 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:16:17 +00:00
Home Assistant Version Control 5a3fc5d472 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:14:03 +00:00
Home Assistant Version Control 9564b896fd .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:13:43 +00:00
Home Assistant Version Control 5d1771f493 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 12:12:55 +00:00
Home Assistant Version Control d0b4775b27 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:11:29 +00:00
Home Assistant Version Control dfcdc592b1 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:11:17 +00:00
Home Assistant Version Control f9b19e9003 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:11:05 +00:00
Home Assistant Version Control 0eb2f31c8a .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:10:57 +00:00
Home Assistant Version Control 6464c93704 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:10:25 +00:00
Home Assistant Version Control 7f03a5012e .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 12:10:11 +00:00
Home Assistant Version Control 67a2cb1307 zigbee2mqtt/state.json 2026-10-08 12:07:16 +00:00
Home Assistant Version Control ac5380467e .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-08 11:53:58 +00:00
Home Assistant Version Control dcbe530d59 zigbee2mqtt/state.json 2026-10-08 11:31:21 +00:00
Home Assistant Version Control 6a08537ac2 zigbee2mqtt/state.json 2026-10-08 11:15:07 +00:00
Home Assistant Version Control 27a0764f0e zigbee2mqtt/state.json 2026-10-08 09:53:57 +00:00
Home Assistant Version Control cee8d8f6d8 zigbee2mqtt/state.json 2026-10-08 07:53:55 +00:00
Home Assistant Version Control 1ada38a594 zigbee2mqtt/state.json 2026-10-08 05:53:54 +00:00
Home Assistant Version Control e114e4b525 zigbee2mqtt/state.json 2026-10-08 03:53:54 +00:00
Home Assistant Version Control 7133070a30 zigbee2mqtt/state.json 2026-10-08 01:53:53 +00:00
Home Assistant Version Control f981bce007 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:51:11 +00:00
Home Assistant Version Control ceb97595fc .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:50:57 +00:00
Home Assistant Version Control 9983d6dd8e .storage/lovelace_resources 2026-10-08 01:49:59 +00:00
Home Assistant Version Control d0cecb8fe3 .ha_run.lock 2026-10-08 01:49:39 +00:00
Home Assistant Version Control c33cc19bdf .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:49:09 +00:00
Home Assistant Version Control 47b902aef5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 01:47:23 +00:00
Home Assistant Version Control 5eec6301d4 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:46:43 +00:00
Home Assistant Version Control c6c9062c53 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:46:37 +00:00
Home Assistant Version Control 5df7eef24f .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:43:05 +00:00
Home Assistant Version Control 18727f8fee .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:42:26 +00:00
Home Assistant Version Control 1ba85ad5dd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 01:42:17 +00:00
Home Assistant Version Control 1f8d6f6f64 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:38:52 +00:00
Home Assistant Version Control 35016ade92 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:38:34 +00:00
Home Assistant Version Control d1ba471686 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:37:22 +00:00
Home Assistant Version Control b36dd9f8d6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-08 01:36:54 +00:00
Home Assistant Version Control cd24912160 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:36:22 +00:00
Home Assistant Version Control 479442c6de .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:35:36 +00:00
Home Assistant Version Control d6b004be46 .ha_mcp/logs/mcp_usage.jsonl 2026-10-08 01:35:28 +00:00
Home Assistant Version Control 2a5902b832 custom_components/nest_snapshot/manifest.json, custom_components/nest_snapshot/services.yaml 2026-10-08 01:35:06 +00:00
Home Assistant Version Control 4fef312b4b automations.yaml, configuration.yaml 2026-10-08 01:34:00 +00:00
Home Assistant Version Control 5dbf459f4e zigbee2mqtt/state.json 2026-10-08 01:32:14 +00:00
Home Assistant Version Control c64bcdfee6 .storage/lovelace_resources 2026-10-08 01:28:08 +00:00
Home Assistant Version Control 5cc3ec8973 .ha_run.lock 2026-10-08 01:27:44 +00:00
Home Assistant Version Control fd89e7c9a7 zigbee2mqtt/state.json 2026-10-08 01:27:20 +00:00
Home Assistant Version Control 8f343c84df zigbee2mqtt/state.json 2026-10-08 00:37:59 +00:00
Home Assistant Version Control 24772d5769 zigbee2mqtt/state.json 2026-10-08 00:29:35 +00:00
Home Assistant Version Control 892b51befb zigbee2mqtt/state.json 2026-10-07 23:31:49 +00:00
Home Assistant Version Control 399921675d zigbee2mqtt/state.json 2026-10-07 23:18:34 +00:00
Home Assistant Version Control f8b562daa7 zigbee2mqtt/state.json 2026-10-07 23:04:20 +00:00
Home Assistant Version Control 6cb4ef6bac zigbee2mqtt/state.json 2026-10-07 22:51:01 +00:00
Home Assistant Version Control a7a25a30b7 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-07 22:37:16 +00:00
Home Assistant Version Control 54860a2341 zigbee2mqtt/state.json 2026-10-07 20:37:57 +00:00
Home Assistant Version Control ce7935b9d1 zigbee2mqtt/state.json 2026-10-07 18:50:44 +00:00
Home Assistant Version Control a680298928 zigbee2mqtt/state.json 2026-10-07 18:37:53 +00:00
Home Assistant Version Control a86eb81517 .storage/lovelace_resources 2026-10-07 18:33:45 +00:00
Home Assistant Version Control 7141ca89e0 .HA_VERSION, .ha_run.lock 2026-10-07 18:33:26 +00:00
Home Assistant Version Control b5031aecb5 zigbee2mqtt/state.json 2026-10-07 18:32:55 +00:00
Home Assistant Version Control 4e358fac7c zigbee2mqtt/state.json 2026-10-07 17:41:05 +00:00
Home Assistant Version Control c457ac8b20 zigbee2mqtt/state.json 2026-10-07 17:35:26 +00:00
Home Assistant Version Control bb8d0c9ba7 zigbee2mqtt/state.json 2026-10-07 15:54:42 +00:00
Home Assistant Version Control b9b5a7de94 zigbee2mqtt/state.json 2026-10-07 15:40:39 +00:00
Home Assistant Version Control c6e870679e zigbee2mqtt/state.json 2026-10-07 15:32:14 +00:00
Home Assistant Version Control ff9545a420 .storage/lovelace_resources 2026-10-07 15:31:36 +00:00
Home Assistant Version Control f904ee405d .ha_run.lock 2026-10-07 15:31:14 +00:00
Home Assistant Version Control bf611c432d zigbee2mqtt/state.json 2026-10-07 15:30:48 +00:00
Home Assistant Version Control b309ededa6 zigbee2mqtt/state.json 2026-10-07 15:21:48 +00:00
Home Assistant Version Control 1c16b30e00 zigbee2mqtt/state.json 2026-10-07 15:14:14 +00:00
Home Assistant Version Control f51d8e43a9 zigbee2mqtt/state.json 2026-10-07 15:05:04 +00:00
Home Assistant Version Control b982750d92 zigbee2mqtt/state.json 2026-10-07 14:52:13 +00:00
Home Assistant Version Control 55849d83ab 3 files 2026-10-07 13:12:19 +00:00
Home Assistant Version Control 983811cb93 209 files 2026-10-07 13:11:05 +00:00
Home Assistant Version Control 4fef64cc2c .storage/lovelace_resources 2026-10-07 13:07:28 +00:00
Home Assistant Version Control 166018f11c zigbee2mqtt/state.json 2026-10-07 13:06:54 +00:00
Home Assistant Version Control bda1f7a289 zigbee2mqtt/state.json 2026-10-07 12:56:09 +00:00
Home Assistant Version Control b25bcec283 zigbee2mqtt/state.json 2026-10-07 11:15:09 +00:00
Home Assistant Version Control fd698745c0 zigbee2mqtt/state.json 2026-10-07 10:56:12 +00:00
Home Assistant Version Control fe28ca29af zigbee2mqtt/state.json 2026-10-07 08:56:09 +00:00
Home Assistant Version Control d85a23264e zigbee2mqtt/state.json 2026-10-07 06:56:07 +00:00
Home Assistant Version Control e606235dce zigbee2mqtt/state.json 2026-10-07 04:56:06 +00:00
Home Assistant Version Control e408e64f61 .storage/lovelace_resources 2026-10-07 02:52:10 +00:00
Home Assistant Version Control a408d38ee7 zigbee2mqtt/state.json 2026-10-07 02:52:00 +00:00
Home Assistant Version Control 660cfb8845 .ha_run.lock 2026-10-07 02:51:44 +00:00
Home Assistant Version Control c5c88a6a12 .storage/lovelace_resources 2026-10-07 02:50:58 +00:00
Home Assistant Version Control cfd0d40c8e 208 files 2026-10-07 02:49:21 +00:00
Home Assistant Version Control a7107ecbe1 zigbee2mqtt/state.json 2026-10-07 02:32:25 +00:00
Home Assistant Version Control 77302ace14 zigbee2mqtt/state.json 2026-10-07 02:19:22 +00:00
Home Assistant Version Control 5b8ffca675 zigbee2mqtt/state.json 2026-10-07 02:06:41 +00:00
Home Assistant Version Control fb9e0c5f3a zigbee2mqtt/state.json 2026-10-07 01:54:13 +00:00
Home Assistant Version Control 30f300cd76 zigbee2mqtt/state.json 2026-10-07 01:44:05 +00:00
Home Assistant Version Control 2b19960307 zigbee2mqtt/state.json 2026-10-07 01:17:30 +00:00
Home Assistant Version Control 7cb6c0f895 zigbee2mqtt/state.json 2026-10-06 23:17:31 +00:00
Home Assistant Version Control 86def0a388 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-06 22:37:17 +00:00
Home Assistant Version Control e6fde71c17 zigbee2mqtt/state.json 2026-10-06 22:35:43 +00:00
Home Assistant Version Control 3457f39465 zigbee2mqtt/state.json 2026-10-06 21:51:14 +00:00
Home Assistant Version Control 8f5c22eda6 zigbee2mqtt/state.json 2026-10-06 21:17:26 +00:00
Home Assistant Version Control bb98ae21f9 zigbee2mqtt/state.json 2026-10-06 20:57:15 +00:00
Home Assistant Version Control a7aa758fe8 zigbee2mqtt/state.json 2026-10-06 20:05:10 +00:00
Home Assistant Version Control 785b65ea36 zigbee2mqtt/state.json 2026-10-06 19:27:14 +00:00
Home Assistant Version Control 06557bcb3c zigbee2mqtt/state.json 2026-10-06 19:17:25 +00:00
Home Assistant Version Control 69ebf21d19 zigbee2mqtt/state.json 2026-10-06 18:22:02 +00:00
Home Assistant Version Control 42517ca71c zigbee2mqtt/state.json 2026-10-06 18:18:36 +00:00
Home Assistant Version Control d83a2696d3 zigbee2mqtt/state.json 2026-10-06 17:17:24 +00:00
Home Assistant Version Control ed8f8236db 138 files 2026-10-06 17:14:18 +00:00
Home Assistant Version Control bf886c9347 361 files 2026-10-06 17:11:43 +00:00
Home Assistant Version Control d2c5af43e3 zigbee2mqtt/state.json 2026-10-06 16:52:37 +00:00
Home Assistant Version Control 95437108a7 zigbee2mqtt/state.json 2026-10-06 16:38:10 +00:00
Home Assistant Version Control 065522bc84 zigbee2mqtt/state.json 2026-10-06 16:11:50 +00:00
Home Assistant Version Control 4d30d286c5 zigbee2mqtt/state.json 2026-10-06 16:11:49 +00:00
Home Assistant Version Control 9c42f196ce zigbee2mqtt/state.json 2026-10-06 15:45:19 +00:00
Home Assistant Version Control 7d277cafd7 zigbee2mqtt/state.json 2026-10-06 15:18:42 +00:00
Home Assistant Version Control f5d79d9c7e zigbee2mqtt/state.json 2026-10-06 14:57:54 +00:00
Home Assistant Version Control 3ed81f5376 zigbee2mqtt/state.json 2026-10-06 14:52:38 +00:00
Home Assistant Version Control ccd338bec1 zigbee2mqtt/state.json 2026-10-06 13:53:18 +00:00
Home Assistant Version Control d73c7859d7 zigbee2mqtt/state.json 2026-10-06 13:38:56 +00:00
Home Assistant Version Control 89d74646fe zigbee2mqtt/state.json 2026-10-06 13:23:15 +00:00
Home Assistant Version Control ee499018c6 zigbee2mqtt/state.json 2026-10-06 13:07:16 +00:00
Home Assistant Version Control e442a7db49 zigbee2mqtt/state.json 2026-10-06 12:52:32 +00:00
Home Assistant Version Control 7dbd4e8e5c zigbee2mqtt/state.json 2026-10-06 11:15:07 +00:00
Home Assistant Version Control 7d98aabcce zigbee2mqtt/state.json 2026-10-06 10:52:33 +00:00
Home Assistant Version Control aa2b4ed92f zigbee2mqtt/state.json 2026-10-06 08:52:32 +00:00
Home Assistant Version Control b7b7c580da zigbee2mqtt/state.json 2026-10-06 06:52:32 +00:00
Home Assistant Version Control d865896d50 zigbee2mqtt/state.json 2026-10-06 04:52:31 +00:00
Home Assistant Version Control 1d1649b81e zigbee2mqtt/state.json 2026-10-06 02:52:32 +00:00
Home Assistant Version Control a36360db9d zigbee2mqtt/state.json 2026-10-05 22:52:29 +00:00
Home Assistant Version Control b02e1e9284 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-05 22:37:17 +00:00
Home Assistant Version Control b66e90ae81 zigbee2mqtt/state.json 2026-10-05 20:52:28 +00:00
Home Assistant Version Control 24180469ab zigbee2mqtt/state.json 2026-10-05 18:52:27 +00:00
Home Assistant Version Control 8d9cefd3f4 zigbee2mqtt/state.json 2026-10-05 17:31:21 +00:00
Home Assistant Version Control 5251b6501b zigbee2mqtt/state.json 2026-10-05 17:20:26 +00:00
Home Assistant Version Control 87a3991eaf zigbee2mqtt/state.json 2026-10-05 17:08:41 +00:00
Home Assistant Version Control 1509b71e08 zigbee2mqtt/state.json 2026-10-05 16:56:57 +00:00
Home Assistant Version Control 21a0bba1fd zigbee2mqtt/state.json 2026-10-05 16:52:26 +00:00
Home Assistant Version Control 15d12c1570 zigbee2mqtt/state.json 2026-10-05 16:50:28 +00:00
Home Assistant Version Control f89bffe17b zigbee2mqtt/state.json 2026-10-05 14:52:25 +00:00
Home Assistant Version Control 5ce2e506d0 zigbee2mqtt/state.json 2026-10-05 12:52:25 +00:00
Home Assistant Version Control 3ec158e690 zigbee2mqtt/state.json 2026-10-05 11:15:06 +00:00
Home Assistant Version Control 47239275c7 zigbee2mqtt/state.json 2026-10-05 10:52:23 +00:00
Home Assistant Version Control 77216c3b2a zigbee2mqtt/state.json 2026-10-05 08:52:21 +00:00
Home Assistant Version Control 25f7542b75 zigbee2mqtt/state.json 2026-10-05 06:52:18 +00:00
Home Assistant Version Control 3703b99831 zigbee2mqtt/state.json 2026-10-05 04:52:18 +00:00
Home Assistant Version Control bbbe7d065a zigbee2mqtt/state.json 2026-10-05 04:28:37 +00:00
Home Assistant Version Control a7e3691497 zigbee2mqtt/state.json 2026-10-05 04:19:35 +00:00
Home Assistant Version Control 343792e01d zigbee2mqtt/state.json 2026-10-05 04:09:26 +00:00
Home Assistant Version Control e490499838 zigbee2mqtt/state.json 2026-10-05 03:58:47 +00:00
Home Assistant Version Control 2dfc45ac2a zigbee2mqtt/state.json 2026-10-05 03:51:25 +00:00
Home Assistant Version Control beecd35160 zigbee2mqtt/state.json 2026-10-05 02:52:15 +00:00
Home Assistant Version Control 6ca7900355 zigbee2mqtt/state.json 2026-10-05 00:52:16 +00:00
Home Assistant Version Control 96ac4f220c .ha_mcp/logs/mcp_usage.jsonl 2026-10-04 23:32:37 +00:00
Home Assistant Version Control 1f7fd161bb 3 files 2026-10-04 23:32:25 +00:00
Home Assistant Version Control 104e78148f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-04 23:31:49 +00:00
Home Assistant Version Control 0e60f2d3f0 .ha_mcp/logs/mcp_usage.jsonl 2026-10-04 23:31:37 +00:00
Home Assistant Version Control 5357b85d56 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-04 23:31:31 +00:00
Home Assistant Version Control ddb19a9fc3 zigbee2mqtt/state.json 2026-10-04 22:52:15 +00:00
Home Assistant Version Control 0186f0ca44 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-04 22:37:16 +00:00
Home Assistant Version Control 7d53be930e zigbee2mqtt/state.json 2026-10-04 20:52:11 +00:00
Home Assistant Version Control 18048a8924 .storage/lovelace_resources 2026-10-04 20:49:27 +00:00
Home Assistant Version Control dc8f284e00 4 files 2026-10-04 20:48:28 +00:00
Home Assistant Version Control 0ff8c287a8 155 files 2026-10-04 20:46:32 +00:00
Home Assistant Version Control a212615470 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-04 19:14:28 +00:00
Home Assistant Version Control 76b1d51be2 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-04 17:14:28 +00:00
Home Assistant Version Control 71c5987d8f zigbee2mqtt/state.json 2026-10-04 15:14:27 +00:00
Home Assistant Version Control aa5831ab96 zigbee2mqtt/state.json 2026-10-04 13:14:25 +00:00
Home Assistant Version Control e87d8a6e51 .storage/lovelace_resources 2026-10-04 13:10:53 +00:00
Home Assistant Version Control da595a25b7 .ha_run.lock 2026-10-04 13:10:23 +00:00
Home Assistant Version Control c2e4f77237 zigbee2mqtt/state.json 2026-10-04 13:09:55 +00:00
Home Assistant Version Control 5679eeb3df zigbee2mqtt/state.json 2026-10-04 12:11:38 +00:00
Home Assistant Version Control 42a2768ab6 zigbee2mqtt/state.json 2026-10-04 10:11:38 +00:00
Home Assistant Version Control 7a8da049e7 zigbee2mqtt/state.json 2026-10-04 08:11:37 +00:00
Home Assistant Version Control 00abf0bb42 zigbee2mqtt/state.json 2026-10-04 06:11:35 +00:00
Home Assistant Version Control bba72187ba zigbee2mqtt/state.json 2026-10-04 05:47:14 +00:00
Home Assistant Version Control c4d601bfba 331 files 2026-10-04 05:26:42 +00:00
Home Assistant Version Control 22ba8b4648 zigbee2mqtt/state.json 2026-10-04 04:38:08 +00:00
Home Assistant Version Control 8d51c1f051 zigbee2mqtt/state.json 2026-10-04 04:11:34 +00:00
Home Assistant Version Control d1206a9976 zigbee2mqtt/state.json 2026-10-04 03:22:19 +00:00
Home Assistant Version Control e63e4a771c zigbee2mqtt/state.json 2026-10-04 02:09:05 +00:00
Home Assistant Version Control ec573b1600 zigbee2mqtt/state.json 2026-10-04 01:09:12 +00:00
Home Assistant Version Control 2d6579de5a zigbee2mqtt/state.json 2026-10-04 00:11:29 +00:00
Home Assistant Version Control 679a0b66a4 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-03 22:37:16 +00:00
Home Assistant Version Control f0b58a9575 zigbee2mqtt/state.json 2026-10-03 22:11:28 +00:00
Home Assistant Version Control d3a2a53445 zigbee2mqtt/state.json 2026-10-03 20:11:27 +00:00
Home Assistant Version Control f57acbd337 zigbee2mqtt/state.json 2026-10-03 18:11:28 +00:00
Home Assistant Version Control 4409839aaf zigbee2mqtt/state.json 2026-10-03 16:43:53 +00:00
Home Assistant Version Control 699c909790 zigbee2mqtt/state.json 2026-10-03 16:13:25 +00:00
Home Assistant Version Control 03468a1b1a zigbee2mqtt/state.json 2026-10-03 16:11:21 +00:00
Home Assistant Version Control 76b32d329b zigbee2mqtt/state.json 2026-10-03 15:41:06 +00:00
Home Assistant Version Control d7ee4e2bd2 zigbee2mqtt/state.json 2026-10-03 15:34:57 +00:00
Home Assistant Version Control 88dcb683d7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-03 15:18:08 +00:00
Home Assistant Version Control 273ad95b7f .ha_mcp/logs/mcp_usage.jsonl 2026-10-03 15:18:02 +00:00
Home Assistant Version Control 833cab61f7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-03 15:17:28 +00:00
Home Assistant Version Control 063b42da6f 3 files 2026-10-03 15:17:10 +00:00
Home Assistant Version Control 820b1d20b0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-03 15:16:52 +00:00
Home Assistant Version Control 0bb5fe6ac5 3 files 2026-10-03 15:16:28 +00:00
Home Assistant Version Control 82a1235a76 .ha_mcp/logs/mcp_usage.jsonl 2026-10-03 15:12:43 +00:00
Home Assistant Version Control 3f9d89be9f .ha_mcp/logs/mcp_usage.jsonl 2026-10-03 15:12:27 +00:00
Home Assistant Version Control f2bb085698 .ha_mcp/logs/mcp_usage.jsonl 2026-10-03 15:12:23 +00:00
Home Assistant Version Control b54c70bd21 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-03 15:12:06 +00:00
Home Assistant Version Control 44b80a640a zigbee2mqtt/state.json 2026-10-03 15:09:20 +00:00
Home Assistant Version Control 6cc304f8a3 zigbee2mqtt/state.json 2026-10-03 14:43:46 +00:00
Home Assistant Version Control 6fd972fc40 zigbee2mqtt/state.json 2026-10-03 14:11:12 +00:00
Home Assistant Version Control d994088cd4 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-03 12:11:13 +00:00
Home Assistant Version Control 4e28e5e247 zigbee2mqtt/state.json 2026-10-03 10:11:13 +00:00
Home Assistant Version Control 2bdbff7bb2 zigbee2mqtt/state.json 2026-10-03 08:11:14 +00:00
Home Assistant Version Control 5e1c07bf25 zigbee2mqtt/state.json 2026-10-03 07:19:51 +00:00
Home Assistant Version Control 3e07caa717 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-03 06:10:45 +00:00
Home Assistant Version Control a975c79f47 zigbee2mqtt/state.json 2026-10-03 04:54:08 +00:00
Home Assistant Version Control 99a3ad950b zigbee2mqtt/state.json 2026-10-03 04:11:05 +00:00
Home Assistant Version Control 774183ae02 zigbee2mqtt/state.json 2026-10-03 03:40:46 +00:00
Home Assistant Version Control b6eb345f21 zigbee2mqtt/state.json 2026-10-03 02:40:46 +00:00
Home Assistant Version Control 437af70353 zigbee2mqtt/state.json 2026-10-03 02:10:56 +00:00
Home Assistant Version Control 578198b0f1 zigbee2mqtt/state.json 2026-10-03 00:23:46 +00:00
Home Assistant Version Control ef53770ce2 zigbee2mqtt/state.json 2026-10-03 00:10:53 +00:00
Home Assistant Version Control 6f05b05575 zigbee2mqtt/state.json 2026-10-02 23:50:58 +00:00
Home Assistant Version Control b438f4e41f zigbee2mqtt/state.json 2026-10-02 23:16:30 +00:00
Home Assistant Version Control 94649f197f zigbee2mqtt/state.json 2026-10-02 22:42:01 +00:00
Home Assistant Version Control b934a6309e zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-02 22:37:16 +00:00
Home Assistant Version Control 62af012855 zigbee2mqtt/state.json 2026-10-02 22:14:17 +00:00
Home Assistant Version Control b0e651b7fa zigbee2mqtt/state.json 2026-10-02 22:10:42 +00:00
Home Assistant Version Control afe5ba628a .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:49:15 +00:00
Home Assistant Version Control a81ba72393 .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:49:07 +00:00
Home Assistant Version Control 29b1885380 .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:48:55 +00:00
Home Assistant Version Control 74706651f1 3 files 2026-10-02 20:48:45 +00:00
Home Assistant Version Control 32b8ea39cf .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:48:18 +00:00
Home Assistant Version Control 4c3887a742 .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:47:53 +00:00
Home Assistant Version Control 69f9552f24 zigbee2mqtt/state.json 2026-10-02 20:47:16 +00:00
Home Assistant Version Control 1c13d3687b .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:46:47 +00:00
Home Assistant Version Control a80cc2bfae .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-10-02 20:46:36 +00:00
Home Assistant Version Control b1fcf6a573 .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:46:27 +00:00
Home Assistant Version Control e8d3e40ac6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-02 20:44:23 +00:00
Home Assistant Version Control 2ef7a55211 .ha_mcp/logs/mcp_usage.jsonl 2026-10-02 20:41:19 +00:00
Home Assistant Version Control ebd3126a6f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-02 20:41:11 +00:00
Home Assistant Version Control c005a6da4f zigbee2mqtt/state.json 2026-10-02 20:24:28 +00:00
Home Assistant Version Control c510b6bdc0 zigbee2mqtt/state.json 2026-10-02 20:10:41 +00:00
Home Assistant Version Control 0e40392433 zigbee2mqtt/state.json 2026-10-02 19:47:01 +00:00
Home Assistant Version Control 25c16ead70 zigbee2mqtt/state.json 2026-10-02 19:07:06 +00:00
Home Assistant Version Control 68533c692c zigbee2mqtt/state.json 2026-10-02 18:27:24 +00:00
Home Assistant Version Control 9d2235497c zigbee2mqtt/state.json 2026-10-02 18:10:36 +00:00
Home Assistant Version Control 01d3c68e5f zigbee2mqtt/state.json 2026-10-02 17:57:48 +00:00
Home Assistant Version Control 1ac45c218f automations.yaml, zigbee2mqtt/state.json 2026-10-02 16:24:10 +00:00
Home Assistant Version Control a749e74604 .storage/lovelace_resources, zigbee2mqtt/state.json 2026-10-02 16:07:54 +00:00
Home Assistant Version Control c29f5cc088 257 files 2026-10-02 16:06:24 +00:00
Home Assistant Version Control 7c55603942 AGENTS.md, zigbee2mqtt/state.json 2026-10-02 16:02:35 +00:00
Home Assistant Version Control 46633e2f99 zigbee2mqtt/state.json 2026-10-02 15:59:30 +00:00
Home Assistant Version Control 71708072c1 zigbee2mqtt/state.json 2026-10-02 15:37:41 +00:00
Home Assistant Version Control 72e9540553 zigbee2mqtt/state.json 2026-10-02 15:23:07 +00:00
Home Assistant Version Control 242aa61e1b zigbee2mqtt/state.json 2026-10-02 15:05:06 +00:00
Home Assistant Version Control 9e57421b20 zigbee2mqtt/state.json 2026-10-02 14:51:05 +00:00
Home Assistant Version Control 703cf02eee zigbee2mqtt/state.json 2026-10-02 13:55:39 +00:00
Home Assistant Version Control d8a775b8c2 zigbee2mqtt/state.json 2026-10-02 13:42:31 +00:00
Home Assistant Version Control 1baf3a3ba9 zigbee2mqtt/state.json 2026-10-02 13:37:36 +00:00
Home Assistant Version Control 6ad9501dac zigbee2mqtt/state.json 2026-10-02 13:30:16 +00:00
Home Assistant Version Control 40e0fb7577 zigbee2mqtt/state.json 2026-10-02 13:16:45 +00:00
Home Assistant Version Control 3ecad75615 zigbee2mqtt/state.json 2026-10-02 13:06:39 +00:00
Home Assistant Version Control 9821ad2a30 zigbee2mqtt/state.json 2026-10-02 11:37:35 +00:00
Home Assistant Version Control 83a5090861 zigbee2mqtt/state.json 2026-10-02 11:15:08 +00:00
Home Assistant Version Control 04ec4311fc zigbee2mqtt/state.json 2026-10-02 09:37:33 +00:00
Home Assistant Version Control 91f18c6a26 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-10-02 07:37:32 +00:00
Home Assistant Version Control 87404c2d3e zigbee2mqtt/state.json 2026-10-02 05:37:31 +00:00
Home Assistant Version Control 2b33a2178d zigbee2mqtt/state.json 2026-10-02 03:37:31 +00:00
Home Assistant Version Control 1ef3189106 zigbee2mqtt/state.json 2026-10-02 01:37:30 +00:00
Home Assistant Version Control a7b182d3d2 zigbee2mqtt/state.json 2026-10-02 00:26:38 +00:00
Home Assistant Version Control 1df6dc8f1f zigbee2mqtt/state.json 2026-10-02 00:13:37 +00:00
Home Assistant Version Control 362ede054f zigbee2mqtt/state.json 2026-10-02 00:03:49 +00:00
Home Assistant Version Control 5870d5c7cd 3 files 2026-10-01 23:49:38 +00:00
Home Assistant Version Control 7cbb41166b .ha_mcp/logs/mcp_usage.jsonl 2026-10-01 23:49:20 +00:00
Home Assistant Version Control effa3c8119 .ha_mcp/logs/mcp_usage.jsonl 2026-10-01 23:47:32 +00:00
Home Assistant Version Control 94ac8965e6 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-10-01 23:47:09 +00:00
Home Assistant Version Control 33ac9b7d5d .ha_mcp/backups/automation.automation.3d_print_early_layers_snapshot.20261001_234705.yaml 2026-10-01 23:47:06 +00:00
Home Assistant Version Control 5c69d80700 zigbee2mqtt/state.json 2026-10-01 23:46:52 +00:00
Home Assistant Version Control 22c8592a51 .ha_mcp/logs/mcp_usage.jsonl 2026-10-01 23:46:02 +00:00
Home Assistant Version Control a5fcc6f058 zigbee2mqtt/state.json 2026-10-01 23:41:52 +00:00
Home Assistant Version Control 80da712ab5 zigbee2mqtt/state.json 2026-10-01 23:37:18 +00:00
Home Assistant Version Control c6ba70d855 zigbee2mqtt/state.json 2026-10-01 23:36:23 +00:00
Home Assistant Version Control 7cc500ddb9 zigbee2mqtt/state.json 2026-10-01 23:28:15 +00:00
Home Assistant Version Control 732704deb4 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-01 22:36:48 +00:00
Home Assistant Version Control 4bb538235c zigbee2mqtt/state.json 2026-10-01 21:37:26 +00:00
Home Assistant Version Control 82b243721f zigbee2mqtt/state.json 2026-10-01 19:37:25 +00:00
Home Assistant Version Control d15531532e zigbee2mqtt/state.json 2026-10-01 17:37:22 +00:00
Home Assistant Version Control c4d8ffe6e6 .ha_mcp/logs/mcp_usage.jsonl 2026-10-01 17:29:08 +00:00
Home Assistant Version Control adda1dc5f5 .ha_mcp/logs/mcp_usage.jsonl 2026-10-01 17:27:45 +00:00
Home Assistant Version Control 6fbe0060b7 .ha_mcp/logs/mcp_usage.jsonl 2026-10-01 17:27:25 +00:00
Home Assistant Version Control db2f34b409 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-01 17:26:33 +00:00
Home Assistant Version Control 7533ed7294 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-01 17:23:19 +00:00
Home Assistant Version Control cca9ab3a30 opencode.json, zigbee2mqtt/state.json 2026-10-01 17:14:50 +00:00
Home Assistant Version Control cc39c9d40a .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-10-01 16:13:59 +00:00
Home Assistant Version Control c4841ec483 opencode.json, zigbee2mqtt/state.json 2026-10-01 16:01:00 +00:00
Home Assistant Version Control e33690a44c opencode/decisions.yaml 2026-10-01 15:47:26 +00:00
Home Assistant Version Control ac99c5dc52 opencode/decisions.yaml 2026-10-01 15:47:07 +00:00
Home Assistant Version Control 0449f9b5ff automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:45:17 +00:00
Home Assistant Version Control f8b179d6ec automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:42:41 +00:00
Home Assistant Version Control 95913bb814 automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:36:19 +00:00
Home Assistant Version Control 58e2814545 automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:31:30 +00:00
Home Assistant Version Control 1cdea9d784 automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:26:48 +00:00
Home Assistant Version Control 26b68e02bf automations.yaml 2026-10-01 15:23:12 +00:00
Home Assistant Version Control 3b54a69653 automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:21:30 +00:00
Home Assistant Version Control 86ba055b6a automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:19:20 +00:00
Home Assistant Version Control 4dee0a645f automations.yaml, zigbee2mqtt/state.json 2026-10-01 15:10:33 +00:00
Home Assistant Version Control 8961659a01 .storage/lovelace.sparkx_i7 2026-10-01 13:44:44 +00:00
Home Assistant Version Control 7b0c627630 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-01 13:44:24 +00:00
Home Assistant Version Control 4bfcee1bee zigbee2mqtt/state.json 2026-10-01 13:37:06 +00:00
Home Assistant Version Control f6995bd72f zigbee2mqtt/state.json 2026-10-01 13:27:27 +00:00
Home Assistant Version Control 884afa36c0 zigbee2mqtt/state.json 2026-10-01 11:37:06 +00:00
Home Assistant Version Control dbc8c56a13 zigbee2mqtt/state.json 2026-10-01 11:15:07 +00:00
Home Assistant Version Control e50bb9097f zigbee2mqtt/state.json 2026-10-01 09:37:05 +00:00
Home Assistant Version Control 864c21c49b zigbee2mqtt/state.json 2026-10-01 07:37:05 +00:00
Home Assistant Version Control 5d6d845ebf 456 files 2026-10-01 05:38:21 +00:00
Home Assistant Version Control 4192ecbaae automations.yaml, zigbee2mqtt/state.json 2026-10-01 05:25:33 +00:00
Home Assistant Version Control b3d9ae54fa automations.yaml, zigbee2mqtt/state.json 2026-10-01 05:21:07 +00:00
Home Assistant Version Control db9096940d .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-01 05:15:36 +00:00
Home Assistant Version Control 721361659d .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-10-01 05:12:46 +00:00
Home Assistant Version Control 92c130f6ed zigbee2mqtt/state.json 2026-10-01 04:51:31 +00:00
Home Assistant Version Control 507319c325 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-10-01 04:05:34 +00:00
Home Assistant Version Control e760c1d9a3 zigbee2mqtt/state.json 2026-10-01 03:06:08 +00:00
Home Assistant Version Control ed47275616 zigbee2mqtt/state.json 2026-10-01 02:51:31 +00:00
Home Assistant Version Control 68412e9a9e zigbee2mqtt/state.json 2026-10-01 00:51:30 +00:00
Home Assistant Version Control 3b15ca1489 zigbee2mqtt/state.json 2026-09-30 22:51:28 +00:00
Home Assistant Version Control dfbdc744d3 zigbee2mqtt/state.json 2026-09-30 20:51:27 +00:00
Home Assistant Version Control 0319e3305b zigbee2mqtt/state.json 2026-09-30 18:51:27 +00:00
Home Assistant Version Control 70c1bba1d3 zigbee2mqtt/state.json 2026-09-30 18:45:50 +00:00
Home Assistant Version Control 45cdc01f91 zigbee2mqtt/state.json 2026-09-30 16:51:26 +00:00
Home Assistant Version Control 707c7c1ddd zigbee2mqtt/state.json 2026-09-30 14:51:26 +00:00
Home Assistant Version Control 61ed6eecc0 zigbee2mqtt/state.json 2026-09-30 12:51:27 +00:00
Home Assistant Version Control 588946a524 zigbee2mqtt/state.json 2026-09-30 11:15:07 +00:00
Home Assistant Version Control c832304ab2 zigbee2mqtt/state.json 2026-09-30 10:51:26 +00:00
Home Assistant Version Control c077247470 zigbee2mqtt/state.json 2026-09-30 08:51:26 +00:00
Home Assistant Version Control 11f9d7de2a zigbee2mqtt/state.json 2026-09-30 08:31:15 +00:00
Home Assistant Version Control 1cae3e9c8d zigbee2mqtt/state.json 2026-09-30 06:51:25 +00:00
Home Assistant Version Control 6805422387 zigbee2mqtt/state.json 2026-09-30 04:51:25 +00:00
Home Assistant Version Control 41dcd6b756 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-30 04:05:34 +00:00
Home Assistant Version Control 803028493e zigbee2mqtt/state.json 2026-09-30 02:51:22 +00:00
Home Assistant Version Control a97a62cf1b zigbee2mqtt/state.json 2026-09-30 00:51:20 +00:00
Home Assistant Version Control 78ccb3695a zigbee2mqtt/state.json 2026-09-29 23:01:40 +00:00
Home Assistant Version Control e876c5d01c zigbee2mqtt/state.json 2026-09-29 22:51:19 +00:00
Home Assistant Version Control 99171689c8 zigbee2mqtt/state.json 2026-09-29 20:51:18 +00:00
Home Assistant Version Control 46e915a8c0 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-29 18:51:17 +00:00
Home Assistant Version Control 90b9f2a29d zigbee2mqtt/state.json 2026-09-29 16:51:17 +00:00
Home Assistant Version Control fe735ceab3 zigbee2mqtt/state.json 2026-09-29 14:51:16 +00:00
Home Assistant Version Control 4a901964ac zigbee2mqtt/state.json 2026-09-29 12:51:16 +00:00
Home Assistant Version Control a1fc257c52 zigbee2mqtt/state.json 2026-09-29 11:15:07 +00:00
Home Assistant Version Control 3711201863 zigbee2mqtt/state.json 2026-09-29 10:51:15 +00:00
Home Assistant Version Control 049f4c5037 zigbee2mqtt/state.json 2026-09-29 08:51:14 +00:00
Home Assistant Version Control a46089a530 zigbee2mqtt/state.json 2026-09-29 06:51:12 +00:00
Home Assistant Version Control d14e029053 zigbee2mqtt/state.json 2026-09-29 04:51:11 +00:00
Home Assistant Version Control 5c2040f505 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-29 04:05:34 +00:00
Home Assistant Version Control c04985ecd4 zigbee2mqtt/state.json 2026-09-29 02:51:12 +00:00
Home Assistant Version Control 5f0cd1dc2b zigbee2mqtt/state.json 2026-09-29 01:06:44 +00:00
Home Assistant Version Control 6cd01ff756 zigbee2mqtt/state.json 2026-09-29 00:51:11 +00:00
Home Assistant Version Control adea85758b zigbee2mqtt/state.json 2026-09-28 22:51:10 +00:00
Home Assistant Version Control a8c2d28eec zigbee2mqtt/state.json 2026-09-28 20:51:09 +00:00
Home Assistant Version Control 972b56c5a0 zigbee2mqtt/state.json 2026-09-28 18:51:08 +00:00
Home Assistant Version Control 2fa5a79f42 zigbee2mqtt/state.json 2026-09-28 16:51:06 +00:00
Home Assistant Version Control cefaf8bc2d opencode/decisions.yaml, zigbee2mqtt/state.json 2026-09-28 16:42:50 +00:00
Home Assistant Version Control 7efca6727d opencode/decisions.yaml, zigbee2mqtt/state.json 2026-09-28 16:34:47 +00:00
Home Assistant Version Control c51d8fdad9 .storage/lovelace.sparkx_i7 2026-09-28 16:19:21 +00:00
Home Assistant Version Control 54d9f1281b .storage/lovelace.sparkx_i7 2026-09-28 16:18:22 +00:00
Home Assistant Version Control 44a83300ee .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-28 16:16:01 +00:00
Home Assistant Version Control 7f09aa96fa .storage/lovelace.sparkx_i7 2026-09-28 16:15:00 +00:00
Home Assistant Version Control d80e653229 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-28 16:12:20 +00:00
Home Assistant Version Control 5789f52801 go2rtc.yaml, zigbee2mqtt/state.json 2026-09-28 15:31:10 +00:00
Home Assistant Version Control 2d2ac4c397 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-28 15:27:35 +00:00
Home Assistant Version Control 6afa0d3c27 zigbee2mqtt/state.json 2026-09-28 14:50:53 +00:00
Home Assistant Version Control 2add7fb85c custom_components/spook/ectoplasms/utility_meter/repairs/__pycache__/__init__.cpython-314.pyc 2026-09-28 14:47:35 +00:00
Home Assistant Version Control 436677fa92 135 files 2026-09-28 14:46:57 +00:00
Home Assistant Version Control a8dbe16fce .HA_VERSION, .ha_run.lock 2026-09-28 14:46:29 +00:00
Home Assistant Version Control cd65be7a07 35 files 2026-09-28 14:45:59 +00:00
Home Assistant Version Control ae38d6b234 zigbee2mqtt/state.json 2026-09-28 13:20:33 +00:00
Home Assistant Version Control d636c72835 zigbee2mqtt/state.json 2026-09-28 11:20:32 +00:00
Home Assistant Version Control f5a8e7859f zigbee2mqtt/state.json 2026-09-28 11:15:06 +00:00
Home Assistant Version Control 30fb2b2fe2 zigbee2mqtt/state.json 2026-09-28 09:20:33 +00:00
Home Assistant Version Control 46396cac77 zigbee2mqtt/state.json 2026-09-28 07:34:41 +00:00
Home Assistant Version Control abb2f57bad zigbee2mqtt/state.json 2026-09-28 07:20:32 +00:00
Home Assistant Version Control 0b44933c34 zigbee2mqtt/state.json 2026-09-28 05:20:33 +00:00
Home Assistant Version Control 2e6fdd29de zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-28 04:05:34 +00:00
Home Assistant Version Control ee88871535 zigbee2mqtt/state.json 2026-09-28 04:01:20 +00:00
Home Assistant Version Control 5e8139a747 zigbee2mqtt/state.json 2026-09-28 03:20:27 +00:00
Home Assistant Version Control eed4eb83f9 zigbee2mqtt/state.json 2026-09-28 01:20:26 +00:00
Home Assistant Version Control 8c146c9fe5 zigbee2mqtt/state.json 2026-09-28 00:03:53 +00:00
Home Assistant Version Control ee72d8db68 zigbee2mqtt/state.json 2026-09-27 23:20:25 +00:00
Home Assistant Version Control 05eae67231 zigbee2mqtt/state.json 2026-09-27 21:20:21 +00:00
Home Assistant Version Control 9968248ac3 zigbee2mqtt/state.json 2026-09-27 19:20:22 +00:00
Home Assistant Version Control b802010475 zigbee2mqtt/state.json 2026-09-27 17:44:10 +00:00
Home Assistant Version Control ae25fdf729 zigbee2mqtt/state.json 2026-09-27 17:20:21 +00:00
Home Assistant Version Control 39d97ac2db 393 files 2026-09-27 17:16:54 +00:00
Home Assistant Version Control b05b7a897e zigbee2mqtt/state.json 2026-09-27 15:28:58 +00:00
Home Assistant Version Control effe1469ea zigbee2mqtt/state.json 2026-09-27 13:28:57 +00:00
Home Assistant Version Control eefd5bfeb1 zigbee2mqtt/state.json 2026-09-27 11:28:54 +00:00
Home Assistant Version Control 0c882a461c zigbee2mqtt/state.json 2026-09-27 09:28:53 +00:00
Home Assistant Version Control d7750e8608 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-27 07:28:53 +00:00
Home Assistant Version Control e13a65f3fa zigbee2mqtt/state.json 2026-09-27 05:28:52 +00:00
Home Assistant Version Control 7900792bbd zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-27 04:05:35 +00:00
Home Assistant Version Control da33f0499d automations.yaml 2026-09-27 03:40:23 +00:00
Home Assistant Version Control eea1f9151d zigbee2mqtt/state.json 2026-09-27 03:40:16 +00:00
Home Assistant Version Control d3b811c304 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-27 03:40:12 +00:00
Home Assistant Version Control 73485862c8 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-27 03:34:57 +00:00
Home Assistant Version Control c2f2f8dd99 .storage/lovelace.sparkx_i7 2026-09-27 03:25:49 +00:00
Home Assistant Version Control 20c029dcd8 zigbee2mqtt/state.json 2026-09-27 03:25:39 +00:00
Home Assistant Version Control c678e3f183 .storage/lovelace_resources 2026-09-27 03:25:07 +00:00
Home Assistant Version Control 2b3987f4c3 .ha_run.lock 2026-09-27 03:24:43 +00:00
Home Assistant Version Control 6da203ba1f zigbee2mqtt/state.json 2026-09-27 03:24:21 +00:00
Home Assistant Version Control c926a22e7b zigbee2mqtt/state.json 2026-09-27 03:17:08 +00:00
Home Assistant Version Control bb59bc5e1f .storage/lovelace.sparkx_i7 2026-09-27 03:15:12 +00:00
Home Assistant Version Control 9d041dcd6e .storage/lovelace.sparkx_i7 2026-09-27 03:14:38 +00:00
Home Assistant Version Control 386c42729a .storage/lovelace_resources 2026-09-27 03:13:24 +00:00
Home Assistant Version Control 3792ba0028 .ha_run.lock 2026-09-27 03:12:52 +00:00
Home Assistant Version Control 1a534bfbe9 10 files 2026-09-27 03:11:56 +00:00
Home Assistant Version Control b3d90618ec zigbee2mqtt/state.json 2026-09-27 02:49:27 +00:00
Home Assistant Version Control edb556c625 zigbee2mqtt/state.json 2026-09-27 02:15:31 +00:00
Home Assistant Version Control 8ddbcc156e zigbee2mqtt/state.json 2026-09-27 00:15:25 +00:00
Home Assistant Version Control 1af6095d7c zigbee2mqtt/state.json 2026-09-26 22:15:22 +00:00
Home Assistant Version Control 22157a8605 zigbee2mqtt/state.json 2026-09-26 20:15:22 +00:00
Home Assistant Version Control 8d77c058d4 zigbee2mqtt/state.json 2026-09-26 20:14:30 +00:00
Home Assistant Version Control 4f019f2b9d .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-26 18:15:17 +00:00
Home Assistant Version Control 9c95df28d7 zigbee2mqtt/state.json 2026-09-26 16:15:12 +00:00
Home Assistant Version Control 1f4233f6ef zigbee2mqtt/state.json 2026-09-26 15:31:53 +00:00
Home Assistant Version Control 8ff6b42aaf .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-26 14:15:10 +00:00
Home Assistant Version Control 00667801c3 zigbee2mqtt/state.json 2026-09-26 12:15:11 +00:00
Home Assistant Version Control b1cb3519ca zigbee2mqtt/state.json 2026-09-26 10:15:09 +00:00
Home Assistant Version Control cd8cb67d88 11 files 2026-09-26 08:15:10 +00:00
Home Assistant Version Control 9c6797b5d8 zigbee2mqtt/state.json 2026-09-26 06:15:08 +00:00
Home Assistant Version Control 6862aef24f zigbee2mqtt/state.json 2026-09-26 04:15:07 +00:00
Home Assistant Version Control 1b43c23383 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-26 04:05:36 +00:00
Home Assistant Version Control 8ccd458c02 zigbee2mqtt/state.json 2026-09-26 02:15:07 +00:00
Home Assistant Version Control 1886733a03 zigbee2mqtt/state.json 2026-09-26 00:15:08 +00:00
Home Assistant Version Control b9e178bef5 zigbee2mqtt/state.json 2026-09-25 22:15:06 +00:00
Home Assistant Version Control f5aaf288dd zigbee2mqtt/state.json 2026-09-25 20:15:02 +00:00
Home Assistant Version Control 5390032501 zigbee2mqtt/state.json 2026-09-25 18:15:01 +00:00
Home Assistant Version Control e0f4afd026 automations.yaml, zigbee2mqtt/state.json 2026-09-25 17:46:37 +00:00
Home Assistant Version Control cc03a76eee automations.yaml, zigbee2mqtt/state.json 2026-09-25 17:40:29 +00:00
Home Assistant Version Control 03f1235d10 automations.yaml 2026-09-25 17:34:58 +00:00
Home Assistant Version Control bb3d020b19 automations.yaml, zigbee2mqtt/state.json 2026-09-25 17:30:48 +00:00
Home Assistant Version Control 4af8713fe2 zigbee2mqtt/state.json 2026-09-25 16:14:59 +00:00
Home Assistant Version Control 875666ba1f .storage/lovelace.dashboard_home, zigbee2mqtt/state.json 2026-09-25 14:39:31 +00:00
Home Assistant Version Control a7ede27e1b zigbee2mqtt/state.json 2026-09-25 14:14:42 +00:00
Home Assistant Version Control b465b34dfa zigbee2mqtt/state.json 2026-09-25 12:14:41 +00:00
Home Assistant Version Control 16d70a96fb .storage/lovelace.sparkx_i7 2026-09-25 12:04:58 +00:00
Home Assistant Version Control c3add50318 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-25 12:04:03 +00:00
Home Assistant Version Control 1f977aa61d zigbee2mqtt/state.json 2026-09-25 10:14:32 +00:00
Home Assistant Version Control 5193ef764c zigbee2mqtt/state.json 2026-09-25 08:14:32 +00:00
Home Assistant Version Control af8567e49f zigbee2mqtt/state.json 2026-09-25 06:14:29 +00:00
Home Assistant Version Control 4004d987f1 137 files 2026-09-25 04:11:46 +00:00
Home Assistant Version Control ad634c1b84 59 files 2026-09-25 04:10:30 +00:00
Home Assistant Version Control 56c80f896e zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-25 04:05:35 +00:00
Home Assistant Version Control 3e7e0d4586 zigbee2mqtt/state.json 2026-09-25 03:04:00 +00:00
Home Assistant Version Control fa9984e2d5 zigbee2mqtt/state.json 2026-09-25 02:43:31 +00:00
Home Assistant Version Control 7bb889920f zigbee2mqtt/state.json 2026-09-25 01:04:01 +00:00
Home Assistant Version Control 005f4f6ec4 zigbee2mqtt/state.json 2026-09-24 23:37:19 +00:00
Home Assistant Version Control 349f1af31d zigbee2mqtt/state.json 2026-09-24 23:03:48 +00:00
Home Assistant Version Control c72c13fb22 .storage/lovelace.dashboard_home 2026-09-24 21:27:35 +00:00
Home Assistant Version Control cf48b49200 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-24 21:27:21 +00:00
Home Assistant Version Control ed65227272 3 files 2026-09-24 21:18:18 +00:00
Home Assistant Version Control 944520da6a .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-24 21:03:39 +00:00
Home Assistant Version Control 874508ace8 .storage/lovelace.dashboard_home, zigbee2mqtt/state.json 2026-09-24 19:03:12 +00:00
Home Assistant Version Control af02108327 11 files 2026-09-24 17:03:37 +00:00
Home Assistant Version Control 8e4343dd11 .storage/lovelace.dashboard_home, zigbee2mqtt/state.json 2026-09-24 15:42:20 +00:00
Home Assistant Version Control 7c90b22b92 automations.yaml 2026-09-24 15:37:34 +00:00
Home Assistant Version Control 52521a9506 automations.yaml 2026-09-24 15:37:28 +00:00
Home Assistant Version Control ff62b812af automations.yaml 2026-09-24 15:37:14 +00:00
Home Assistant Version Control 10449dc524 automations.yaml, zigbee2mqtt/state.json 2026-09-24 15:36:44 +00:00
Home Assistant Version Control 2b89c37815 automations.yaml 2026-09-24 15:28:15 +00:00
Home Assistant Version Control b6a9ecbe86 automations.yaml 2026-09-24 15:28:04 +00:00
Home Assistant Version Control c070346afe automations.yaml 2026-09-24 15:27:59 +00:00
Home Assistant Version Control dfdfab176c automations.yaml 2026-09-24 15:27:51 +00:00
Home Assistant Version Control bbeacf4d1c automations.yaml 2026-09-24 15:27:47 +00:00
Home Assistant Version Control 466c217bc5 automations.yaml 2026-09-24 15:27:43 +00:00
Home Assistant Version Control ef3619f265 automations.yaml 2026-09-24 15:27:39 +00:00
Home Assistant Version Control c823fe96d2 automations.yaml, zigbee2mqtt/state.json 2026-09-24 15:27:29 +00:00
Home Assistant Version Control f1cd09bfb9 zigbee2mqtt/state.json 2026-09-24 15:03:34 +00:00
Home Assistant Version Control 434194c01e zigbee2mqtt/state.json 2026-09-24 13:03:33 +00:00
Home Assistant Version Control dd6b5d13f4 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-24 12:49:42 +00:00
Home Assistant Version Control f2c58cea56 .storage/lovelace.sparkx_i7 2026-09-24 12:41:54 +00:00
Home Assistant Version Control 05e565d3a9 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-24 12:41:14 +00:00
Home Assistant Version Control f3ddb70487 AGENTS.md, zigbee2mqtt/state.json 2026-09-24 12:25:27 +00:00
Home Assistant Version Control 0768b73099 AGENTS.md, zigbee2mqtt/state.json 2026-09-24 12:22:50 +00:00
Home Assistant Version Control 59cd50d34a zigbee2mqtt/state.json 2026-09-24 11:15:06 +00:00
Home Assistant Version Control 7ce4140bdb zigbee2mqtt/state.json 2026-09-24 11:03:29 +00:00
Home Assistant Version Control 4464110c5b zigbee2mqtt/state.json 2026-09-24 09:03:30 +00:00
Home Assistant Version Control be677a69e6 zigbee2mqtt/state.json 2026-09-24 07:03:31 +00:00
Home Assistant Version Control 222c781632 zigbee2mqtt/state.json 2026-09-24 05:03:29 +00:00
Home Assistant Version Control be05ab3314 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-24 04:05:34 +00:00
Home Assistant Version Control 24b1bdf23b .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 03:03:28 +00:00
Home Assistant Version Control 1fb4f924e0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 03:03:11 +00:00
Home Assistant Version Control 6a7ecb3a6d .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 03:02:36 +00:00
Home Assistant Version Control 02c778f2dd .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 03:02:22 +00:00
Home Assistant Version Control df0f7eb640 3 files 2026-09-24 03:02:15 +00:00
Home Assistant Version Control 706a189a50 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 03:00:26 +00:00
Home Assistant Version Control cd8b328095 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:59:54 +00:00
Home Assistant Version Control f2c59c26b4 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:59:02 +00:00
Home Assistant Version Control b4ada2f4d8 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:58:36 +00:00
Home Assistant Version Control de8a2a4da9 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:57:08 +00:00
Home Assistant Version Control b0d2fd8c2e .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:55:54 +00:00
Home Assistant Version Control 7fa1e5ac51 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:55:14 +00:00
Home Assistant Version Control d333272ffe .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:55:06 +00:00
Home Assistant Version Control 1de1d85764 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:55:00 +00:00
Home Assistant Version Control 770965884e .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:54:48 +00:00
Home Assistant Version Control 5a95290522 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:53:28 +00:00
Home Assistant Version Control c4e6a98dd3 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:53:20 +00:00
Home Assistant Version Control 9fe65cc053 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:52:22 +00:00
Home Assistant Version Control c06e104386 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:51:12 +00:00
Home Assistant Version Control 06146c02d4 3 files 2026-09-24 02:45:40 +00:00
Home Assistant Version Control 4f1a21a74b .ha_mcp/backups/dashboard.sparkx-i7.20260924_024525.yaml, .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:45:32 +00:00
Home Assistant Version Control f2c9458d5f 4 files 2026-09-24 02:45:23 +00:00
Home Assistant Version Control c4c647049f .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:43:55 +00:00
Home Assistant Version Control ccadccb700 4 files 2026-09-24 02:42:51 +00:00
Home Assistant Version Control be9edb89fb 4 files 2026-09-24 02:37:49 +00:00
Home Assistant Version Control 6758b678be .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:36:29 +00:00
Home Assistant Version Control b67de74409 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:36:25 +00:00
Home Assistant Version Control 92d4b1f571 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:36:19 +00:00
Home Assistant Version Control c8dd55e4e2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:36:13 +00:00
Home Assistant Version Control cf21e2133f .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:35:47 +00:00
Home Assistant Version Control d62c7e092a .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:35:41 +00:00
Home Assistant Version Control cb3cb6e919 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:35:23 +00:00
Home Assistant Version Control 45ca3d786d .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:35:19 +00:00
Home Assistant Version Control bafd0a5864 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:34:27 +00:00
Home Assistant Version Control cb1e114df3 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:34:19 +00:00
Home Assistant Version Control d678661df0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:33:53 +00:00
Home Assistant Version Control 0475e72039 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:33:15 +00:00
Home Assistant Version Control d3151d6b9f .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:29:26 +00:00
Home Assistant Version Control f6c2be5f55 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:28:48 +00:00
Home Assistant Version Control 267605d9b0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 02:28:07 +00:00
Home Assistant Version Control f049e755a7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:27:13 +00:00
Home Assistant Version Control 20d29066e4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:22:44 +00:00
Home Assistant Version Control 5d79dc1fbc .cache/brands/integrations/matter/dark_logo.png 2026-09-24 02:08:33 +00:00
Home Assistant Version Control b162c191db .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:07:47 +00:00
Home Assistant Version Control ca55950978 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 02:03:01 +00:00
Home Assistant Version Control 13e79c538e 3 files 2026-09-24 01:59:15 +00:00
Home Assistant Version Control 94a273738e .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:55:46 +00:00
Home Assistant Version Control 835877edcf 4 files 2026-09-24 01:55:21 +00:00
Home Assistant Version Control 256e3395ed .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:55:03 +00:00
Home Assistant Version Control 5d73a352e2 3 files 2026-09-24 01:54:04 +00:00
Home Assistant Version Control 0b914cf847 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:53:00 +00:00
Home Assistant Version Control 305a7fe268 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:51:40 +00:00
Home Assistant Version Control cc6089d520 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:50:30 +00:00
Home Assistant Version Control aa3f067db4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 01:50:20 +00:00
Home Assistant Version Control 26f9726a33 go2rtc.yaml 2026-09-24 01:50:10 +00:00
Home Assistant Version Control d5bf3c69d1 .storage/lovelace.ender5_printer 2026-09-24 01:48:52 +00:00
Home Assistant Version Control b0f5df6f5a .storage/lovelace.ender5_printer 2026-09-24 01:48:04 +00:00
Home Assistant Version Control 22da06f258 .storage/lovelace.ender5_printer 2026-09-24 01:47:46 +00:00
Home Assistant Version Control bbed7e13d2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:46:22 +00:00
Home Assistant Version Control 16754eaafd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 01:46:10 +00:00
Home Assistant Version Control 7cc8bcd968 .storage/lovelace.sparkx_i7 2026-09-24 01:43:56 +00:00
Home Assistant Version Control c694a30435 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:43:46 +00:00
Home Assistant Version Control 6b08b02a89 3 files 2026-09-24 01:41:04 +00:00
Home Assistant Version Control a69eab12bb .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-24 01:38:10 +00:00
Home Assistant Version Control 9c1726eb8a .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-24 01:26:03 +00:00
Home Assistant Version Control 2f861f1f26 .storage/lovelace_dashboards 2026-09-24 01:16:36 +00:00
Home Assistant Version Control ade235ce42 .storage/lovelace.sparkx_i7, zigbee2mqtt/state.json 2026-09-24 01:16:26 +00:00
Home Assistant Version Control c306fdbe7d .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:15:06 +00:00
Home Assistant Version Control a91fc6ddc6 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:14:28 +00:00
Home Assistant Version Control c834002c79 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:10:42 +00:00
Home Assistant Version Control 4bbb4c504f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 01:10:18 +00:00
Home Assistant Version Control 4ecde74214 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:10:10 +00:00
Home Assistant Version Control 8f42227308 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:09:56 +00:00
Home Assistant Version Control 312a6f7f8d .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:09:38 +00:00
Home Assistant Version Control 859b342480 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:08:39 +00:00
Home Assistant Version Control fd073c3bb1 .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:08:18 +00:00
Home Assistant Version Control a85390ecca .ha_mcp/logs/mcp_usage.jsonl 2026-09-24 01:07:35 +00:00
Home Assistant Version Control e0ddffdea4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-24 01:07:22 +00:00
Home Assistant Version Control 77f932b083 .storage/lovelace_resources 2026-09-24 01:03:53 +00:00
Home Assistant Version Control de0718b9ca zigbee2mqtt/state.json 2026-09-24 01:03:45 +00:00
Home Assistant Version Control a7c82af93d .storage/lovelace_resources 2026-09-24 00:57:05 +00:00
Home Assistant Version Control 1b90baf0a6 .ha_run.lock 2026-09-24 00:56:43 +00:00
Home Assistant Version Control 8a0ebd7069 10 files 2026-09-24 00:56:01 +00:00
Home Assistant Version Control 8a4be47564 zigbee2mqtt/state.json 2026-09-23 23:42:46 +00:00
Home Assistant Version Control 931e60cb1a 10 files 2026-09-23 21:42:45 +00:00
Home Assistant Version Control cfa09b081a zigbee2mqtt/state.json 2026-09-23 19:42:44 +00:00
Home Assistant Version Control 520652fd19 zigbee2mqtt/state.json 2026-09-23 17:42:42 +00:00
Home Assistant Version Control 72b75a9bec .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-23 15:42:43 +00:00
Home Assistant Version Control 8acf714aab zigbee2mqtt/state.json 2026-09-23 13:42:43 +00:00
Home Assistant Version Control d099bb9aa4 zigbee2mqtt/state.json 2026-09-23 12:25:42 +00:00
Home Assistant Version Control fae5fee6ad zigbee2mqtt/state.json 2026-09-23 11:42:41 +00:00
Home Assistant Version Control a97064f8fb zigbee2mqtt/state.json 2026-09-23 11:15:06 +00:00
Home Assistant Version Control 113c712563 zigbee2mqtt/state.json 2026-09-23 09:42:42 +00:00
Home Assistant Version Control 3bff7ee98b zigbee2mqtt/state.json 2026-09-23 07:42:40 +00:00
Home Assistant Version Control 140917e280 zigbee2mqtt/state.json 2026-09-23 05:42:41 +00:00
Home Assistant Version Control 114e77d8b3 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-23 04:05:35 +00:00
Home Assistant Version Control e45604f6f1 zigbee2mqtt/state.json 2026-09-23 03:42:41 +00:00
Home Assistant Version Control 4b93a6f863 zigbee2mqtt/state.json 2026-09-23 01:42:40 +00:00
Home Assistant Version Control 783423e0ca zigbee2mqtt/state.json 2026-09-22 23:42:40 +00:00
Home Assistant Version Control 63788bede3 .storage/lovelace_resources 2026-09-22 23:38:54 +00:00
Home Assistant Version Control 4f339a5521 .ha_run.lock 2026-09-22 23:38:34 +00:00
Home Assistant Version Control 3c92b21c1f zigbee2mqtt/state.json 2026-09-22 23:37:56 +00:00
Home Assistant Version Control 03f24e0476 zigbee2mqtt/state.json 2026-09-22 22:21:42 +00:00
Home Assistant Version Control 94e9f32a43 148 files 2026-09-22 20:21:39 +00:00
Home Assistant Version Control 43021c1d3a .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-22 18:21:38 +00:00
Home Assistant Version Control 9177c91809 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-22 16:21:36 +00:00
Home Assistant Version Control eea47e26ae zigbee2mqtt/state.json 2026-09-22 14:21:35 +00:00
Home Assistant Version Control ec0a0da8c0 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-22 12:21:35 +00:00
Home Assistant Version Control 3b44cda9cd zigbee2mqtt/state.json 2026-09-22 11:15:08 +00:00
Home Assistant Version Control 495d52118c zigbee2mqtt/state.json 2026-09-22 10:21:34 +00:00
Home Assistant Version Control 416d8e91ea zigbee2mqtt/state.json 2026-09-22 08:21:35 +00:00
Home Assistant Version Control 82baf921e4 zigbee2mqtt/state.json 2026-09-22 06:21:33 +00:00
Home Assistant Version Control a499358aaa zigbee2mqtt/state.json 2026-09-22 04:21:34 +00:00
Home Assistant Version Control 9a81ac0864 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-22 04:05:35 +00:00
Home Assistant Version Control 7e844e6ae3 zigbee2mqtt/state.json 2026-09-22 02:21:32 +00:00
Home Assistant Version Control 4cb3b11ebe zigbee2mqtt/state.json 2026-09-22 00:21:33 +00:00
Home Assistant Version Control 3f6af1e3e1 zigbee2mqtt/state.json 2026-09-21 22:21:33 +00:00
Home Assistant Version Control cc6a0610ff .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-21 20:21:32 +00:00
Home Assistant Version Control 00303536ea zigbee2mqtt/state.json 2026-09-21 18:21:33 +00:00
Home Assistant Version Control c3e12e6671 zigbee2mqtt/state.json 2026-09-21 16:21:31 +00:00
Home Assistant Version Control f4ce164f53 zigbee2mqtt/state.json 2026-09-21 14:21:32 +00:00
Home Assistant Version Control 1466df0abb zigbee2mqtt/state.json 2026-09-21 12:21:32 +00:00
Home Assistant Version Control 63f08ee9d9 zigbee2mqtt/state.json 2026-09-21 11:15:06 +00:00
Home Assistant Version Control 8113c3d3f7 zigbee2mqtt/state.json 2026-09-21 10:21:31 +00:00
Home Assistant Version Control 3bdb7801bc .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-21 08:21:29 +00:00
Home Assistant Version Control 9813bc78af zigbee2mqtt/state.json 2026-09-21 06:21:30 +00:00
Home Assistant Version Control 1d644e9ac9 zigbee2mqtt/state.json 2026-09-21 04:21:30 +00:00
Home Assistant Version Control 4dcb348690 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-21 04:05:33 +00:00
Home Assistant Version Control 274d1a2355 zigbee2mqtt/state.json 2026-09-21 02:21:29 +00:00
Home Assistant Version Control 3ead37c93e zigbee2mqtt/state.json 2026-09-21 00:21:30 +00:00
Home Assistant Version Control 766cc5011f zigbee2mqtt/state.json 2026-09-20 22:21:28 +00:00
Home Assistant Version Control c450abd1ab zigbee2mqtt/state.json 2026-09-20 20:21:29 +00:00
Home Assistant Version Control 9a078cb61d .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-20 18:21:27 +00:00
Home Assistant Version Control 1e40ea5629 zigbee2mqtt/state.json 2026-09-20 16:21:28 +00:00
Home Assistant Version Control d989a4bc83 zigbee2mqtt/state.json 2026-09-20 15:26:31 +00:00
Home Assistant Version Control a4308f16bc zigbee2mqtt/state.json 2026-09-20 14:21:28 +00:00
Home Assistant Version Control ae97cb5445 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-20 12:21:27 +00:00
Home Assistant Version Control b6192cafcf .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-20 10:21:28 +00:00
Home Assistant Version Control 116abb8f6c .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-20 08:21:26 +00:00
Home Assistant Version Control 0622d286ff zigbee2mqtt/state.json 2026-09-20 06:21:25 +00:00
Home Assistant Version Control b77084140b zigbee2mqtt/state.json 2026-09-20 04:21:25 +00:00
Home Assistant Version Control fe21a1c316 zigbee2mqtt/configuration.yaml, zigbee2mqtt/state.json 2026-09-20 04:03:58 +00:00
Home Assistant Version Control 590525d7a8 zigbee2mqtt/state.json 2026-09-19 20:21:21 +00:00
Home Assistant Version Control f89bc26661 2 files 2026-09-19 18:17:48 +00:00
Home Assistant Version Control 84a782a4cd zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-19 18:14:25 +00:00
Home Assistant Version Control f52b347ee7 3 files 2026-09-19 17:36:10 +00:00
Home Assistant Version Control 99467464e4 203 files 2026-09-19 17:31:12 +00:00
Home Assistant Version Control 279159581d zigbee2mqtt/state.json 2026-09-19 15:45:45 +00:00
Home Assistant Version Control 11f00eec6b zigbee2mqtt/state.json 2026-09-19 13:45:44 +00:00
Home Assistant Version Control 4c08c64ac0 zigbee2mqtt/state.json 2026-09-19 11:45:44 +00:00
Home Assistant Version Control 2b071a97ba .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-19 09:45:43 +00:00
Home Assistant Version Control 2c22306b74 zigbee2mqtt/state.json 2026-09-19 07:45:42 +00:00
Home Assistant Version Control edce2966cf zigbee2mqtt/state.json 2026-09-19 05:45:42 +00:00
Home Assistant Version Control e5aed7b0f8 zigbee2mqtt/state.json 2026-09-19 03:45:41 +00:00
Home Assistant Version Control 7066636f86 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-19 02:29:42 +00:00
Home Assistant Version Control 41e6bde578 zigbee2mqtt/state.json 2026-09-19 01:59:01 +00:00
Home Assistant Version Control 7a8dcfbf0e zigbee2mqtt/state.json 2026-09-19 01:45:40 +00:00
Home Assistant Version Control d6064406dc zigbee2mqtt/state.json 2026-09-18 23:45:41 +00:00
Home Assistant Version Control 8b13aa39e2 zigbee2mqtt/state.json 2026-09-18 21:45:39 +00:00
Home Assistant Version Control b395b63e88 zigbee2mqtt/state.json 2026-09-18 19:45:40 +00:00
Home Assistant Version Control 9dfcb1f8cd zigbee2mqtt/state.json 2026-09-18 17:45:40 +00:00
Home Assistant Version Control 0cf762ca45 zigbee2mqtt/state.json 2026-09-18 15:45:38 +00:00
Home Assistant Version Control f9d518e7eb .storage/lovelace_resources 2026-09-18 15:41:56 +00:00
Home Assistant Version Control 97f5f74b57 .ha_run.lock 2026-09-18 15:41:32 +00:00
Home Assistant Version Control d8af42e7e1 zigbee2mqtt/state.json 2026-09-18 15:41:06 +00:00
Home Assistant Version Control b1fd0abc94 112 files 2026-09-18 15:36:46 +00:00
Home Assistant Version Control 94867222bd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-18 15:16:02 +00:00
Home Assistant Version Control a41da10366 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-18 13:40:09 +00:00
Home Assistant Version Control 32add09fad .ha_mcp/logs/mcp_usage.jsonl, configuration.yaml 2026-09-18 13:36:32 +00:00
Home Assistant Version Control b9d5303185 zigbee2mqtt/state.json 2026-09-18 13:35:06 +00:00
Home Assistant Version Control 71c926b74e .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:34:14 +00:00
Home Assistant Version Control 54802ec415 .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:33:56 +00:00
Home Assistant Version Control 9f1571dc29 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-18 13:31:48 +00:00
Home Assistant Version Control 708d8064f1 .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:30:58 +00:00
Home Assistant Version Control 69c071e914 3 files 2026-09-18 13:29:54 +00:00
Home Assistant Version Control 16f51343f6 .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:29:02 +00:00
Home Assistant Version Control 008f873d2d .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-18 13:26:12 +00:00
Home Assistant Version Control 4b92a1cfef .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-18 13:24:06 +00:00
Home Assistant Version Control 90fe17ae68 .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:16:43 +00:00
Home Assistant Version Control 70d7833f03 .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:15:57 +00:00
Home Assistant Version Control 088c58ddfc .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:15:39 +00:00
Home Assistant Version Control 57b1196a74 .ha_mcp/logs/mcp_usage.jsonl 2026-09-18 13:15:31 +00:00
Home Assistant Version Control 85514d12ea .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-18 13:15:18 +00:00
Home Assistant Version Control 8b37ae169b .cache/brands/integrations/matter/logo.png, zigbee2mqtt/state.json 2026-09-18 13:10:28 +00:00
Home Assistant Version Control 1200fd5338 zigbee2mqtt/state.json 2026-09-18 11:35:05 +00:00
Home Assistant Version Control 44322a09fc zigbee2mqtt/state.json 2026-09-18 09:35:05 +00:00
Home Assistant Version Control 364696a497 zigbee2mqtt/state.json 2026-09-18 07:35:06 +00:00
Home Assistant Version Control f4e7d907f5 zigbee2mqtt/state.json 2026-09-18 06:21:04 +00:00
Home Assistant Version Control b25fc475a0 zigbee2mqtt/state.json 2026-09-18 05:35:05 +00:00
Home Assistant Version Control 0e9073e7fb zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-18 02:29:44 +00:00
Home Assistant Version Control 5ca0bdcec9 zigbee2mqtt/state.json 2026-09-18 01:35:05 +00:00
Home Assistant Version Control e621a1a672 zigbee2mqtt/state.json 2026-09-17 23:35:03 +00:00
Home Assistant Version Control 0d917cd7c3 zigbee2mqtt/state.json 2026-09-17 21:35:04 +00:00
Home Assistant Version Control f53e502a34 zigbee2mqtt/state.json 2026-09-17 19:35:03 +00:00
Home Assistant Version Control 3eb1e99e6c zigbee2mqtt/state.json 2026-09-17 17:35:02 +00:00
Home Assistant Version Control 978f546cd4 zigbee2mqtt/state.json 2026-09-17 15:35:01 +00:00
Home Assistant Version Control 7037a57ff4 opencode/decisions.yaml 2026-09-17 14:41:04 +00:00
Home Assistant Version Control 09ae84c068 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:40:00 +00:00
Home Assistant Version Control 0772566ff1 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:39:46 +00:00
Home Assistant Version Control 6e50f948a4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-17 14:39:24 +00:00
Home Assistant Version Control 68f51f590b .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:38:32 +00:00
Home Assistant Version Control 7a2a912318 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-17 14:38:10 +00:00
Home Assistant Version Control f76ed9a862 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:37:58 +00:00
Home Assistant Version Control e0d813a870 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:37:44 +00:00
Home Assistant Version Control 4f38f29967 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:37:20 +00:00
Home Assistant Version Control fcd49d8fb5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-17 14:36:56 +00:00
Home Assistant Version Control 5f42325c25 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:31:25 +00:00
Home Assistant Version Control 36d7fe5b6a .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:31:03 +00:00
Home Assistant Version Control ee47d3d950 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:30:27 +00:00
Home Assistant Version Control 92c898b9af .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:30:02 +00:00
Home Assistant Version Control cabf056e27 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:29:53 +00:00
Home Assistant Version Control 739f2974d7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-17 14:29:45 +00:00
Home Assistant Version Control 9d78269baf .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:25:11 +00:00
Home Assistant Version Control 91191cd8ef .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-17 14:24:31 +00:00
Home Assistant Version Control 9ee7b5d609 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:23:13 +00:00
Home Assistant Version Control 24fd73c489 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:22:49 +00:00
Home Assistant Version Control c9b3ddd744 .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:22:23 +00:00
Home Assistant Version Control 99ef57360e .ha_mcp/logs/mcp_usage.jsonl 2026-09-17 14:22:11 +00:00
Home Assistant Version Control 1cf4c9cc2f .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-17 14:22:03 +00:00
Home Assistant Version Control eb84e58411 zigbee2mqtt/state.json 2026-09-17 13:35:02 +00:00
Home Assistant Version Control 9bb5e8ff45 zigbee2mqtt/state.json 2026-09-17 11:35:00 +00:00
Home Assistant Version Control de412af4fa zigbee2mqtt/state.json 2026-09-17 11:15:07 +00:00
Home Assistant Version Control e725d72cbe zigbee2mqtt/state.json 2026-09-17 09:35:01 +00:00
Home Assistant Version Control be5f5b0278 zigbee2mqtt/state.json 2026-09-17 07:34:59 +00:00
Home Assistant Version Control 5f60c4ac9b zigbee2mqtt/state.json 2026-09-17 05:35:02 +00:00
Home Assistant Version Control 8a770de7bc zigbee2mqtt/state.json 2026-09-17 03:34:57 +00:00
Home Assistant Version Control 1e27400980 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-17 02:29:43 +00:00
Home Assistant Version Control 5df3cd062f zigbee2mqtt/state.json 2026-09-17 01:34:56 +00:00
Home Assistant Version Control 41169f1270 zigbee2mqtt/state.json 2026-09-16 23:34:56 +00:00
Home Assistant Version Control 2d4eb7ca2b zigbee2mqtt/state.json 2026-09-16 21:34:55 +00:00
Home Assistant Version Control 9fa819b755 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-16 19:34:54 +00:00
Home Assistant Version Control 5484bfc285 zigbee2mqtt/state.json 2026-09-16 17:34:55 +00:00
Home Assistant Version Control 85fab28c5d zigbee2mqtt/state.json 2026-09-16 15:34:52 +00:00
Home Assistant Version Control 0bca9d971a .storage/lovelace_resources 2026-09-16 15:31:08 +00:00
Home Assistant Version Control 0b034b6b1a .ha_run.lock 2026-09-16 15:30:38 +00:00
Home Assistant Version Control ef9868f192 217 files 2026-09-16 15:29:53 +00:00
Home Assistant Version Control 40c604b6dd .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-16 15:20:27 +00:00
Home Assistant Version Control e5e3728509 zigbee2mqtt/state.json 2026-09-16 13:20:28 +00:00
Home Assistant Version Control 01bb8fe7a8 zigbee2mqtt/state.json 2026-09-16 11:20:28 +00:00
Home Assistant Version Control dd55d1a8b7 zigbee2mqtt/state.json 2026-09-16 11:15:06 +00:00
Home Assistant Version Control 67929bd1c2 zigbee2mqtt/state.json 2026-09-16 09:20:27 +00:00
Home Assistant Version Control f327f97816 zigbee2mqtt/state.json 2026-09-16 07:20:27 +00:00
Home Assistant Version Control f01ea0f8dd zigbee2mqtt/state.json 2026-09-16 05:20:28 +00:00
Home Assistant Version Control cb5357c294 zigbee2mqtt/state.json 2026-09-16 03:20:26 +00:00
Home Assistant Version Control d6c2c07079 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-16 02:29:43 +00:00
Home Assistant Version Control f509776cab zigbee2mqtt/state.json 2026-09-16 01:20:26 +00:00
Home Assistant Version Control 89511c9943 zigbee2mqtt/state.json 2026-09-15 23:20:25 +00:00
Home Assistant Version Control 2cd83c6ec4 zigbee2mqtt/state.json 2026-09-15 21:20:26 +00:00
Home Assistant Version Control 0a210c8531 zigbee2mqtt/state.json 2026-09-15 19:20:25 +00:00
Home Assistant Version Control 84ffa62c18 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-15 17:20:24 +00:00
Home Assistant Version Control 2621e0ccba zigbee2mqtt/state.json 2026-09-15 15:20:23 +00:00
Home Assistant Version Control 2f7e474a52 zigbee2mqtt/state.json 2026-09-15 13:20:19 +00:00
Home Assistant Version Control c624bbf825 .storage/lovelace_resources 2026-09-15 13:16:49 +00:00
Home Assistant Version Control 759fdb941d .ha_run.lock 2026-09-15 13:16:15 +00:00
Home Assistant Version Control 166c82eaab 5 files 2026-09-15 13:15:51 +00:00
Home Assistant Version Control 8ad9948a8a .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-15 12:58:02 +00:00
Home Assistant Version Control 95b3276523 zigbee2mqtt/state.json 2026-09-15 11:15:08 +00:00
Home Assistant Version Control f2e55996dc zigbee2mqtt/state.json 2026-09-15 10:58:03 +00:00
Home Assistant Version Control 11a2d93baa zigbee2mqtt/state.json 2026-09-15 08:58:01 +00:00
Home Assistant Version Control b241f7e2c2 zigbee2mqtt/state.json 2026-09-15 06:58:02 +00:00
Home Assistant Version Control ff92ac595a zigbee2mqtt/state.json 2026-09-15 04:58:01 +00:00
Home Assistant Version Control 2fc7a04d31 .storage/lovelace.dashboard_home, zigbee2mqtt/state.json 2026-09-15 03:12:14 +00:00
Home Assistant Version Control d04cda4eb4 zigbee2mqtt/state.json 2026-09-15 02:58:02 +00:00
Home Assistant Version Control ac54b44d77 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-15 02:29:44 +00:00
Home Assistant Version Control d0842235ce zigbee2mqtt/state.json 2026-09-15 00:58:00 +00:00
Home Assistant Version Control 3aa1be6f28 zigbee2mqtt/state.json 2026-09-14 22:57:59 +00:00
Home Assistant Version Control 4eb3173d11 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-14 20:57:58 +00:00
Home Assistant Version Control 1c1db37c82 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-14 18:57:58 +00:00
Home Assistant Version Control 15c60146ed zigbee2mqtt/state.json 2026-09-14 18:43:48 +00:00
Home Assistant Version Control d4aae03654 automations.yaml, zigbee2mqtt/state.json 2026-09-14 18:22:10 +00:00
Home Assistant Version Control f322fc10bc zigbee2mqtt/state.json 2026-09-14 16:57:57 +00:00
Home Assistant Version Control 4ca89008be zigbee2mqtt/state.json 2026-09-14 15:41:19 +00:00
Home Assistant Version Control 4f32afd8b2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-14 15:32:21 +00:00
Home Assistant Version Control 00c17af336 3 files 2026-09-14 15:32:11 +00:00
Home Assistant Version Control e491da5fca .ha_mcp/logs/mcp_usage.jsonl 2026-09-14 15:25:48 +00:00
Home Assistant Version Control f12c66687a .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-14 15:24:46 +00:00
Home Assistant Version Control 68581cabd3 .ha_mcp/logs/mcp_usage.jsonl 2026-09-14 15:24:16 +00:00
Home Assistant Version Control 7a344cacaa .ha_mcp/logs/mcp_usage.jsonl 2026-09-14 15:22:10 +00:00
Home Assistant Version Control 9bf2fb8d68 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-14 15:21:42 +00:00
Home Assistant Version Control fa2d3c3ff1 zigbee2mqtt/state.json 2026-09-14 14:57:56 +00:00
Home Assistant Version Control bd8280defe 186 files 2026-09-14 12:56:59 +00:00
Home Assistant Version Control 6be1e92941 zigbee2mqtt/state.json 2026-09-14 12:39:18 +00:00
Home Assistant Version Control d1a7bc6c0e zigbee2mqtt/state.json 2026-09-14 12:16:11 +00:00
Home Assistant Version Control b4a798eb24 zigbee2mqtt/state.json 2026-09-14 12:04:40 +00:00
Home Assistant Version Control cee4969141 zigbee2mqtt/state.json 2026-09-14 11:28:37 +00:00
Home Assistant Version Control 88a00de719 zigbee2mqtt/state.json 2026-09-14 11:14:49 +00:00
Home Assistant Version Control 1ca42785a4 zigbee2mqtt/state.json 2026-09-14 10:55:27 +00:00
Home Assistant Version Control e11417ae6a zigbee2mqtt/state.json 2026-09-14 10:41:05 +00:00
Home Assistant Version Control 13d8df2362 zigbee2mqtt/state.json 2026-09-14 10:39:16 +00:00
Home Assistant Version Control 322bd553e1 zigbee2mqtt/state.json 2026-09-14 08:52:10 +00:00
Home Assistant Version Control ef429fdaad zigbee2mqtt/state.json 2026-09-14 08:39:13 +00:00
Home Assistant Version Control 39a0ae82fc zigbee2mqtt/state.json 2026-09-14 08:13:27 +00:00
Home Assistant Version Control 32bd42a8c9 zigbee2mqtt/state.json 2026-09-14 07:47:44 +00:00
Home Assistant Version Control ffe7e830c0 zigbee2mqtt/state.json 2026-09-14 06:40:32 +00:00
Home Assistant Version Control ffbf82307b .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-14 06:39:14 +00:00
Home Assistant Version Control 741725f907 zigbee2mqtt/state.json 2026-09-14 05:56:07 +00:00
Home Assistant Version Control acef490fe5 zigbee2mqtt/state.json 2026-09-14 05:21:13 +00:00
Home Assistant Version Control 2502d099a8 zigbee2mqtt/state.json 2026-09-14 04:47:06 +00:00
Home Assistant Version Control b8dc38dbe2 zigbee2mqtt/state.json 2026-09-14 04:39:12 +00:00
Home Assistant Version Control c395668de6 zigbee2mqtt/state.json 2026-09-14 02:39:11 +00:00
Home Assistant Version Control 0437f5e54e zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-14 02:29:42 +00:00
Home Assistant Version Control cc53422b6d zigbee2mqtt/state.json 2026-09-14 00:39:12 +00:00
Home Assistant Version Control 5b5a3963b2 zigbee2mqtt/state.json 2026-09-14 00:03:50 +00:00
Home Assistant Version Control 5591e81e92 zigbee2mqtt/state.json 2026-09-13 23:31:08 +00:00
Home Assistant Version Control 688db5c3ae zigbee2mqtt/state.json 2026-09-13 22:53:24 +00:00
Home Assistant Version Control ccf1de5dc1 zigbee2mqtt/state.json 2026-09-13 22:39:11 +00:00
Home Assistant Version Control 0307b1228b zigbee2mqtt/state.json 2026-09-13 22:02:03 +00:00
Home Assistant Version Control 6acee12747 zigbee2mqtt/state.json 2026-09-13 21:22:03 +00:00
Home Assistant Version Control 1b4f5f68c6 278 files 2026-09-13 20:38:58 +00:00
Home Assistant Version Control d7a0a08372 42 files 2026-09-13 20:31:15 +00:00
Home Assistant Version Control 8228943800 zigbee2mqtt/state.json 2026-09-13 20:22:25 +00:00
Home Assistant Version Control d631eb778d .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-13 20:10:46 +00:00
Home Assistant Version Control e6e9048a92 zigbee2mqtt/state.json 2026-09-13 18:48:47 +00:00
Home Assistant Version Control 4c70c32797 zigbee2mqtt/state.json 2026-09-13 18:24:14 +00:00
Home Assistant Version Control 238297140b zigbee2mqtt/state.json 2026-09-13 18:10:45 +00:00
Home Assistant Version Control 81f0bad788 zigbee2mqtt/state.json 2026-09-13 17:36:25 +00:00
Home Assistant Version Control 830801b258 zigbee2mqtt/state.json 2026-09-13 17:13:58 +00:00
Home Assistant Version Control 0e7a9171cb zigbee2mqtt/state.json 2026-09-13 17:00:21 +00:00
Home Assistant Version Control f3dcc00a95 zigbee2mqtt/state.json 2026-09-13 16:10:42 +00:00
Home Assistant Version Control 84b8e9d9bd .storage/powercalc_profiles/library.json 2026-09-13 16:06:40 +00:00
Home Assistant Version Control 1d9736ba09 zigbee2mqtt/state.json 2026-09-13 16:06:16 +00:00
Home Assistant Version Control 336676ed60 zigbee2mqtt/state.json 2026-09-13 15:42:15 +00:00
Home Assistant Version Control e37a090373 zigbee2mqtt/state.json 2026-09-13 15:14:29 +00:00
Home Assistant Version Control 84740751c7 zigbee2mqtt/state.json 2026-09-13 15:14:05 +00:00
Home Assistant Version Control 3378802f6b zigbee2mqtt/state.json 2026-09-13 14:27:28 +00:00
Home Assistant Version Control 697b536c24 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-13 14:10:43 +00:00
Home Assistant Version Control f1d8511d5c zigbee2mqtt/state.json 2026-09-13 14:02:56 +00:00
Home Assistant Version Control 2b6ec581cd zigbee2mqtt/state.json 2026-09-13 12:57:54 +00:00
Home Assistant Version Control 9bfd09fd4e zigbee2mqtt/state.json 2026-09-13 12:36:31 +00:00
Home Assistant Version Control 3dc53e2b53 9 files 2026-09-13 12:10:42 +00:00
Home Assistant Version Control e0c465f310 zigbee2mqtt/state.json 2026-09-13 10:18:25 +00:00
Home Assistant Version Control 90f41ff838 zigbee2mqtt/state.json 2026-09-13 10:10:40 +00:00
Home Assistant Version Control bb7bc6abdd zigbee2mqtt/state.json 2026-09-13 09:48:19 +00:00
Home Assistant Version Control 2fe1e87914 zigbee2mqtt/state.json 2026-09-13 09:01:47 +00:00
Home Assistant Version Control 94d20593d7 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-13 08:10:41 +00:00
Home Assistant Version Control 58632631de zigbee2mqtt/state.json 2026-09-13 06:51:36 +00:00
Home Assistant Version Control d367efe482 zigbee2mqtt/state.json 2026-09-13 06:19:35 +00:00
Home Assistant Version Control cabe23fca6 zigbee2mqtt/state.json 2026-09-13 06:10:40 +00:00
Home Assistant Version Control 878700ed54 zigbee2mqtt/state.json 2026-09-13 04:10:38 +00:00
Home Assistant Version Control 8750320277 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-13 02:29:44 +00:00
Home Assistant Version Control 81762b24de zigbee2mqtt/state.json 2026-09-13 02:10:37 +00:00
Home Assistant Version Control 71f2e26011 zigbee2mqtt/state.json 2026-09-13 01:18:28 +00:00
Home Assistant Version Control de1f71ae1d zigbee2mqtt/state.json 2026-09-13 00:10:36 +00:00
Home Assistant Version Control a4203e5def zigbee2mqtt/state.json 2026-09-12 23:35:24 +00:00
Home Assistant Version Control 2cec2b207b zigbee2mqtt/state.json 2026-09-12 22:46:13 +00:00
Home Assistant Version Control 61c5255d25 zigbee2mqtt/state.json 2026-09-12 22:10:37 +00:00
Home Assistant Version Control ce06394d49 zigbee2mqtt/state.json 2026-09-12 21:22:16 +00:00
Home Assistant Version Control 426dba437a zigbee2mqtt/state.json 2026-09-12 20:10:36 +00:00
Home Assistant Version Control 5e9e704913 zigbee2mqtt/state.json 2026-09-12 18:10:35 +00:00
Home Assistant Version Control 0509c1b44f zigbee2mqtt/state.json 2026-09-12 17:40:11 +00:00
Home Assistant Version Control 7081c22d18 zigbee2mqtt/state.json 2026-09-12 16:53:25 +00:00
Home Assistant Version Control 72bd49a1ad zigbee2mqtt/state.json 2026-09-12 16:10:34 +00:00
Home Assistant Version Control ea81166152 zigbee2mqtt/state.json 2026-09-12 14:10:34 +00:00
Home Assistant Version Control 8482b3b44e zigbee2mqtt/state.json 2026-09-12 12:44:29 +00:00
Home Assistant Version Control 993c21c472 zigbee2mqtt/state.json 2026-09-12 12:10:33 +00:00
Home Assistant Version Control 725ad86746 zigbee2mqtt/state.json 2026-09-12 11:54:32 +00:00
Home Assistant Version Control 5787384498 zigbee2mqtt/state.json 2026-09-12 11:54:06 +00:00
Home Assistant Version Control a4694d0b00 zigbee2mqtt/state.json 2026-09-12 10:30:13 +00:00
Home Assistant Version Control 8168e47a5b zigbee2mqtt/state.json 2026-09-12 10:10:34 +00:00
Home Assistant Version Control 852def2aeb zigbee2mqtt/state.json 2026-09-12 09:58:03 +00:00
Home Assistant Version Control 739cf0e8c1 zigbee2mqtt/state.json 2026-09-12 09:18:47 +00:00
Home Assistant Version Control 30e2934cc1 zigbee2mqtt/state.json 2026-09-12 08:24:37 +00:00
Home Assistant Version Control 767073710f zigbee2mqtt/state.json 2026-09-12 08:24:12 +00:00
Home Assistant Version Control 3ab18f7801 zigbee2mqtt/state.json 2026-09-12 08:10:32 +00:00
Home Assistant Version Control 2693232971 zigbee2mqtt/state.json 2026-09-12 07:05:58 +00:00
Home Assistant Version Control 786b918f74 zigbee2mqtt/state.json 2026-09-12 06:36:23 +00:00
Home Assistant Version Control 6defbcc7bc zigbee2mqtt/state.json 2026-09-12 06:10:33 +00:00
Home Assistant Version Control 25e027f48f zigbee2mqtt/state.json 2026-09-12 05:05:47 +00:00
Home Assistant Version Control 6dfcf67421 zigbee2mqtt/state.json 2026-09-12 04:10:30 +00:00
Home Assistant Version Control 40522ad611 zigbee2mqtt/state.json 2026-09-12 04:07:32 +00:00
Home Assistant Version Control 991748c924 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-12 02:29:42 +00:00
Home Assistant Version Control 76c756a41b zigbee2mqtt/state.json 2026-09-12 02:17:50 +00:00
Home Assistant Version Control d7e04162ed zigbee2mqtt/state.json 2026-09-12 02:10:29 +00:00
Home Assistant Version Control 3ba0ca9664 zigbee2mqtt/state.json 2026-09-12 00:22:32 +00:00
Home Assistant Version Control 15f9ef3a24 zigbee2mqtt/state.json 2026-09-12 00:10:30 +00:00
Home Assistant Version Control 2d766f58a9 zigbee2mqtt/state.json 2026-09-11 23:40:14 +00:00
Home Assistant Version Control ff268ff972 zigbee2mqtt/state.json 2026-09-11 22:35:02 +00:00
Home Assistant Version Control e5e1f1f19e zigbee2mqtt/state.json 2026-09-11 22:19:17 +00:00
Home Assistant Version Control 920a88b028 zigbee2mqtt/state.json 2026-09-11 22:10:29 +00:00
Home Assistant Version Control b5f03dc4b5 zigbee2mqtt/state.json 2026-09-11 21:58:40 +00:00
Home Assistant Version Control a9b187d196 zigbee2mqtt/state.json 2026-09-11 21:08:13 +00:00
Home Assistant Version Control 0a59a3761d zigbee2mqtt/state.json 2026-09-11 20:47:30 +00:00
Home Assistant Version Control 914f4e5a59 zigbee2mqtt/state.json 2026-09-11 20:40:19 +00:00
Home Assistant Version Control 19cde2960f zigbee2mqtt/state.json 2026-09-11 20:32:35 +00:00
Home Assistant Version Control e510e87e53 zigbee2mqtt/state.json 2026-09-11 20:15:08 +00:00
Home Assistant Version Control 0306db3acc zigbee2mqtt/state.json 2026-09-11 20:10:27 +00:00
Home Assistant Version Control 60c0750e22 zigbee2mqtt/state.json 2026-09-11 20:00:25 +00:00
Home Assistant Version Control a3e7199253 zigbee2mqtt/state.json 2026-09-11 19:45:18 +00:00
Home Assistant Version Control d56bcba816 zigbee2mqtt/state.json 2026-09-11 18:10:26 +00:00
Home Assistant Version Control b7dc1e8445 zigbee2mqtt/state.json 2026-09-11 16:10:27 +00:00
Home Assistant Version Control dfb5f32320 zigbee2mqtt/state.json 2026-09-11 15:16:58 +00:00
Home Assistant Version Control 66ad3bbeb9 zigbee2mqtt/state.json 2026-09-11 14:10:26 +00:00
Home Assistant Version Control fe818444d7 zigbee2mqtt/state.json 2026-09-11 13:10:28 +00:00
Home Assistant Version Control 5d4cf0b9a9 zigbee2mqtt/state.json 2026-09-11 12:34:24 +00:00
Home Assistant Version Control a52f5fd367 zigbee2mqtt/state.json 2026-09-11 12:33:58 +00:00
Home Assistant Version Control 8769f3b12b 200 files 2026-09-11 12:11:18 +00:00
Home Assistant Version Control ff4156dc89 11 files 2026-09-11 12:05:04 +00:00
Home Assistant Version Control f6b9dc47d6 zigbee2mqtt/state.json 2026-09-11 11:54:26 +00:00
Home Assistant Version Control a5c1f7e8be zigbee2mqtt/state.json 2026-09-11 11:46:32 +00:00
Home Assistant Version Control 4b0ea784b7 zigbee2mqtt/state.json 2026-09-11 11:37:15 +00:00
Home Assistant Version Control c875aec36a zigbee2mqtt/state.json 2026-09-11 11:17:14 +00:00
Home Assistant Version Control 64796b4a9f zigbee2mqtt/state.json 2026-09-11 10:52:16 +00:00
Home Assistant Version Control 778839cde1 zigbee2mqtt/state.json 2026-09-11 10:39:48 +00:00
Home Assistant Version Control 17afcb0942 zigbee2mqtt/state.json 2026-09-11 10:13:56 +00:00
Home Assistant Version Control 331a38b556 zigbee2mqtt/state.json 2026-09-11 09:46:31 +00:00
Home Assistant Version Control 57c14d99c6 zigbee2mqtt/state.json 2026-09-11 08:54:31 +00:00
Home Assistant Version Control 2a118a127f zigbee2mqtt/state.json 2026-09-11 08:29:54 +00:00
Home Assistant Version Control e3d72a26f8 zigbee2mqtt/state.json 2026-09-11 08:08:27 +00:00
Home Assistant Version Control c8f3a64a94 zigbee2mqtt/state.json 2026-09-11 07:46:17 +00:00
Home Assistant Version Control a9d12a253c zigbee2mqtt/state.json 2026-09-11 06:56:05 +00:00
Home Assistant Version Control bd6f87d2b2 zigbee2mqtt/state.json 2026-09-11 06:19:06 +00:00
Home Assistant Version Control 94deeba819 zigbee2mqtt/state.json 2026-09-11 05:49:47 +00:00
Home Assistant Version Control af4c168f60 zigbee2mqtt/state.json 2026-09-11 05:46:30 +00:00
Home Assistant Version Control f41fe17276 zigbee2mqtt/state.json 2026-09-11 04:56:37 +00:00
Home Assistant Version Control f528dbafe0 zigbee2mqtt/state.json 2026-09-11 04:34:26 +00:00
Home Assistant Version Control ef2e603712 zigbee2mqtt/state.json 2026-09-11 03:46:29 +00:00
Home Assistant Version Control 6e99c966b5 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-11 02:29:42 +00:00
Home Assistant Version Control 968804d715 zigbee2mqtt/state.json 2026-09-11 01:46:28 +00:00
Home Assistant Version Control 60537afec2 zigbee2mqtt/state.json 2026-09-10 23:46:29 +00:00
Home Assistant Version Control 8844131cd0 zigbee2mqtt/state.json 2026-09-10 23:25:15 +00:00
Home Assistant Version Control febc2f5689 zigbee2mqtt/state.json 2026-09-10 23:12:11 +00:00
Home Assistant Version Control 8a4936e4fa zigbee2mqtt/state.json 2026-09-10 21:46:27 +00:00
Home Assistant Version Control 5b73d0cac5 zigbee2mqtt/state.json 2026-09-10 21:37:15 +00:00
Home Assistant Version Control 3d39dbe8be zigbee2mqtt/state.json 2026-09-10 20:49:58 +00:00
Home Assistant Version Control c1e6f08bba zigbee2mqtt/state.json 2026-09-10 20:22:44 +00:00
Home Assistant Version Control 6f0e6ddd46 zigbee2mqtt/state.json 2026-09-10 19:46:26 +00:00
Home Assistant Version Control c67eb69dac zigbee2mqtt/state.json 2026-09-10 19:04:23 +00:00
Home Assistant Version Control a419f8c2cf zigbee2mqtt/state.json 2026-09-10 19:03:50 +00:00
Home Assistant Version Control 287ba4b004 zigbee2mqtt/state.json 2026-09-10 17:46:27 +00:00
Home Assistant Version Control cce2928aac zigbee2mqtt/state.json 2026-09-10 17:10:58 +00:00
Home Assistant Version Control da02257d43 zigbee2mqtt/state.json 2026-09-10 15:46:25 +00:00
Home Assistant Version Control 96460f1107 zigbee2mqtt/state.json 2026-09-10 13:46:26 +00:00
Home Assistant Version Control 2794f12e5f zigbee2mqtt/state.json 2026-09-10 12:14:51 +00:00
Home Assistant Version Control 525da0b9ed zigbee2mqtt/state.json 2026-09-10 11:46:25 +00:00
Home Assistant Version Control c42fc16763 zigbee2mqtt/state.json 2026-09-10 11:32:26 +00:00
Home Assistant Version Control 10b007ea5b zigbee2mqtt/state.json 2026-09-10 11:15:07 +00:00
Home Assistant Version Control f8574a7143 zigbee2mqtt/state.json 2026-09-10 11:06:39 +00:00
Home Assistant Version Control 3e5b9f3141 zigbee2mqtt/state.json 2026-09-10 10:34:25 +00:00
Home Assistant Version Control 178bcd08fa zigbee2mqtt/state.json 2026-09-10 09:46:26 +00:00
Home Assistant Version Control 6609579a0e zigbee2mqtt/state.json 2026-09-10 08:21:32 +00:00
Home Assistant Version Control d42440ca25 zigbee2mqtt/state.json 2026-09-10 07:46:24 +00:00
Home Assistant Version Control 8d6c634ab0 zigbee2mqtt/state.json 2026-09-10 07:32:48 +00:00
Home Assistant Version Control 27a0f9c4f7 zigbee2mqtt/state.json 2026-09-10 07:05:04 +00:00
Home Assistant Version Control 7aba1e70ee zigbee2mqtt/state.json 2026-09-10 06:17:19 +00:00
Home Assistant Version Control 6238995d59 zigbee2mqtt/state.json 2026-09-10 05:46:23 +00:00
Home Assistant Version Control a6c0fd0bc5 zigbee2mqtt/state.json 2026-09-10 05:42:37 +00:00
Home Assistant Version Control 58f858994c zigbee2mqtt/state.json 2026-09-10 04:56:10 +00:00
Home Assistant Version Control 60ac84cb48 zigbee2mqtt/state.json 2026-09-10 03:46:24 +00:00
Home Assistant Version Control d301dddb8e zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-10 02:29:43 +00:00
Home Assistant Version Control df5f2ca897 zigbee2mqtt/state.json 2026-09-10 01:46:23 +00:00
Home Assistant Version Control 6e0b6453a1 zigbee2mqtt/state.json 2026-09-09 23:46:19 +00:00
Home Assistant Version Control b93c1254b6 zigbee2mqtt/state.json 2026-09-09 23:38:35 +00:00
Home Assistant Version Control d2d5593864 zigbee2mqtt/state.json 2026-09-09 23:10:12 +00:00
Home Assistant Version Control ade2aecfe9 zigbee2mqtt/state.json 2026-09-09 22:58:40 +00:00
Home Assistant Version Control ed6034b678 zigbee2mqtt/state.json 2026-09-09 22:38:43 +00:00
Home Assistant Version Control 9031a41340 zigbee2mqtt/state.json 2026-09-09 21:46:20 +00:00
Home Assistant Version Control a1c17b2637 zigbee2mqtt/state.json 2026-09-09 21:23:51 +00:00
Home Assistant Version Control 3efbc3a4a2 zigbee2mqtt/state.json 2026-09-09 21:07:02 +00:00
Home Assistant Version Control 9853050fe8 zigbee2mqtt/state.json 2026-09-09 20:58:19 +00:00
Home Assistant Version Control b2ab2170ac zigbee2mqtt/state.json 2026-09-09 20:32:56 +00:00
Home Assistant Version Control b4d697cd69 zigbee2mqtt/state.json 2026-09-09 20:23:27 +00:00
Home Assistant Version Control 96a7dded45 zigbee2mqtt/state.json 2026-09-09 20:04:56 +00:00
Home Assistant Version Control 47c7c25164 zigbee2mqtt/state.json 2026-09-09 19:45:53 +00:00
Home Assistant Version Control b99535b2ee zigbee2mqtt/state.json 2026-09-09 19:39:41 +00:00
Home Assistant Version Control 6bf1f4e6e5 zigbee2mqtt/state.json 2026-09-09 19:15:37 +00:00
Home Assistant Version Control 94006b25bb zigbee2mqtt/state.json 2026-09-09 18:57:32 +00:00
Home Assistant Version Control 54ed8c67bc zigbee2mqtt/state.json 2026-09-09 18:07:15 +00:00
Home Assistant Version Control 8f1cfeee5f zigbee2mqtt/state.json 2026-09-09 17:46:18 +00:00
Home Assistant Version Control a7c9628c6d zigbee2mqtt/state.json 2026-09-09 17:29:21 +00:00
Home Assistant Version Control 726734aec1 zigbee2mqtt/state.json 2026-09-09 15:46:17 +00:00
Home Assistant Version Control f1313a8faa zigbee2mqtt/state.json 2026-09-09 15:00:42 +00:00
Home Assistant Version Control 6aef4798f8 zigbee2mqtt/state.json 2026-09-09 14:17:35 +00:00
Home Assistant Version Control 0cffa33180 .storage/lovelace_resources 2026-09-09 14:11:01 +00:00
Home Assistant Version Control d3efef8a16 5 files 2026-09-09 14:10:49 +00:00
Home Assistant Version Control 548cc015e6 zigbee2mqtt/state.json 2026-09-09 13:46:13 +00:00
Home Assistant Version Control 26b169cbec .storage/lovelace_resources 2026-09-09 13:42:39 +00:00
Home Assistant Version Control 636ad8fc50 .ha_run.lock 2026-09-09 13:42:09 +00:00
Home Assistant Version Control 3f5a84f2e5 14 files 2026-09-09 13:41:09 +00:00
Home Assistant Version Control 06228b4138 zigbee2mqtt/state.json 2026-09-09 12:54:42 +00:00
Home Assistant Version Control c309296da9 zigbee2mqtt/state.json 2026-09-09 12:35:59 +00:00
Home Assistant Version Control 26b3b72d66 zigbee2mqtt/state.json 2026-09-09 12:28:39 +00:00
Home Assistant Version Control c45ca3279c zigbee2mqtt/state.json 2026-09-09 12:11:34 +00:00
Home Assistant Version Control 460ba05400 zigbee2mqtt/state.json 2026-09-09 11:27:13 +00:00
Home Assistant Version Control 133e25e611 zigbee2mqtt/state.json 2026-09-09 11:15:06 +00:00
Home Assistant Version Control 2601ad7821 zigbee2mqtt/state.json 2026-09-09 10:49:01 +00:00
Home Assistant Version Control f01a0e1f6b zigbee2mqtt/state.json 2026-09-09 10:35:58 +00:00
Home Assistant Version Control 0ec2e1685c zigbee2mqtt/state.json 2026-09-09 09:08:35 +00:00
Home Assistant Version Control 0a328e4dc7 zigbee2mqtt/state.json 2026-09-09 08:34:43 +00:00
Home Assistant Version Control 02f00a1d45 zigbee2mqtt/state.json 2026-09-09 08:15:55 +00:00
Home Assistant Version Control 1db25d9f08 zigbee2mqtt/state.json 2026-09-09 06:35:57 +00:00
Home Assistant Version Control 5fbd834c48 zigbee2mqtt/state.json 2026-09-09 04:35:56 +00:00
Home Assistant Version Control ace0822b98 zigbee2mqtt/state.json 2026-09-09 02:35:57 +00:00
Home Assistant Version Control 9dcad973c6 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-09 02:29:43 +00:00
Home Assistant Version Control e06ae00ae6 zigbee2mqtt/state.json 2026-09-09 00:35:56 +00:00
Home Assistant Version Control 5d8759b455 zigbee2mqtt/state.json 2026-09-09 00:14:13 +00:00
Home Assistant Version Control a278836bcb zigbee2mqtt/state.json 2026-09-08 23:55:49 +00:00
Home Assistant Version Control c915d6519c zigbee2mqtt/state.json 2026-09-08 23:40:57 +00:00
Home Assistant Version Control 2245d3cd97 zigbee2mqtt/state.json 2026-09-08 23:13:19 +00:00
Home Assistant Version Control 80a52aa1ec zigbee2mqtt/state.json 2026-09-08 22:51:08 +00:00
Home Assistant Version Control 4ce41bca82 zigbee2mqtt/state.json 2026-09-08 22:35:53 +00:00
Home Assistant Version Control f8312c7fbe zigbee2mqtt/state.json 2026-09-08 22:18:10 +00:00
Home Assistant Version Control 822a53c064 zigbee2mqtt/state.json 2026-09-08 22:02:11 +00:00
Home Assistant Version Control 80ba536d26 zigbee2mqtt/state.json 2026-09-08 21:36:51 +00:00
Home Assistant Version Control 408d97ff9a zigbee2mqtt/state.json 2026-09-08 21:26:25 +00:00
Home Assistant Version Control 4018b0b918 zigbee2mqtt/state.json 2026-09-08 20:35:52 +00:00
Home Assistant Version Control ae9e300479 zigbee2mqtt/state.json 2026-09-08 20:25:33 +00:00
Home Assistant Version Control 5e44769c83 zigbee2mqtt/state.json 2026-09-08 20:09:38 +00:00
Home Assistant Version Control 9a4901194c zigbee2mqtt/state.json 2026-09-08 20:09:04 +00:00
Home Assistant Version Control 70e8f7185c zigbee2mqtt/state.json 2026-09-08 19:02:02 +00:00
Home Assistant Version Control 41a97534b9 zigbee2mqtt/state.json 2026-09-08 18:35:50 +00:00
Home Assistant Version Control 303886f212 189 files 2026-09-08 18:05:32 +00:00
Home Assistant Version Control 79fefc0a7c zigbee2mqtt/state.json 2026-09-08 18:02:01 +00:00
Home Assistant Version Control a49a866532 zigbee2mqtt/state.json 2026-09-08 16:51:56 +00:00
Home Assistant Version Control eab5030658 zigbee2mqtt/state.json 2026-09-08 16:35:49 +00:00
Home Assistant Version Control f4ba6ff818 zigbee2mqtt/state.json 2026-09-08 16:03:06 +00:00
Home Assistant Version Control 0d45bc1fe2 zigbee2mqtt/state.json 2026-09-08 15:03:29 +00:00
Home Assistant Version Control 74a04c64e5 zigbee2mqtt/state.json 2026-09-08 14:35:48 +00:00
Home Assistant Version Control 8709211b12 zigbee2mqtt/state.json 2026-09-08 13:52:57 +00:00
Home Assistant Version Control f2672a97cc zigbee2mqtt/state.json 2026-09-08 13:07:25 +00:00
Home Assistant Version Control eecbd3e9dd zigbee2mqtt/state.json 2026-09-08 12:35:45 +00:00
Home Assistant Version Control 8ce55b0afe zigbee2mqtt/state.json 2026-09-08 12:13:59 +00:00
Home Assistant Version Control fc119dc76d zigbee2mqtt/state.json 2026-09-08 11:56:56 +00:00
Home Assistant Version Control c7706d48a4 zigbee2mqtt/state.json 2026-09-08 11:35:09 +00:00
Home Assistant Version Control 99cf8ef77a zigbee2mqtt/state.json 2026-09-08 11:15:06 +00:00
Home Assistant Version Control e36b96ed14 zigbee2mqtt/state.json 2026-09-08 10:50:26 +00:00
Home Assistant Version Control f7e6a090d2 zigbee2mqtt/state.json 2026-09-08 10:47:52 +00:00
Home Assistant Version Control 23cc4022ed zigbee2mqtt/state.json 2026-09-08 10:35:43 +00:00
Home Assistant Version Control e419a35e95 zigbee2mqtt/state.json 2026-09-08 09:49:39 +00:00
Home Assistant Version Control 6c795d13e8 zigbee2mqtt/state.json 2026-09-08 09:11:30 +00:00
Home Assistant Version Control 6cc39d12ec zigbee2mqtt/state.json 2026-09-08 08:35:42 +00:00
Home Assistant Version Control 3e45e425ca zigbee2mqtt/state.json 2026-09-08 08:25:50 +00:00
Home Assistant Version Control ebb73652bd zigbee2mqtt/state.json 2026-09-08 06:57:12 +00:00
Home Assistant Version Control bcfa86f327 zigbee2mqtt/state.json 2026-09-08 06:35:43 +00:00
Home Assistant Version Control 8c316d8ded zigbee2mqtt/state.json 2026-09-08 06:33:15 +00:00
Home Assistant Version Control 11b0860203 zigbee2mqtt/state.json 2026-09-08 04:35:42 +00:00
Home Assistant Version Control f690f624b4 zigbee2mqtt/state.json 2026-09-08 02:35:40 +00:00
Home Assistant Version Control d49fc92ecb zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-08 02:29:42 +00:00
Home Assistant Version Control 21938d5d2d zigbee2mqtt/state.json 2026-09-08 00:35:41 +00:00
Home Assistant Version Control c1e3cfbd71 zigbee2mqtt/state.json 2026-09-07 23:39:50 +00:00
Home Assistant Version Control 9c96b1ab28 zigbee2mqtt/state.json 2026-09-07 23:35:13 +00:00
Home Assistant Version Control eae56f8c4b zigbee2mqtt/state.json 2026-09-07 23:04:27 +00:00
Home Assistant Version Control b8cfb42f53 zigbee2mqtt/state.json 2026-09-07 22:55:31 +00:00
Home Assistant Version Control 6654fe7e2e zigbee2mqtt/state.json 2026-09-07 22:35:39 +00:00
Home Assistant Version Control 99378803c8 zigbee2mqtt/state.json 2026-09-07 22:22:56 +00:00
Home Assistant Version Control 6a66c17f95 zigbee2mqtt/state.json 2026-09-07 21:45:55 +00:00
Home Assistant Version Control c6ec659ff7 zigbee2mqtt/state.json 2026-09-07 21:27:11 +00:00
Home Assistant Version Control 1e986d6078 zigbee2mqtt/state.json 2026-09-07 20:54:20 +00:00
Home Assistant Version Control 285dd3ba3b zigbee2mqtt/state.json 2026-09-07 20:53:42 +00:00
Home Assistant Version Control 2561d435ab zigbee2mqtt/state.json 2026-09-07 20:48:12 +00:00
Home Assistant Version Control 8a59036312 zigbee2mqtt/state.json 2026-09-07 20:35:36 +00:00
Home Assistant Version Control 5546fd0646 zigbee2mqtt/state.json 2026-09-07 20:04:17 +00:00
Home Assistant Version Control 772b9bfe4c zigbee2mqtt/state.json 2026-09-07 19:41:49 +00:00
Home Assistant Version Control 09d6adfddc zigbee2mqtt/state.json 2026-09-07 19:13:37 +00:00
Home Assistant Version Control 3e07b7a63a zigbee2mqtt/state.json 2026-09-07 18:35:37 +00:00
Home Assistant Version Control 4d603e3b35 zigbee2mqtt/state.json 2026-09-07 18:29:13 +00:00
Home Assistant Version Control 65e6d1e3a5 zigbee2mqtt/state.json 2026-09-07 18:23:32 +00:00
Home Assistant Version Control 1db5d1fb7d zigbee2mqtt/state.json 2026-09-07 18:16:38 +00:00
Home Assistant Version Control 99e53eec18 zigbee2mqtt/state.json 2026-09-07 18:11:43 +00:00
Home Assistant Version Control 2702d4eb20 zigbee2mqtt/state.json 2026-09-07 18:06:51 +00:00
Home Assistant Version Control af0636aae9 zigbee2mqtt/state.json 2026-09-07 18:01:29 +00:00
Home Assistant Version Control f96a5dc818 zigbee2mqtt/state.json 2026-09-07 17:54:19 +00:00
Home Assistant Version Control 16a0f6cefa zigbee2mqtt/state.json 2026-09-07 17:51:15 +00:00
Home Assistant Version Control 12fddd20f3 zigbee2mqtt/state.json 2026-09-07 17:45:02 +00:00
Home Assistant Version Control 8c7c0aecbf zigbee2mqtt/state.json 2026-09-07 17:39:24 +00:00
Home Assistant Version Control a881cc2b1d zigbee2mqtt/state.json 2026-09-07 17:35:31 +00:00
Home Assistant Version Control 11d18fae78 zigbee2mqtt/state.json 2026-09-07 17:29:23 +00:00
Home Assistant Version Control e8d3bda371 zigbee2mqtt/state.json 2026-09-07 17:25:27 +00:00
Home Assistant Version Control 8b774f9b5a zigbee2mqtt/state.json 2026-09-07 17:19:19 +00:00
Home Assistant Version Control 5f9d4e19c7 zigbee2mqtt/state.json 2026-09-07 17:17:42 +00:00
Home Assistant Version Control 080e4e3690 zigbee2mqtt/state.json 2026-09-07 17:10:02 +00:00
Home Assistant Version Control eb0ba0f6a0 zigbee2mqtt/state.json 2026-09-07 17:05:08 +00:00
Home Assistant Version Control 61e5ef413d zigbee2mqtt/state.json 2026-09-07 16:59:39 +00:00
Home Assistant Version Control d90926d1cc zigbee2mqtt/state.json 2026-09-07 16:56:05 +00:00
Home Assistant Version Control f25ea96546 zigbee2mqtt/state.json 2026-09-07 16:49:24 +00:00
Home Assistant Version Control 41e7e0c255 zigbee2mqtt/state.json 2026-09-07 16:45:28 +00:00
Home Assistant Version Control 960a0c8c3b zigbee2mqtt/state.json 2026-09-07 16:35:36 +00:00
Home Assistant Version Control 2dddda8682 zigbee2mqtt/state.json 2026-09-07 16:30:08 +00:00
Home Assistant Version Control 461c2027c9 zigbee2mqtt/state.json 2026-09-07 16:24:59 +00:00
Home Assistant Version Control 329f3fc74d zigbee2mqtt/state.json 2026-09-07 16:21:55 +00:00
Home Assistant Version Control aae2cf7b3f zigbee2mqtt/state.json 2026-09-07 16:14:34 +00:00
Home Assistant Version Control 418a5ba355 zigbee2mqtt/state.json 2026-09-07 16:09:38 +00:00
Home Assistant Version Control 010fdc87d4 zigbee2mqtt/state.json 2026-09-07 16:01:50 +00:00
Home Assistant Version Control 78c4d8ecb0 zigbee2mqtt/state.json 2026-09-07 15:44:25 +00:00
Home Assistant Version Control b038a3616d zigbee2mqtt/state.json 2026-09-07 15:39:42 +00:00
Home Assistant Version Control 9727dfa774 zigbee2mqtt/state.json 2026-09-07 15:37:10 +00:00
Home Assistant Version Control 68042d0e14 zigbee2mqtt/state.json 2026-09-07 15:29:58 +00:00
Home Assistant Version Control 58416a669e zigbee2mqtt/state.json 2026-09-07 15:26:24 +00:00
Home Assistant Version Control c8b9e5ac52 zigbee2mqtt/state.json 2026-09-07 15:20:45 +00:00
Home Assistant Version Control 016df65f34 zigbee2mqtt/state.json 2026-09-07 15:18:39 +00:00
Home Assistant Version Control 2fa374885a .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.printer_stats 2026-09-07 15:14:08 +00:00
Home Assistant Version Control 2d97f39b88 .ha_mcp/logs/mcp_usage.jsonl 2026-09-07 15:13:21 +00:00
Home Assistant Version Control df75e4669a .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.printer_stats 2026-09-07 15:13:17 +00:00
Home Assistant Version Control 6bd5357764 3 files 2026-09-07 15:11:27 +00:00
Home Assistant Version Control cc25bdfaa6 .ha_mcp/logs/mcp_usage.jsonl 2026-09-07 15:07:20 +00:00
Home Assistant Version Control e6b1a90609 .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.printer_stats 2026-09-07 15:06:03 +00:00
Home Assistant Version Control aaf3d83de5 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-07 15:05:20 +00:00
Home Assistant Version Control 2890799d6a zigbee2mqtt/state.json 2026-09-07 15:03:56 +00:00
Home Assistant Version Control b2612f5bf7 zigbee2mqtt/state.json 2026-09-07 14:46:15 +00:00
Home Assistant Version Control 8c3a1a3b19 zigbee2mqtt/state.json 2026-09-07 14:35:34 +00:00
Home Assistant Version Control 5dd2360769 zigbee2mqtt/state.json 2026-09-07 14:28:32 +00:00
Home Assistant Version Control 79671a653d zigbee2mqtt/state.json 2026-09-07 13:46:14 +00:00
Home Assistant Version Control 5039e80f50 zigbee2mqtt/state.json 2026-09-07 13:02:41 +00:00
Home Assistant Version Control 14c974128d zigbee2mqtt/state.json 2026-09-07 12:35:31 +00:00
Home Assistant Version Control 68dda534d0 zigbee2mqtt/state.json 2026-09-07 12:13:10 +00:00
Home Assistant Version Control 4eb9c5bc04 zigbee2mqtt/state.json 2026-09-07 10:35:32 +00:00
Home Assistant Version Control 4947e332a0 zigbee2mqtt/state.json 2026-09-07 09:39:32 +00:00
Home Assistant Version Control b071b5faa1 zigbee2mqtt/state.json 2026-09-07 09:15:49 +00:00
Home Assistant Version Control fc3a73981b zigbee2mqtt/state.json 2026-09-07 08:35:31 +00:00
Home Assistant Version Control 37fe760cf9 zigbee2mqtt/state.json 2026-09-07 07:59:28 +00:00
Home Assistant Version Control 887c30a8dc zigbee2mqtt/state.json 2026-09-07 07:44:40 +00:00
Home Assistant Version Control 994df7bc94 zigbee2mqtt/state.json 2026-09-07 06:53:34 +00:00
Home Assistant Version Control ecf194217e zigbee2mqtt/state.json 2026-09-07 06:35:29 +00:00
Home Assistant Version Control c6febe4670 zigbee2mqtt/state.json 2026-09-07 04:35:30 +00:00
Home Assistant Version Control e4d7e2afe3 zigbee2mqtt/state.json 2026-09-07 02:35:29 +00:00
Home Assistant Version Control 3f8f0845a2 .storage/lovelace_resources 2026-09-07 02:31:49 +00:00
Home Assistant Version Control 2c3a28470b .storage/lovelace_resources 2026-09-07 02:31:21 +00:00
Home Assistant Version Control 1f643f06eb .HA_VERSION, .ha_run.lock 2026-09-07 02:31:02 +00:00
Home Assistant Version Control 95214c3cf7 11 files 2026-09-07 02:30:29 +00:00
Home Assistant Version Control ea4802bf92 .storage/lovelace.printer_stats 2026-09-06 17:00:48 +00:00
Home Assistant Version Control b555cc3193 zigbee2mqtt/state.json 2026-09-06 11:43:35 +00:00
Home Assistant Version Control 5a70871f22 zigbee2mqtt/state.json 2026-09-06 09:43:34 +00:00
Home Assistant Version Control 28e877dbb9 zigbee2mqtt/state.json 2026-09-06 08:46:59 +00:00
Home Assistant Version Control 9516def1ea zigbee2mqtt/state.json 2026-09-06 08:09:11 +00:00
Home Assistant Version Control ed92cb4cb9 zigbee2mqtt/state.json 2026-09-06 07:43:33 +00:00
Home Assistant Version Control 91116a5e59 zigbee2mqtt/state.json 2026-09-06 07:37:28 +00:00
Home Assistant Version Control 6ad0c0b152 zigbee2mqtt/state.json 2026-09-06 06:49:16 +00:00
Home Assistant Version Control 0c77805995 opencode/decisions.yaml 2026-09-06 06:29:03 +00:00
Home Assistant Version Control 1307020fdf opencode/decisions.yaml, zigbee2mqtt/state.json 2026-09-06 06:28:54 +00:00
Home Assistant Version Control 0290d1d268 opencode/decisions.yaml 2026-09-06 06:26:34 +00:00
Home Assistant Version Control 9f27facc27 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 06:25:28 +00:00
Home Assistant Version Control d4e65e293d .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 06:24:50 +00:00
Home Assistant Version Control 435232a437 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-06 06:24:22 +00:00
Home Assistant Version Control e5b789cb59 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 06:21:16 +00:00
Home Assistant Version Control 23f6da39a9 configuration.yaml, zigbee2mqtt/state.json 2026-09-06 06:21:04 +00:00
Home Assistant Version Control 279c4508a8 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 06:12:35 +00:00
Home Assistant Version Control 7d0e54148a .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 06:10:23 +00:00
Home Assistant Version Control befa14bab0 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-06 06:09:14 +00:00
Home Assistant Version Control 4ad19883d0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 06:04:27 +00:00
Home Assistant Version Control b5f8b978ec configuration.yaml, zigbee2mqtt/state.json 2026-09-06 06:04:11 +00:00
Home Assistant Version Control be56380d77 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-06 06:02:01 +00:00
Home Assistant Version Control ae0ce549b0 zigbee2mqtt/state.json 2026-09-06 05:43:34 +00:00
Home Assistant Version Control f26d576603 zigbee2mqtt/state.json 2026-09-06 05:25:37 +00:00
Home Assistant Version Control c66b575389 zigbee2mqtt/state.json 2026-09-06 05:05:04 +00:00
Home Assistant Version Control 5546ee93a7 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:59:31 +00:00
Home Assistant Version Control 21c0412da0 .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.printer_stats 2026-09-06 04:58:46 +00:00
Home Assistant Version Control e411230399 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:58:27 +00:00
Home Assistant Version Control 8b28f09bab configuration.yaml, zigbee2mqtt/state.json 2026-09-06 04:58:01 +00:00
Home Assistant Version Control 6315b9649a .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:56:41 +00:00
Home Assistant Version Control ae16fa59f0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:54:23 +00:00
Home Assistant Version Control fed5ba1848 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:54:09 +00:00
Home Assistant Version Control 09648e47c7 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:54:01 +00:00
Home Assistant Version Control ba6c656f90 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:53:49 +00:00
Home Assistant Version Control f648ccd951 .ha_mcp/logs/mcp_usage.jsonl 2026-09-06 04:53:39 +00:00
Home Assistant Version Control 06be58c2f4 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-06 04:53:31 +00:00
Home Assistant Version Control 6e28896f5b zigbee2mqtt/state.json 2026-09-06 03:51:04 +00:00
Home Assistant Version Control 7dc1951d76 zigbee2mqtt/state.json 2026-09-06 03:43:33 +00:00
Home Assistant Version Control 0b957df88f zigbee2mqtt/state.json 2026-09-06 02:12:54 +00:00
Home Assistant Version Control 9cc33b0f22 zigbee2mqtt/state.json 2026-09-06 01:43:33 +00:00
Home Assistant Version Control 9a72cd2f1a zigbee2mqtt/state.json 2026-09-05 23:43:32 +00:00
Home Assistant Version Control 3552c61bb9 zigbee2mqtt/state.json 2026-09-05 22:51:14 +00:00
Home Assistant Version Control 3c88e83f6e zigbee2mqtt/state.json 2026-09-05 22:37:11 +00:00
Home Assistant Version Control c9e0df2533 zigbee2mqtt/state.json 2026-09-05 22:16:16 +00:00
Home Assistant Version Control 5435bba4da zigbee2mqtt/state.json 2026-09-05 22:07:33 +00:00
Home Assistant Version Control ff9bc8a670 zigbee2mqtt/state.json 2026-09-05 21:53:44 +00:00
Home Assistant Version Control 08c081faef zigbee2mqtt/state.json 2026-09-05 21:43:31 +00:00
Home Assistant Version Control 929e61c156 zigbee2mqtt/state.json 2026-09-05 21:07:51 +00:00
Home Assistant Version Control 4690cc587d zigbee2mqtt/state.json 2026-09-05 19:43:30 +00:00
Home Assistant Version Control 666bba5df2 zigbee2mqtt/state.json 2026-09-05 19:36:12 +00:00
Home Assistant Version Control 368496b6bc zigbee2mqtt/state.json 2026-09-05 19:13:31 +00:00
Home Assistant Version Control 02c3aef6d1 zigbee2mqtt/state.json 2026-09-05 17:43:29 +00:00
Home Assistant Version Control b6dbd9ae06 zigbee2mqtt/state.json 2026-09-05 17:36:45 +00:00
Home Assistant Version Control a1eaa1db8a zigbee2mqtt/state.json 2026-09-05 16:36:19 +00:00
Home Assistant Version Control 22799ccfbd zigbee2mqtt/state.json 2026-09-05 15:53:45 +00:00
Home Assistant Version Control 204373dccd .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-05 15:43:26 +00:00
Home Assistant Version Control 0a3523d39d zigbee2mqtt/state.json 2026-09-05 15:33:20 +00:00
Home Assistant Version Control 38c76453de zigbee2mqtt/state.json 2026-09-05 14:54:31 +00:00
Home Assistant Version Control 31ea65eaae zigbee2mqtt/state.json 2026-09-05 14:29:20 +00:00
Home Assistant Version Control aafb45f591 zigbee2mqtt/state.json 2026-09-05 13:59:34 +00:00
Home Assistant Version Control 4854edaa83 zigbee2mqtt/state.json 2026-09-05 13:43:27 +00:00
Home Assistant Version Control de17fc851f zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-05 13:38:11 +00:00
Home Assistant Version Control e9dde56f9d zigbee2mqtt/state.json 2026-09-05 13:28:02 +00:00
Home Assistant Version Control bedaa416a6 zigbee2mqtt/state.json 2026-09-05 13:06:33 +00:00
Home Assistant Version Control bd23b5ac3a zigbee2mqtt/state.json 2026-09-05 12:36:37 +00:00
Home Assistant Version Control 105f9505eb zigbee2mqtt/state.json 2026-09-05 12:14:00 +00:00
Home Assistant Version Control 2a364d1745 zigbee2mqtt/state.json 2026-09-05 11:52:11 +00:00
Home Assistant Version Control 89820ab8a2 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-05 11:43:26 +00:00
Home Assistant Version Control 1ba900e939 zigbee2mqtt/state.json 2026-09-05 11:36:27 +00:00
Home Assistant Version Control 12f4108d07 zigbee2mqtt/state.json 2026-09-05 11:24:25 +00:00
Home Assistant Version Control 318763a00a zigbee2mqtt/state.json 2026-09-05 11:19:48 +00:00
Home Assistant Version Control eb8f03e146 zigbee2mqtt/state.json 2026-09-05 10:29:29 +00:00
Home Assistant Version Control e5ccff28ad zigbee2mqtt/state.json 2026-09-05 09:43:25 +00:00
Home Assistant Version Control c36b2515e8 zigbee2mqtt/state.json 2026-09-05 09:25:24 +00:00
Home Assistant Version Control 8f712dd33a zigbee2mqtt/state.json 2026-09-05 09:09:11 +00:00
Home Assistant Version Control 06c9f262b4 zigbee2mqtt/state.json 2026-09-05 08:43:15 +00:00
Home Assistant Version Control a264ed2533 zigbee2mqtt/state.json 2026-09-05 07:59:06 +00:00
Home Assistant Version Control 02eb217aa9 zigbee2mqtt/state.json 2026-09-05 07:43:26 +00:00
Home Assistant Version Control 380c9c5560 zigbee2mqtt/state.json 2026-09-05 07:05:28 +00:00
Home Assistant Version Control 2b4cd06620 zigbee2mqtt/state.json 2026-09-05 06:18:28 +00:00
Home Assistant Version Control f57dee0f7f zigbee2mqtt/state.json 2026-09-05 05:43:25 +00:00
Home Assistant Version Control 43574573b1 zigbee2mqtt/state.json 2026-09-05 03:43:24 +00:00
Home Assistant Version Control 551c7a2561 zigbee2mqtt/state.json 2026-09-05 01:43:24 +00:00
Home Assistant Version Control 32cb415cf9 zigbee2mqtt/state.json 2026-09-05 01:38:01 +00:00
Home Assistant Version Control 391f10e3c5 zigbee2mqtt/state.json 2026-09-05 01:24:21 +00:00
Home Assistant Version Control 2b041bb551 zigbee2mqtt/state.json 2026-09-05 01:05:42 +00:00
Home Assistant Version Control 94e3c655a4 zigbee2mqtt/state.json 2026-09-05 00:09:49 +00:00
Home Assistant Version Control 55a4fa5341 zigbee2mqtt/state.json 2026-09-04 23:43:21 +00:00
Home Assistant Version Control 4aa01f21bd zigbee2mqtt/state.json 2026-09-04 23:16:39 +00:00
Home Assistant Version Control deaa9f5382 zigbee2mqtt/state.json 2026-09-04 22:47:58 +00:00
Home Assistant Version Control e42ad7734f zigbee2mqtt/state.json 2026-09-04 21:43:20 +00:00
Home Assistant Version Control fe27d79bc9 zigbee2mqtt/state.json 2026-09-04 21:28:14 +00:00
Home Assistant Version Control 7312388df0 zigbee2mqtt/state.json 2026-09-04 21:09:16 +00:00
Home Assistant Version Control b9dd5e789d zigbee2mqtt/state.json 2026-09-04 21:03:20 +00:00
Home Assistant Version Control f21cfcadfe zigbee2mqtt/state.json 2026-09-04 20:24:21 +00:00
Home Assistant Version Control 3149c3d895 zigbee2mqtt/state.json 2026-09-04 20:10:09 +00:00
Home Assistant Version Control b296b970ee zigbee2mqtt/state.json 2026-09-04 19:43:21 +00:00
Home Assistant Version Control a0d4d0c456 zigbee2mqtt/state.json 2026-09-04 19:07:17 +00:00
Home Assistant Version Control a069b1b357 .ha_mcp/logs/mcp_usage.jsonl 2026-09-04 18:03:51 +00:00
Home Assistant Version Control 7846fc20f6 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-04 18:03:25 +00:00
Home Assistant Version Control 2ca2d59a97 zigbee2mqtt/state.json 2026-09-04 18:02:06 +00:00
Home Assistant Version Control f497ca508b .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-04 17:43:20 +00:00
Home Assistant Version Control cb31935a0e zigbee2mqtt/state.json 2026-09-04 17:37:46 +00:00
Home Assistant Version Control 2b8ea604ce zigbee2mqtt/state.json 2026-09-04 17:36:14 +00:00
Home Assistant Version Control 6b8c35770e zigbee2mqtt/state.json 2026-09-04 17:02:54 +00:00
Home Assistant Version Control bdc7e00f5d zigbee2mqtt/state.json 2026-09-04 17:01:00 +00:00
Home Assistant Version Control 435e162096 zigbee2mqtt/state.json 2026-09-04 16:52:49 +00:00
Home Assistant Version Control 5db2e73d81 zigbee2mqtt/state.json 2026-09-04 16:52:15 +00:00
Home Assistant Version Control 8ec66130dd zigbee2mqtt/state.json 2026-09-04 15:43:19 +00:00
Home Assistant Version Control 319ab914b3 zigbee2mqtt/state.json 2026-09-04 13:43:18 +00:00
Home Assistant Version Control 501ecab74c .storage/lovelace_resources 2026-09-04 13:39:34 +00:00
Home Assistant Version Control 4891c035f9 .ha_run.lock 2026-09-04 13:39:12 +00:00
Home Assistant Version Control 1f0e4d0959 6 files 2026-09-04 13:37:39 +00:00
Home Assistant Version Control 70db0a842d zigbee2mqtt/state.json 2026-09-04 13:33:25 +00:00
Home Assistant Version Control b65764a373 zigbee2mqtt/state.json 2026-09-04 13:07:18 +00:00
Home Assistant Version Control 7e70521713 zigbee2mqtt/state.json 2026-09-04 12:08:02 +00:00
Home Assistant Version Control 092452eeae zigbee2mqtt/state.json 2026-09-04 11:54:37 +00:00
Home Assistant Version Control 9320c7664e custom_components/frigate/manifest.json, custom_components/frigate/services.yaml 2026-09-04 11:32:31 +00:00
Home Assistant Version Control a0b8f10638 23 files 2026-09-04 11:31:51 +00:00
Home Assistant Version Control 64c401593c zigbee2mqtt/state.json 2026-09-04 10:58:44 +00:00
Home Assistant Version Control b9ccfae8ec .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-04 09:54:38 +00:00
Home Assistant Version Control d4a906b8dd zigbee2mqtt/state.json 2026-09-04 08:55:29 +00:00
Home Assistant Version Control f04e9eda38 zigbee2mqtt/state.json 2026-09-04 08:12:22 +00:00
Home Assistant Version Control fb5f682036 zigbee2mqtt/state.json 2026-09-04 07:54:37 +00:00
Home Assistant Version Control 820e77ad37 zigbee2mqtt/state.json 2026-09-04 07:53:05 +00:00
Home Assistant Version Control 1abd92f098 zigbee2mqtt/state.json 2026-09-04 07:01:20 +00:00
Home Assistant Version Control 7c5c0b9419 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-04 05:54:38 +00:00
Home Assistant Version Control 2b81fc4d3a zigbee2mqtt/state.json 2026-09-04 04:59:29 +00:00
Home Assistant Version Control e2af7813df zigbee2mqtt/state.json 2026-09-04 03:54:37 +00:00
Home Assistant Version Control 4f6ef57437 zigbee2mqtt/state.json 2026-09-04 03:09:13 +00:00
Home Assistant Version Control a1315ec062 zigbee2mqtt/state.json 2026-09-04 01:54:36 +00:00
Home Assistant Version Control b95d4e348e zigbee2mqtt/state.json 2026-09-04 00:38:37 +00:00
Home Assistant Version Control 9e9d246d2c zigbee2mqtt/state.json 2026-09-04 00:14:56 +00:00
Home Assistant Version Control 20da42fe99 zigbee2mqtt/state.json 2026-09-04 00:05:03 +00:00
Home Assistant Version Control c0230c16a2 zigbee2mqtt/state.json 2026-09-03 23:54:36 +00:00
Home Assistant Version Control aaa664a614 zigbee2mqtt/state.json 2026-09-03 23:10:41 +00:00
Home Assistant Version Control bcd594b315 zigbee2mqtt/state.json 2026-09-03 22:27:35 +00:00
Home Assistant Version Control 84cc747aa7 zigbee2mqtt/state.json 2026-09-03 22:01:36 +00:00
Home Assistant Version Control 9849f79f0d zigbee2mqtt/state.json 2026-09-03 21:54:35 +00:00
Home Assistant Version Control 5c3726ab56 zigbee2mqtt/state.json 2026-09-03 21:35:08 +00:00
Home Assistant Version Control 3de3bba458 zigbee2mqtt/state.json 2026-09-03 21:18:01 +00:00
Home Assistant Version Control e7a6e7c257 zigbee2mqtt/state.json 2026-09-03 20:55:56 +00:00
Home Assistant Version Control b236426be3 zigbee2mqtt/state.json 2026-09-03 20:22:24 +00:00
Home Assistant Version Control 9039d74e0c .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-03 19:54:34 +00:00
Home Assistant Version Control a1f075bc93 zigbee2mqtt/state.json 2026-09-03 19:31:59 +00:00
Home Assistant Version Control 48e630da0b zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-03 19:09:02 +00:00
Home Assistant Version Control 3a9d48558e zigbee2mqtt/state.json 2026-09-03 18:22:10 +00:00
Home Assistant Version Control d6413e19b5 187 files 2026-09-03 17:54:35 +00:00
Home Assistant Version Control 16c9b4d7f4 6 files 2026-09-03 17:42:57 +00:00
Home Assistant Version Control 87d05885b3 zigbee2mqtt/state.json 2026-09-03 17:31:12 +00:00
Home Assistant Version Control 2ad1a317bd zigbee2mqtt/state.json 2026-09-03 16:51:39 +00:00
Home Assistant Version Control ba316f55a7 zigbee2mqtt/state.json 2026-09-03 16:44:59 +00:00
Home Assistant Version Control e3eccf087b zigbee2mqtt/state.json 2026-09-03 16:35:05 +00:00
Home Assistant Version Control 37dc11f176 zigbee2mqtt/state.json 2026-09-03 15:31:11 +00:00
Home Assistant Version Control 85269aafd2 zigbee2mqtt/state.json 2026-09-03 13:31:12 +00:00
Home Assistant Version Control 464871e70f zigbee2mqtt/state.json 2026-09-03 12:23:45 +00:00
Home Assistant Version Control b680a2b5e6 zigbee2mqtt/state.json 2026-09-03 12:23:11 +00:00
Home Assistant Version Control 73b0c3c8c9 zigbee2mqtt/state.json 2026-09-03 12:02:42 +00:00
Home Assistant Version Control adee3d334a zigbee2mqtt/state.json 2026-09-03 11:36:13 +00:00
Home Assistant Version Control c1e0987312 zigbee2mqtt/state.json 2026-09-03 11:31:10 +00:00
Home Assistant Version Control b0d0b7ec4e zigbee2mqtt/state.json 2026-09-03 11:19:10 +00:00
Home Assistant Version Control 0feed60777 zigbee2mqtt/state.json 2026-09-03 11:15:07 +00:00
Home Assistant Version Control 15d218a1c8 zigbee2mqtt/state.json 2026-09-03 10:45:21 +00:00
Home Assistant Version Control 857beec641 zigbee2mqtt/state.json 2026-09-03 10:39:11 +00:00
Home Assistant Version Control b3cb28fedc .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-03 09:31:11 +00:00
Home Assistant Version Control b44b19acc0 zigbee2mqtt/state.json 2026-09-03 08:01:55 +00:00
Home Assistant Version Control d584df90aa zigbee2mqtt/state.json 2026-09-03 07:57:10 +00:00
Home Assistant Version Control 5ae463caa5 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-03 07:31:10 +00:00
Home Assistant Version Control 217d4e89f5 zigbee2mqtt/state.json 2026-09-03 07:11:22 +00:00
Home Assistant Version Control 901cba6281 zigbee2mqtt/state.json 2026-09-03 06:19:59 +00:00
Home Assistant Version Control b9745e671c zigbee2mqtt/state.json 2026-09-03 05:31:11 +00:00
Home Assistant Version Control 325338df0f zigbee2mqtt/state.json 2026-09-03 03:54:45 +00:00
Home Assistant Version Control 058e253418 zigbee2mqtt/state.json 2026-09-03 03:31:10 +00:00
Home Assistant Version Control 67512dfc66 zigbee2mqtt/state.json 2026-09-03 01:57:32 +00:00
Home Assistant Version Control b78e20d53f zigbee2mqtt/state.json 2026-09-03 01:45:01 +00:00
Home Assistant Version Control 59f0005422 zigbee2mqtt/state.json 2026-09-03 01:31:08 +00:00
Home Assistant Version Control 4adba8b991 zigbee2mqtt/state.json 2026-09-03 01:11:01 +00:00
Home Assistant Version Control 6e57057f4f zigbee2mqtt/state.json 2026-09-03 00:14:59 +00:00
Home Assistant Version Control aa0a35e8f3 zigbee2mqtt/state.json 2026-09-02 23:36:49 +00:00
Home Assistant Version Control 889fbe9679 zigbee2mqtt/state.json 2026-09-02 23:31:07 +00:00
Home Assistant Version Control f3b2238b6c zigbee2mqtt/state.json 2026-09-02 23:26:03 +00:00
Home Assistant Version Control 72fd34e1ec zigbee2mqtt/state.json 2026-09-02 22:55:55 +00:00
Home Assistant Version Control ec17103511 zigbee2mqtt/state.json 2026-09-02 22:31:37 +00:00
Home Assistant Version Control 22d1de9ba8 zigbee2mqtt/state.json 2026-09-02 22:20:01 +00:00
Home Assistant Version Control eb440b68d3 zigbee2mqtt/state.json 2026-09-02 22:09:04 +00:00
Home Assistant Version Control a7336edc90 zigbee2mqtt/state.json 2026-09-02 22:07:32 +00:00
Home Assistant Version Control e85701bb2a zigbee2mqtt/state.json 2026-09-02 22:02:51 +00:00
Home Assistant Version Control 3b89d55baf zigbee2mqtt/state.json 2026-09-02 21:31:08 +00:00
Home Assistant Version Control ad89e2dc11 zigbee2mqtt/state.json 2026-09-02 20:24:55 +00:00
Home Assistant Version Control ac3a23aa51 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-02 19:31:06 +00:00
Home Assistant Version Control cbef716dfa zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-02 19:09:01 +00:00
Home Assistant Version Control 27581b78c8 zigbee2mqtt/state.json 2026-09-02 19:05:09 +00:00
Home Assistant Version Control ea58e5e2c8 zigbee2mqtt/state.json 2026-09-02 18:50:54 +00:00
Home Assistant Version Control ba6b9dcfb8 zigbee2mqtt/state.json 2026-09-02 17:43:46 +00:00
Home Assistant Version Control 7bb11e459b zigbee2mqtt/state.json 2026-09-02 17:31:07 +00:00
Home Assistant Version Control ccc42116e1 custom_components/spook/ectoplasms/utility_meter/repairs/__pycache__/__init__.cpython-314.pyc 2026-09-02 17:27:33 +00:00
Home Assistant Version Control 147a3a4159 134 files 2026-09-02 17:27:23 +00:00
Home Assistant Version Control 96d6e82414 .storage/lovelace_resources 2026-09-02 17:27:09 +00:00
Home Assistant Version Control b65b94d930 .ha_run.lock 2026-09-02 17:26:39 +00:00
Home Assistant Version Control 9cf15e8480 3 files 2026-09-02 17:25:54 +00:00
Home Assistant Version Control 96984f8a7c 20 files 2026-09-02 17:25:42 +00:00
Home Assistant Version Control ce1a5a5fe9 zigbee2mqtt/state.json 2026-09-02 17:24:25 +00:00
Home Assistant Version Control 84fcac33b5 zigbee2mqtt/state.json 2026-09-02 16:17:39 +00:00
Home Assistant Version Control 9cc8100b92 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-02 16:13:19 +00:00
Home Assistant Version Control 96b20834db zigbee2mqtt/state.json 2026-09-02 15:49:55 +00:00
Home Assistant Version Control 1154908b6d .storage/lovelace.printer_stats, zigbee2mqtt/state.json 2026-09-02 14:25:30 +00:00
Home Assistant Version Control 006f4825ba zigbee2mqtt/state.json 2026-09-02 14:17:40 +00:00
Home Assistant Version Control 53fd7ccfa6 .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:02:57 +00:00
Home Assistant Version Control 4c213113e1 .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:02:37 +00:00
Home Assistant Version Control 3168198c3a .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:01:51 +00:00
Home Assistant Version Control 746c67815a .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:01:23 +00:00
Home Assistant Version Control e3c27b70cd .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:01:15 +00:00
Home Assistant Version Control bc8b35aab3 .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:01:01 +00:00
Home Assistant Version Control 42f5c60183 .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:00:35 +00:00
Home Assistant Version Control f2b5b59481 .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 14:00:21 +00:00
Home Assistant Version Control dd8e545ffd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-02 14:00:15 +00:00
Home Assistant Version Control 37fc7399f5 zigbee2mqtt/state.json 2026-09-02 12:55:31 +00:00
Home Assistant Version Control 4b3b253c41 zigbee2mqtt/state.json 2026-09-02 12:18:41 +00:00
Home Assistant Version Control bd2ab46f5d zigbee2mqtt/state.json 2026-09-02 12:17:38 +00:00
Home Assistant Version Control 44e9c62581 zigbee2mqtt/state.json 2026-09-02 12:09:28 +00:00
Home Assistant Version Control 0c64e47969 184 files 2026-09-02 11:49:09 +00:00
Home Assistant Version Control 7b47edbf8d zigbee2mqtt/state.json 2026-09-02 11:23:51 +00:00
Home Assistant Version Control 4aad81e287 zigbee2mqtt/state.json 2026-09-02 11:23:17 +00:00
Home Assistant Version Control 101bdf1ec2 zigbee2mqtt/state.json 2026-09-02 11:15:07 +00:00
Home Assistant Version Control 73a91568e2 zigbee2mqtt/state.json 2026-09-02 11:00:32 +00:00
Home Assistant Version Control 84193b698e zigbee2mqtt/state.json 2026-09-02 10:45:21 +00:00
Home Assistant Version Control 18b8242a03 zigbee2mqtt/state.json 2026-09-02 10:37:27 +00:00
Home Assistant Version Control 4633428046 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-02 10:17:37 +00:00
Home Assistant Version Control fb3d0f89f3 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-02 08:17:38 +00:00
Home Assistant Version Control f5f7178449 zigbee2mqtt/state.json 2026-09-02 08:11:00 +00:00
Home Assistant Version Control 979558a587 zigbee2mqtt/state.json 2026-09-02 07:55:10 +00:00
Home Assistant Version Control ff449407e0 zigbee2mqtt/state.json 2026-09-02 06:54:17 +00:00
Home Assistant Version Control 7e212d6e93 zigbee2mqtt/state.json 2026-09-02 06:30:18 +00:00
Home Assistant Version Control 7a3ccf7ec7 zigbee2mqtt/state.json 2026-09-02 06:17:37 +00:00
Home Assistant Version Control 0e89859930 zigbee2mqtt/state.json 2026-09-02 06:08:38 +00:00
Home Assistant Version Control 2f73c74bee zigbee2mqtt/state.json 2026-09-02 06:08:06 +00:00
Home Assistant Version Control 7126c00eb2 zigbee2mqtt/state.json 2026-09-02 05:23:36 +00:00
Home Assistant Version Control 52a6319b7a zigbee2mqtt/state.json 2026-09-02 05:02:03 +00:00
Home Assistant Version Control 693fab1ff8 zigbee2mqtt/state.json 2026-09-02 04:44:46 +00:00
Home Assistant Version Control 69454e7f2c zigbee2mqtt/state.json 2026-09-02 04:17:36 +00:00
Home Assistant Version Control 2c09bd7747 zigbee2mqtt/state.json 2026-09-02 03:54:26 +00:00
Home Assistant Version Control 2e8d82ff1c zigbee2mqtt/state.json 2026-09-02 02:17:37 +00:00
Home Assistant Version Control 4635cc876c zigbee2mqtt/state.json 2026-09-02 01:59:10 +00:00
Home Assistant Version Control 455bbf455b zigbee2mqtt/state.json 2026-09-02 01:45:31 +00:00
Home Assistant Version Control 46c9a08681 zigbee2mqtt/state.json 2026-09-02 01:33:58 +00:00
Home Assistant Version Control 3d5fffd147 .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 00:59:22 +00:00
Home Assistant Version Control 82847bc692 3 files 2026-09-02 00:59:08 +00:00
Home Assistant Version Control 3f32e45db3 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-02 00:58:24 +00:00
Home Assistant Version Control b451a67fbe .ha_mcp/logs/mcp_usage.jsonl 2026-09-02 00:55:56 +00:00
Home Assistant Version Control 82dde35677 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-02 00:55:50 +00:00
Home Assistant Version Control 40dcfb8276 zigbee2mqtt/state.json 2026-09-02 00:50:37 +00:00
Home Assistant Version Control 636a6e37a3 zigbee2mqtt/state.json 2026-09-02 00:45:47 +00:00
Home Assistant Version Control 42cff006bc zigbee2mqtt/state.json 2026-09-02 00:42:59 +00:00
Home Assistant Version Control 9351c735c4 zigbee2mqtt/state.json 2026-09-02 00:37:03 +00:00
Home Assistant Version Control c426763d3e zigbee2mqtt/state.json 2026-09-02 00:25:22 +00:00
Home Assistant Version Control b2bcc48291 zigbee2mqtt/state.json 2026-09-02 00:23:34 +00:00
Home Assistant Version Control 3174d676a1 zigbee2mqtt/state.json 2026-09-02 00:17:35 +00:00
Home Assistant Version Control bbcc78a569 zigbee2mqtt/state.json 2026-09-02 00:06:09 +00:00
Home Assistant Version Control b322efc2b4 zigbee2mqtt/state.json 2026-09-01 23:43:49 +00:00
Home Assistant Version Control 9ea7bd8332 zigbee2mqtt/state.json 2026-09-01 23:26:36 +00:00
Home Assistant Version Control 7fc1e041e6 zigbee2mqtt/state.json 2026-09-01 23:15:04 +00:00
Home Assistant Version Control 4982f3b16e zigbee2mqtt/state.json 2026-09-01 23:08:47 +00:00
Home Assistant Version Control 863244a394 zigbee2mqtt/state.json 2026-09-01 22:42:02 +00:00
Home Assistant Version Control 986fa10f8c zigbee2mqtt/state.json 2026-09-01 22:17:36 +00:00
Home Assistant Version Control afd0da7bc2 zigbee2mqtt/state.json 2026-09-01 22:08:44 +00:00
Home Assistant Version Control 6167ed54cd zigbee2mqtt/state.json 2026-09-01 21:36:32 +00:00
Home Assistant Version Control ba9cb688fe zigbee2mqtt/state.json 2026-09-01 21:09:32 +00:00
Home Assistant Version Control a375812425 zigbee2mqtt/state.json 2026-09-01 21:06:38 +00:00
Home Assistant Version Control d4d3c230fa zigbee2mqtt/state.json 2026-09-01 20:59:30 +00:00
Home Assistant Version Control 07e126aa07 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:57:52 +00:00
Home Assistant Version Control 670d10f5cc .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:57:34 +00:00
Home Assistant Version Control 3ce1c83b37 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:57:28 +00:00
Home Assistant Version Control a159a546a6 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:56:12 +00:00
Home Assistant Version Control 0bb63ffaa5 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-01 20:56:09 +00:00
Home Assistant Version Control 35e7340fc7 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:54:51 +00:00
Home Assistant Version Control 291316203a .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 20:53:59 +00:00
Home Assistant Version Control 09fcbc6f7a .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:52:57 +00:00
Home Assistant Version Control 5636c7aafd .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:52:37 +00:00
Home Assistant Version Control 415d118bfe .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:52:26 +00:00
Home Assistant Version Control 85bf7570a2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:52:18 +00:00
Home Assistant Version Control 764db80712 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:51:27 +00:00
Home Assistant Version Control b90f76e477 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-01 20:49:43 +00:00
Home Assistant Version Control 261a288be7 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 20:49:31 +00:00
Home Assistant Version Control 48e7062ec0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:46:45 +00:00
Home Assistant Version Control da37e15791 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:45:45 +00:00
Home Assistant Version Control c1d986cfe2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 20:44:39 +00:00
Home Assistant Version Control 250d9201f1 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 20:44:05 +00:00
Home Assistant Version Control 9516dae7d8 zigbee2mqtt/state.json 2026-09-01 20:35:36 +00:00
Home Assistant Version Control 73b7c819a4 zigbee2mqtt/state.json 2026-09-01 20:20:04 +00:00
Home Assistant Version Control 17dbdf2830 zigbee2mqtt/state.json 2026-09-01 20:17:35 +00:00
Home Assistant Version Control 4db935b3d5 zigbee2mqtt/state.json 2026-09-01 20:12:31 +00:00
Home Assistant Version Control 28847e698c zigbee2mqtt/state.json 2026-09-01 20:06:01 +00:00
Home Assistant Version Control c8f9b0e980 zigbee2mqtt/state.json 2026-09-01 19:51:00 +00:00
Home Assistant Version Control 36d81c4cfe zigbee2mqtt/state.json 2026-09-01 19:44:12 +00:00
Home Assistant Version Control 932630a4ae zigbee2mqtt/state.json 2026-09-01 19:39:19 +00:00
Home Assistant Version Control 53d3cb9fc6 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-01 19:26:32 +00:00
Home Assistant Version Control b0f86d56e2 3 files 2026-09-01 19:24:58 +00:00
Home Assistant Version Control a2c9c92e34 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:17:28 +00:00
Home Assistant Version Control f4e9343992 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:16:18 +00:00
Home Assistant Version Control 10e70476d7 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:15:54 +00:00
Home Assistant Version Control fab4b9c479 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:14:12 +00:00
Home Assistant Version Control de945963b2 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 19:13:46 +00:00
Home Assistant Version Control d613d36637 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:13:24 +00:00
Home Assistant Version Control 7ad6c0ed41 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:11:40 +00:00
Home Assistant Version Control ddfd194d4f .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:10:51 +00:00
Home Assistant Version Control b0a61c3bc0 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:10:29 +00:00
Home Assistant Version Control 8cb5b6490e .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:10:14 +00:00
Home Assistant Version Control d08e93310f .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:09:56 +00:00
Home Assistant Version Control 0bcaf39233 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 19:09:45 +00:00
Home Assistant Version Control ae61dd9740 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-01 19:08:33 +00:00
Home Assistant Version Control 924351e9f2 zigbee2mqtt/state.json 2026-09-01 19:08:01 +00:00
Home Assistant Version Control 9390603595 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-01 18:17:34 +00:00
Home Assistant Version Control 94c0bd64e6 zigbee2mqtt/state.json 2026-09-01 17:51:35 +00:00
Home Assistant Version Control ce40bd7a8f zigbee2mqtt/state.json 2026-09-01 17:42:10 +00:00
Home Assistant Version Control 40d3e018e7 zigbee2mqtt/state.json 2026-09-01 16:36:58 +00:00
Home Assistant Version Control a037e99c78 zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-09-01 16:16:57 +00:00
Home Assistant Version Control 6cec6eecd7 zigbee2mqtt/state.json 2026-09-01 16:07:47 +00:00
Home Assistant Version Control d95049f873 zigbee2mqtt/state.json 2026-09-01 14:39:09 +00:00
Home Assistant Version Control 534b6ad3c7 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-09-01 14:17:34 +00:00
Home Assistant Version Control 2feab35d90 zigbee2mqtt/state.json 2026-09-01 13:00:25 +00:00
Home Assistant Version Control 583b6aa8cd .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 12:41:52 +00:00
Home Assistant Version Control 61f39eef6c .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:38:24 +00:00
Home Assistant Version Control c9458e5e89 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:37:48 +00:00
Home Assistant Version Control e3d14acb8e .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 12:37:18 +00:00
Home Assistant Version Control 0986fff9e9 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:35:28 +00:00
Home Assistant Version Control 8a80f59c02 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:35:24 +00:00
Home Assistant Version Control 5ccd92beff .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:35:10 +00:00
Home Assistant Version Control db31c7716d .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:34:58 +00:00
Home Assistant Version Control 219b3f997a .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:34:52 +00:00
Home Assistant Version Control eedfbbd164 zigbee2mqtt/state.json 2026-09-01 12:32:18 +00:00
Home Assistant Version Control eb4ddc00db .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:31:12 +00:00
Home Assistant Version Control 6c1458b488 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:30:50 +00:00
Home Assistant Version Control 500eae0123 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:30:28 +00:00
Home Assistant Version Control 0bd7366b57 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:30:08 +00:00
Home Assistant Version Control 557d52d475 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:28:42 +00:00
Home Assistant Version Control 6ecde8a8bb .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:28:28 +00:00
Home Assistant Version Control f7652c4ff8 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:28:22 +00:00
Home Assistant Version Control 763251f546 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 12:27:58 +00:00
Home Assistant Version Control 2a67dda096 zigbee2mqtt/state.json 2026-09-01 12:24:25 +00:00
Home Assistant Version Control 9487569e81 zigbee2mqtt/state.json 2026-09-01 12:17:33 +00:00
Home Assistant Version Control b96e9ac690 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:14:23 +00:00
Home Assistant Version Control 15e744ad4b .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-01 12:12:37 +00:00
Home Assistant Version Control 6d0c57b155 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-01 12:12:15 +00:00
Home Assistant Version Control f8016981cf .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 12:11:49 +00:00
Home Assistant Version Control 2d7565c2c1 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:11:11 +00:00
Home Assistant Version Control ff4da9bb6c .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 12:10:03 +00:00
Home Assistant Version Control e2668d1f56 .ha_mcp/logs/mcp_usage.jsonl, automations.yaml 2026-09-01 12:04:32 +00:00
Home Assistant Version Control c0e5ed5fd2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:04:14 +00:00
Home Assistant Version Control 95af5d706f .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:03:24 +00:00
Home Assistant Version Control 5ebaf6cc66 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:03:08 +00:00
Home Assistant Version Control 98ae0c0206 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-09-01 12:01:32 +00:00
Home Assistant Version Control 39698d0780 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:01:12 +00:00
Home Assistant Version Control 582939c87a .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:00:52 +00:00
Home Assistant Version Control aa68b822a2 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:00:36 +00:00
Home Assistant Version Control 16df136537 .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:00:24 +00:00
Home Assistant Version Control 4b0b80233e .ha_mcp/logs/mcp_usage.jsonl 2026-09-01 12:00:20 +00:00
Home Assistant Version Control de9951cef0 6 files 2026-09-01 11:56:32 +00:00
Home Assistant Version Control c720650c60 zigbee2mqtt/state.json 2026-09-01 11:55:02 +00:00
Home Assistant Version Control 3dcbb31729 zigbee2mqtt/state.json 2026-09-01 11:13:33 +00:00
Home Assistant Version Control cc64fe5377 zigbee2mqtt/state.json 2026-09-01 10:43:37 +00:00
Home Assistant Version Control 9fb8933d39 zigbee2mqtt/state.json 2026-09-01 10:17:32 +00:00
Home Assistant Version Control 6dee9c8053 zigbee2mqtt/state.json 2026-09-01 08:50:11 +00:00
Home Assistant Version Control 049b0ca9ab zigbee2mqtt/state.json 2026-09-01 08:23:59 +00:00
Home Assistant Version Control f2932de658 zigbee2mqtt/state.json 2026-09-01 08:17:32 +00:00
Home Assistant Version Control f97fb6e1de zigbee2mqtt/state.json 2026-09-01 07:57:01 +00:00
Home Assistant Version Control 92ee4458ac zigbee2mqtt/state.json 2026-09-01 07:41:26 +00:00
Home Assistant Version Control ed0e2cf20f zigbee2mqtt/state.json 2026-09-01 07:15:13 +00:00
Home Assistant Version Control d80f5b62aa zigbee2mqtt/state.json 2026-09-01 06:23:14 +00:00
Home Assistant Version Control eaccaf48af zigbee2mqtt/state.json 2026-09-01 06:17:31 +00:00
Home Assistant Version Control c9d8d4f41a zigbee2mqtt/state.json 2026-09-01 05:50:06 +00:00
Home Assistant Version Control 5f00582406 zigbee2mqtt/state.json 2026-09-01 05:34:06 +00:00
Home Assistant Version Control d1a0ce742b zigbee2mqtt/state.json 2026-09-01 05:11:51 +00:00
Home Assistant Version Control f9d397e35f zigbee2mqtt/state.json 2026-09-01 04:52:32 +00:00
Home Assistant Version Control 7aa72c6b70 zigbee2mqtt/state.json 2026-09-01 04:17:32 +00:00
Home Assistant Version Control 0032b717ca zigbee2mqtt/state.json 2026-09-01 03:30:11 +00:00
Home Assistant Version Control 3293cd5731 zigbee2mqtt/state.json 2026-09-01 02:17:31 +00:00
Home Assistant Version Control 65d03b4db4 zigbee2mqtt/state.json 2026-09-01 01:38:28 +00:00
Home Assistant Version Control 753d05df77 zigbee2mqtt/state.json 2026-09-01 01:36:03 +00:00
Home Assistant Version Control 1dc39035ee zigbee2mqtt/state.json 2026-09-01 01:25:16 +00:00
Home Assistant Version Control e78f64a798 zigbee2mqtt/state.json 2026-09-01 00:17:06 +00:00
Home Assistant Version Control f5b0504c43 zigbee2mqtt/state.json 2026-08-31 23:30:55 +00:00
Home Assistant Version Control d986de7d6a zigbee2mqtt/state.json 2026-08-31 23:21:30 +00:00
Home Assistant Version Control aebd14e972 zigbee2mqtt/state.json 2026-08-31 23:13:08 +00:00
Home Assistant Version Control f7233883c0 zigbee2mqtt/state.json 2026-08-31 23:08:10 +00:00
Home Assistant Version Control 68e7b5a333 zigbee2mqtt/state.json 2026-08-31 22:17:30 +00:00
Home Assistant Version Control d081b5ddf2 zigbee2mqtt/state.json 2026-08-31 21:05:04 +00:00
Home Assistant Version Control 046d89c950 zigbee2mqtt/state.json 2026-08-31 20:17:29 +00:00
Home Assistant Version Control 6371f0238d zigbee2mqtt/state.json 2026-08-31 19:47:30 +00:00
Home Assistant Version Control 078528fc76 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-08-31 18:17:28 +00:00
Home Assistant Version Control a3f86ca5b1 zigbee2mqtt/state.json 2026-08-31 17:35:28 +00:00
Home Assistant Version Control 76b3244b4a .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 16:51:59 +00:00
Home Assistant Version Control ca6150762b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-08-31 16:51:51 +00:00
Home Assistant Version Control ee0626728b .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-08-31 16:50:19 +00:00
Home Assistant Version Control 37207223c5 zigbee2mqtt/state.json 2026-08-31 16:40:32 +00:00
Home Assistant Version Control f221d44a63 custom_components/spook/ectoplasms/utility_meter/repairs/__pycache__/__init__.cpython-314.pyc, zigbee2mqtt/state.json 2026-08-31 16:17:27 +00:00
Home Assistant Version Control f06485c22b 65 files 2026-08-31 16:11:23 +00:00
Home Assistant Version Control c50c571294 69 files 2026-08-31 16:11:11 +00:00
Home Assistant Version Control 53bf850716 .storage/lovelace_resources 2026-08-31 16:11:01 +00:00
Home Assistant Version Control c54e84481a .ha_run.lock 2026-08-31 16:10:37 +00:00
Home Assistant Version Control b40f12ce89 .cache/brands/integrations/wyzeapi/logo.png 2026-08-31 16:09:35 +00:00
Home Assistant Version Control 838721d77b .ha_mcp/logs/mcp_usage.jsonl, .storage/lovelace.dashboard_home 2026-08-31 15:50:14 +00:00
Home Assistant Version Control e96f407da8 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:48:52 +00:00
Home Assistant Version Control 142a062f8f .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:48:00 +00:00
Home Assistant Version Control 642943de1c .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:47:51 +00:00
Home Assistant Version Control eb9aea0b93 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:47:46 +00:00
Home Assistant Version Control 2c09d45bf5 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:47:41 +00:00
Home Assistant Version Control 76148fcb64 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:46:23 +00:00
Home Assistant Version Control d8dcebce56 .storage/lovelace.dashboard_home 2026-08-31 15:41:37 +00:00
Home Assistant Version Control 2ac7dc352e .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:32:53 +00:00
Home Assistant Version Control 4e872c55e9 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:32:45 +00:00
Home Assistant Version Control c28af38b6a .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:32:25 +00:00
Home Assistant Version Control 81402d93ae .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:31:05 +00:00
Home Assistant Version Control 7adb0888de .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:30:40 +00:00
Home Assistant Version Control 7f4980207f .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:29:28 +00:00
Home Assistant Version Control 1fc7cf9994 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:29:20 +00:00
Home Assistant Version Control 50a2846b7c .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:26:34 +00:00
Home Assistant Version Control 9afe6bcf59 .ha_mcp/logs/mcp_usage.jsonl 2026-08-31 15:26:24 +00:00
Home Assistant Version Control 9742f385a3 124 files 2026-08-31 15:02:40 +00:00
Home Assistant Version Control 33de328a33 .storage/lovelace_resources 2026-08-31 14:55:40 +00:00
Home Assistant Version Control 9afcd5d14a .ha_run.lock 2026-08-31 14:55:12 +00:00
Home Assistant Version Control 1770e33ddc 28 files 2026-08-31 14:54:46 +00:00
Home Assistant Version Control 38964507bd 12 files 2026-08-31 13:21:31 +00:00
Home Assistant Version Control 4c1655bcfa zigbee2mqtt/state.json 2026-08-31 12:39:16 +00:00
Home Assistant Version Control 0050a945a9 zigbee2mqtt/state.json 2026-08-31 11:50:21 +00:00
Home Assistant Version Control 7e5b43cc48 zigbee2mqtt/state.json 2026-08-31 11:21:30 +00:00
Home Assistant Version Control 96aaabffcd zigbee2mqtt/state.json 2026-08-31 11:15:07 +00:00
Home Assistant Version Control ecd217aecf 3 files 2026-08-31 09:21:28 +00:00
Home Assistant Version Control 4df17b0364 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-08-31 07:21:29 +00:00
Home Assistant Version Control 6bf350c162 zigbee2mqtt/state.json 2026-08-31 05:21:34 +00:00
Home Assistant Version Control 94c8048a1a zigbee2mqtt/coordinator_backup.json, zigbee2mqtt/state.json 2026-08-31 03:32:41 +00:00
Home Assistant Version Control e7a02327bd zigbee2mqtt/state.json 2026-08-31 03:21:29 +00:00
Home Assistant Version Control d06986db62 zigbee2mqtt/state.json 2026-08-31 01:21:29 +00:00
Home Assistant Version Control 76af9af3b7 zigbee2mqtt/state.json 2026-08-30 23:21:28 +00:00
Home Assistant Version Control 9fc72f8d66 zigbee2mqtt/state.json 2026-08-30 22:52:24 +00:00
Home Assistant Version Control 357b8c2e99 zigbee2mqtt/state.json 2026-08-30 22:52:16 +00:00
Home Assistant Version Control 2a2ee388f5 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-08-30 21:18:42 +00:00
Home Assistant Version Control a08060450e zigbee2mqtt/state.json 2026-08-30 20:45:38 +00:00
Home Assistant Version Control 12dc500d17 zigbee2mqtt/state.json 2026-08-30 19:21:25 +00:00
Home Assistant Version Control 8c35a99b6b zigbee2mqtt/state.json 2026-08-30 17:46:30 +00:00
Home Assistant Version Control fc4a3d804d zigbee2mqtt/state.json 2026-08-30 17:21:26 +00:00
Home Assistant Version Control fc05b8930e zigbee2mqtt/state.json 2026-08-30 15:50:15 +00:00
Home Assistant Version Control eedde50edf zigbee2mqtt/state.json 2026-08-30 15:43:34 +00:00
Home Assistant Version Control 41efc1dfea zigbee2mqtt/state.json 2026-08-30 15:41:56 +00:00
Home Assistant Version Control 5dd5653194 .storage/powercalc_profiles/library.json, zigbee2mqtt/state.json 2026-08-30 15:21:27 +00:00
Home Assistant Version Control 4ab4818334 3 files 2026-08-30 13:21:24 +00:00
Home Assistant Version Control 335ea9a43b zigbee2mqtt/state.json 2026-08-30 11:21:24 +00:00
Home Assistant Version Control 69da0ed3c9 zigbee2mqtt/state.json 2026-08-30 09:21:24 +00:00
Home Assistant Version Control b2d09a1e71 zigbee2mqtt/state.json 2026-08-30 08:05:37 +00:00
Home Assistant Version Control e2fa7fa0d4 zigbee2mqtt/state.json 2026-08-30 07:21:22 +00:00
Home Assistant Version Control 2d85fdf635 zigbee2mqtt/state.json 2026-08-30 06:58:56 +00:00
Home Assistant Version Control e5ea57f238 12 files 2026-08-30 05:21:23 +00:00
Home Assistant Version Control 73f9e82d81 opencode/decisions.yaml 2026-08-30 03:40:55 +00:00
Home Assistant Version Control 1f8403e3ef opencode/decisions.yaml, zigbee2mqtt/state.json 2026-08-30 03:38:47 +00:00
Home Assistant Version Control 6500d4825e .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:36:57 +00:00
Home Assistant Version Control 0e9f435e4a .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:33:27 +00:00
Home Assistant Version Control 33fd684570 .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json 2026-08-30 03:32:45 +00:00
Home Assistant Version Control d66b06ff44 zigbee2mqtt/configuration.yaml 2026-08-30 03:29:58 +00:00
Home Assistant Version Control f04253e457 .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:27:51 +00:00
Home Assistant Version Control 01e2d07ece .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:27:15 +00:00
Home Assistant Version Control ad111e6394 .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:25:45 +00:00
Home Assistant Version Control 83c758e8c1 .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:25:27 +00:00
Home Assistant Version Control 5e24d497e2 .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:24:17 +00:00
Home Assistant Version Control eaa45bc34c .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 03:24:05 +00:00
Home Assistant Version Control bc354c5c61 3 files 2026-08-30 03:17:49 +00:00
Home Assistant Version Control e246173e46 .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 02:55:36 +00:00
Home Assistant Version Control c3c8d986bf .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 02:55:32 +00:00
Home Assistant Version Control 0add4161c0 .ha_mcp/logs/mcp_usage.jsonl 2026-08-30 02:55:26 +00:00
1519 changed files with 421131 additions and 87243 deletions

No files matched your search

+1 -1
View File
@@ -1 +1 @@
2026.8.3
2026.10.1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 37 KiB

@@ -0,0 +1,139 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238729'
captured: '2026-10-09T00:21:25.595930+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
description: On print completion, deducts the final segment (used_material_length
delta since last checkpoint x g/cm) from the Spoolman spool matching the latched
slot color (remaining weight > 0 guard), accumulates it per slot, then sends a
summary notification with total and per-slot breakdown whenever anything was deducted.
Silent when total is 0. Clears the latch and re-baselines the checkpoint.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions: []
actions:
- variables:
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) }}'
- variables:
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and
ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{%
endfor %}{{ ns.id }}'
- variables:
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
''2'', ''3'', ''4''] else '''' }}'
- variables:
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
- if:
condition: template
value_template: '{{ final_grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ final_grams | float(0) }}'
- if:
condition: template
value_template: '{{ helper_idx != '''' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
| float(0)) + (final_grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool with remaining weight matches
that color. Register the new roll in Spoolman, then adjust manually if
needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool with remaining weight matches
that color. Register the new roll in Spoolman, then adjust manually if
needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool with remaining weight matches
that color. Register the new roll in Spoolman, then adjust manually if
needed.'
- variables:
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
(ns.t + (nonhelper_g | float)) | round(1) }}'
- variables:
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
}}'
- if:
condition: template
value_template: '{{ summary_total | float > 0 }}'
then:
- action: notify.persistent_notification
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
mode: single
@@ -0,0 +1,140 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238729'
captured: '2026-10-09T00:32:47.977680+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
description: On print completion, deducts the final segment (used_material_length
delta since last checkpoint x g/cm) from the Spoolman spool matching the latched
slot color (remaining weight > 0 guard), accumulates it per slot, then sends a
summary notification with total and per-slot breakdown whenever anything was deducted.
Silent when total is 0. Clears the latch and re-baselines the checkpoint.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions: []
actions:
- variables:
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) }}'
- variables:
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
lower) == color and (state_attr(e[:-10], ''location'') | default('''', true)
| lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b) | float(0))
> 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{%
endif %}{% endfor %}{{ ns.id }}'
- variables:
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
''2'', ''3'', ''4''] else '''' }}'
- variables:
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
- if:
condition: template
value_template: '{{ final_grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ final_grams | float(0) }}'
- if:
condition: template
value_template: '{{ helper_idx != '''' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
| float(0)) + (final_grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool with remaining weight matches
that color. Register the new roll in Spoolman, then adjust manually if
needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool with remaining weight matches
that color. Register the new roll in Spoolman, then adjust manually if
needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool with remaining weight matches
that color. Register the new roll in Spoolman, then adjust manually if
needed.'
- variables:
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
(ns.t + (nonhelper_g | float)) | round(1) }}'
- variables:
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
}}'
- if:
condition: template
value_template: '{{ summary_total | float > 0 }}'
then:
- action: notify.persistent_notification
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
mode: single
@@ -0,0 +1,171 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238729'
captured: '2026-10-12T16:33:11.682946+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
description: On print completion, deducts the final segment (used_material_length
delta since last checkpoint x g/cm) from the Spoolman spool in the CFS Lite location
matching the latched slot color (remaining weight > 0 guard), accumulates it per
slot, then sends a summary notification with total and per-slot breakdown whenever
anything was deducted. Silent when total is 0. Clears the latch and re-baselines
the checkpoint.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
id: complete
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: stopped
id: stopped
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: error
id: error
conditions:
- condition: template
value_template: '{{ trigger.id == ''complete'' or states(''input_text.sparkx_i7_print_spool_latch'')
not in ['''', ''unknown'', ''unavailable''] }}'
actions:
- variables:
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) }}'
outcome: '{% set tid = trigger.id | default(''complete'') %}{{ ''cancelled''
if tid == ''stopped'' else (''error'' if tid == ''error'' else ''complete'')
}}'
- variables:
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
lower) == color and (state_attr(e[:-10], ''location'') | default('''', true)
| lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b) | float(0))
> 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{%
endif %}{% endfor %}{{ ns.id }}'
- variables:
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
''2'', ''3'', ''4''] else '''' }}'
- variables:
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
- if:
condition: template
value_template: '{{ final_grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ final_grams | float(0) }}'
- if:
condition: template
value_template: '{{ helper_idx != '''' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
| float(0)) + (final_grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- variables:
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
(ns.t + (nonhelper_g | float)) | round(1) }}'
- variables:
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
}}'
- if:
condition: template
value_template: '{{ summary_total | float > 0 }}'
then:
- action: notify.persistent_notification
data:
title: Print {{ outcome }} - Spoolman updated
message: 'Print {{ outcome }} - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print {{ outcome }} - Spoolman updated
message: 'Print {{ outcome }} - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print {{ outcome }} - Spoolman updated
message: 'Print {{ outcome }} - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- if:
condition: template
value_template: '{{ trigger.id == ''complete'' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_last_job_filament_weight
data:
value: '{{ final_grams }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_last_job_cost
data:
value: '{{ ((final_grams | float) * (states(''input_number.filament_price_per_kg'')
| float(25)) / 1000) | round(2) }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
mode: single
@@ -0,0 +1,171 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238729'
captured: '2026-10-15T13:23:17.499559+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
description: On print completion, deducts the final segment (used_material_length
delta since last checkpoint x g/cm) from the Spoolman spool in the CFS Lite location
matching the latched slot color (remaining weight > 0 guard), accumulates it per
slot, then sends a summary notification with total and per-slot breakdown whenever
anything was deducted. Silent when total is 0. Clears the latch and re-baselines
the checkpoint.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
id: complete
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: stopped
id: stopped
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: error
id: error
conditions:
- condition: template
value_template: '{{ trigger.id == ''complete'' or states(''input_text.sparkx_i7_print_spool_latch'')
not in ['''', ''unknown'', ''unavailable''] }}'
actions:
- variables:
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) }}'
outcome: '{% set tid = trigger.id | default(''complete'') %}{{ ''cancelled''
if tid == ''stopped'' else (''error'' if tid == ''error'' else ''complete'')
}}'
- variables:
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (state_attr(e[:-10], ''location'')
| default('''', true) | lower) == (''cfs lite '' ~ old_slot.split(''_'')[-1])
%}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == ''''
%}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{% endfor %}{{
ns.id }}'
- variables:
helper_idx: '{{ old_slot.split(''_'')[-1] if old_slot.split(''_'')[-1] in [''1'',
''2'', ''3'', ''4''] else '''' }}'
- variables:
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
- if:
condition: template
value_template: '{{ final_grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ final_grams | float(0) }}'
- if:
condition: template
value_template: '{{ helper_idx != '''' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
| float(0)) + (final_grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- variables:
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
(ns.t + (nonhelper_g | float)) | round(1) }}'
- variables:
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
}}'
- if:
condition: template
value_template: '{{ summary_total | float > 0 }}'
then:
- action: notify.persistent_notification
data:
title: Print {{ outcome }} - Spoolman updated
message: 'Print {{ outcome }} - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print {{ outcome }} - Spoolman updated
message: 'Print {{ outcome }} - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print {{ outcome }} - Spoolman updated
message: 'Print {{ outcome }} - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- if:
condition: template
value_template: '{{ trigger.id == ''complete'' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_last_job_filament_weight
data:
value: '{{ summary_total }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_last_job_cost
data:
value: '{{ ((summary_total | float) * (states(''input_number.filament_price_per_kg'')
| float(25)) / 1000) | round(2) }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
mode: single
@@ -0,0 +1,150 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238762'
captured: '2026-10-09T00:21:25.534171+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
and per-slot gram counters and latches the active CFS slot. On every slot change
mid-print, deducts the exact extrusion of the finished segment (used_material_length
delta x g/cm) from the Spoolman spool matching the previous slot color hex (only
if that spool has remaining weight), accumulates grams per slot, notifies on no-match,
then re-baselines the checkpoint and advances the latch.'
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
id: print_started
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
id: slot_changed
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
new_slot: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
- choose:
- conditions:
condition: trigger
id: print_started
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_number.set_value
target:
entity_id:
- input_number.sparkx_i7_slot_1_grams
- input_number.sparkx_i7_slot_2_grams
- input_number.sparkx_i7_slot_3_grams
- input_number.sparkx_i7_slot_4_grams
data:
value: 0
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot if new_slot not in [''unknown'', ''unavailable''] else
'''' }}'
- conditions:
condition: template
value_template: '{{ old_slot not in ['''', ''unknown'', ''unavailable''] and
new_slot not in ['''', ''unknown'', ''unavailable''] and new_slot != old_slot
}}'
sequence:
- variables:
grams: '{{ (([cur | float - (states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0)), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''')
| lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0))
> 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif
%}{% endif %}{% endfor %}{{ ns.id }}'
- if:
condition: template
value_template: '{{ grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ grams | float(0) }}'
- if:
condition: template
value_template: '{{ old_slot.split('' '')[-1] in [''1'', ''2'', ''3'',
''4''] }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ old_slot.split(' ')[-1]
}}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ old_slot.split(''
'')[-1] ~ ''_grams'') | float(0)) + (grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool with remaining
weight matches that color. Register the new roll in Spoolman, then
adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool with remaining
weight matches that color. Register the new roll in Spoolman, then
adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool with remaining
weight matches that color. Register the new roll in Spoolman, then
adjust manually if needed.'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
- conditions:
condition: template
value_template: '{{ old_slot in ['''', ''unknown'', ''unavailable''] and new_slot
not in ['''', ''unknown'', ''unavailable''] }}'
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
mode: queued
max: 10
@@ -0,0 +1,151 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238762'
captured: '2026-10-09T00:32:47.861324+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
and per-slot gram counters and latches the active CFS slot. On every slot change
mid-print, deducts the exact extrusion of the finished segment (used_material_length
delta x g/cm) from the Spoolman spool matching the previous slot color hex (only
if that spool has remaining weight), accumulates grams per slot, notifies on no-match,
then re-baselines the checkpoint and advances the latch.'
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
id: print_started
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
id: slot_changed
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
new_slot: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
- choose:
- conditions:
condition: trigger
id: print_started
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_number.set_value
target:
entity_id:
- input_number.sparkx_i7_slot_1_grams
- input_number.sparkx_i7_slot_2_grams
- input_number.sparkx_i7_slot_3_grams
- input_number.sparkx_i7_slot_4_grams
data:
value: 0
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot if new_slot not in [''unknown'', ''unavailable''] else
'''' }}'
- conditions:
condition: template
value_template: '{{ old_slot not in ['''', ''unknown'', ''unavailable''] and
new_slot not in ['''', ''unknown'', ''unavailable''] and new_slot != old_slot
}}'
sequence:
- variables:
grams: '{{ (([cur | float - (states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0)), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''')
| lower) == color and (state_attr(e[:-10], ''location'') | default('''',
true) | lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b)
| float(0)) > 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'')
%}{% endif %}{% endif %}{% endfor %}{{ ns.id }}'
- if:
condition: template
value_template: '{{ grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ grams | float(0) }}'
- if:
condition: template
value_template: '{{ old_slot.split('' '')[-1] in [''1'', ''2'', ''3'',
''4''] }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ old_slot.split(' ')[-1]
}}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ old_slot.split(''
'')[-1] ~ ''_grams'') | float(0)) + (grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool with remaining
weight matches that color. Register the new roll in Spoolman, then
adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool with remaining
weight matches that color. Register the new roll in Spoolman, then
adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool with remaining
weight matches that color. Register the new roll in Spoolman, then
adjust manually if needed.'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
- conditions:
condition: template
value_template: '{{ old_slot in ['''', ''unknown'', ''unavailable''] and new_slot
not in ['''', ''unknown'', ''unavailable''] }}'
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
mode: queued
max: 10
@@ -0,0 +1,152 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238762'
captured: '2026-10-12T16:31:06.438795+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
and per-slot gram counters and latches the active CFS slot. On every slot change
mid-print, deducts the exact extrusion of the finished segment (used_material_length
delta x g/cm) from the Spoolman spool in the CFS Lite location matching the previous
slot color hex (only if that spool has remaining weight), accumulates grams per
slot, notifies on no-match, then re-baselines the checkpoint and advances the
latch.'
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
id: print_started
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
id: slot_changed
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
new_slot: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
- choose:
- conditions:
condition: trigger
id: print_started
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_number.set_value
target:
entity_id:
- input_number.sparkx_i7_slot_1_grams
- input_number.sparkx_i7_slot_2_grams
- input_number.sparkx_i7_slot_3_grams
- input_number.sparkx_i7_slot_4_grams
data:
value: 0
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot if new_slot not in [''unknown'', ''unavailable''] else
'''' }}'
- conditions:
condition: template
value_template: '{{ old_slot not in ['''', ''unknown'', ''unavailable''] and
new_slot not in ['''', ''unknown'', ''unavailable''] and new_slot != old_slot
}}'
sequence:
- variables:
grams: '{{ (([cur | float - (states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0)), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''')
| lower) == color and (state_attr(e[:-10], ''location'') | default('''',
true) | lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b)
| float(0)) > 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'')
%}{% endif %}{% endif %}{% endfor %}{{ ns.id }}'
- if:
condition: template
value_template: '{{ grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ grams | float(0) }}'
- if:
condition: template
value_template: '{{ old_slot.split('' '')[-1] in [''1'', ''2'', ''3'',
''4''] }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ old_slot.split(' ')[-1]
}}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ old_slot.split(''
'')[-1] ~ ''_grams'') | float(0)) + (grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
- conditions:
condition: template
value_template: '{{ old_slot in ['''', ''unknown'', ''unavailable''] and new_slot
not in ['''', ''unknown'', ''unavailable''] }}'
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
mode: queued
max: 10
@@ -0,0 +1,152 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238762'
captured: '2026-10-12T16:31:20.387625+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
and per-slot gram counters and latches the active CFS slot. On every slot change
mid-print, deducts the exact extrusion of the finished segment (used_material_length
delta x g/cm) from the Spoolman spool in the CFS Lite location matching the previous
slot color hex (only if that spool has remaining weight), accumulates grams per
slot, notifies on no-match, then re-baselines the checkpoint and advances the
latch.'
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
id: print_started
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
id: slot_changed
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
new_slot: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
- choose:
- conditions:
condition: trigger
id: print_started
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_number.set_value
target:
entity_id:
- input_number.sparkx_i7_slot_1_grams
- input_number.sparkx_i7_slot_2_grams
- input_number.sparkx_i7_slot_3_grams
- input_number.sparkx_i7_slot_4_grams
data:
value: 0
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot if new_slot not in [''unknown'', ''unavailable''] else
'''' }}'
- conditions:
condition: template
value_template: '{{ old_slot not in ['''', ''unknown'', ''unavailable''] and
new_slot not in ['''', ''unknown'', ''unavailable''] and new_slot != old_slot
}}'
sequence:
- variables:
grams: '{{ (([cur | float - (states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0)), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''')
| lower) == color and (state_attr(e[:-10], ''location'') | default('''',
true) | lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b)
| float(0)) > 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'')
%}{% endif %}{% endif %}{% endfor %}{{ ns.id }}'
- if:
condition: template
value_template: '{{ grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ grams | float(0) }}'
- if:
condition: template
value_template: '{{ old_slot.split('' '')[-1] in [''1'', ''2'', ''3'',
''4''] }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ old_slot.split(' ')[-1]
}}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ old_slot.split(''
'')[-1] ~ ''_grams'') | float(0)) + (grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
- conditions:
condition: template
value_template: '{{ old_slot in ['''', ''unknown'', ''unavailable''] and new_slot
not in ['''', ''unknown'', ''unavailable''] }}'
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
mode: queued
max: 10
@@ -0,0 +1,152 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238762'
captured: '2026-10-15T13:23:53.053853+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
and per-slot gram counters and latches the active CFS slot. On every slot change
mid-print, deducts the exact extrusion of the finished segment (used_material_length
delta x g/cm) from the Spoolman spool in the CFS Lite location matching the previous
slot color hex (only if that spool has remaining weight), accumulates grams per
slot, notifies on no-match, then re-baselines the checkpoint and advances the
latch.'
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
id: print_started
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
id: slot_changed
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
new_slot: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
- choose:
- conditions:
condition: trigger
id: print_started
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_number.set_value
target:
entity_id:
- input_number.sparkx_i7_slot_1_grams
- input_number.sparkx_i7_slot_2_grams
- input_number.sparkx_i7_slot_3_grams
- input_number.sparkx_i7_slot_4_grams
data:
value: 0
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot if new_slot not in [''unknown'', ''unavailable''] else
'''' }}'
- conditions:
condition: template
value_template: '{{ old_slot not in ['''', ''unknown'', ''unavailable''] and
new_slot not in ['''', ''unknown'', ''unavailable''] and new_slot != old_slot
}}'
sequence:
- variables:
grams: '{{ (([cur | float - (states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0)), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (state_attr(e[:-10], ''location'')
| default('''', true) | lower) == (''cfs lite '' ~ old_slot.split(''_'')[-1])
%}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == ''''
%}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{% endfor
%}{{ ns.id }}'
- if:
condition: template
value_template: '{{ grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ grams | float(0) }}'
- if:
condition: template
value_template: '{{ old_slot.split(''_'')[-1] in [''1'', ''2'', ''3'',
''4''] }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ old_slot.split('_')[-1]
}}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ old_slot.split(''_'')[-1]
~ ''_grams'') | float(0)) + (grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Segment of {{ grams }} g from {{ old_slot }} (color #{{ color
| upper }}) could not be deducted - no Spoolman spool in the CFS Lite
location with remaining weight matches that color. Register the new
roll in Spoolman with location CFS Lite, then adjust manually if needed.'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
- conditions:
condition: template
value_template: '{{ old_slot in ['''', ''unknown'', ''unavailable''] and new_slot
not in ['''', ''unknown'', ''unavailable''] }}'
sequence:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ new_slot }}'
mode: queued
max: 10
@@ -0,0 +1,122 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: '1791477238799'
captured: '2026-10-15T13:23:53.149869+00:00'
tool: ha_config_set_automation
config:
id: '1791477238799'
alias: SparkX i7 - Filament sufficiency check at print start
description: When a print starts and stays printing for 45 s, reports how much filament
the job needs, how much has already been used and how much is left, then compares
the loaded CFS Lite spools against that. A single-colour job whose colour is in
a loaded slot is checked exactly against that slot's spool; otherwise the slicer
gives no per-colour figure, so each loaded spool is compared against the whole
job total. Always sends a notification.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
for: 00:00:45
conditions: []
actions:
- variables:
gcm: '{{ states(''input_number.sparkx_i7_filament_g_cm'') | float(0.0298) }}'
length_cm: '{{ states(''sensor.sparkx_i7_expected_material_length'') | float(0)
}}'
weight_g: '{{ states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
}}'
job_g: '{{ ((weight_g | float) if (weight_g | float) > 0 else (length_cm | float)
* (gcm | float)) | round(1) }}'
used_len: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
used_g: '{{ (((used_len | float) * (gcm | float)) | round(1)) }}'
gcode_file: '{{ state_attr(''sensor.sparkx_i7_expected_material_length'', ''gcode_file'')
| default('''', true) }}'
- variables:
report: "{% set cols = namespace(list=[]) %}\n{% for n in ['1','2','3','4']\
\ %}{% set cc = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_color')\
\ | replace('#','') | lower %}{% if cc not in ['','none','unknown','unavailable']\
\ %}{% set cols.list = cols.list + [cc] %}{% endif %}{% endfor %}\n{% set\
\ gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}{% set q = p | replace('#','')\
\ | lower | trim %}{% if q not in ['','none','unknown','unavailable'] %}{%\
\ set gc.list = gc.list + [q] %}{% endif %}{% endfor %}\n{% set mc = namespace(list=[])\
\ %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','material')\
\ | default('', true) | string).split(';') %}{% set q = p | trim %}{% if q\
\ not in ['','none','unknown','unavailable'] %}{% set mc.list = mc.list +\
\ [q] %}{% endif %}{% endfor %}\n{% set single = (gc.list | length) == 1 %}\n\
{% set gcol = gc.list[0] if single else '' %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot if\
\ aslot in ['1','2','3','4'] else '' %}\n{% set rem_g = ([((job_g | float)\
\ - (used_g | float)), 0] | max) | round(1) %}\n{% set ns = namespace(cover=[],\
\ below=[], short=[], ok=[], missing=[], loaded=[], match_label='', match_rem=0)\
\ %}\n{% for n in ['1','2','3','4'] %}\n{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_'\
\ ~ n ~ '_color') | replace('#','') | lower %}\n{% if c not in ['','none','unknown','unavailable']\
\ %}\n{% set cname = states('sensor.sparkx_i7_slot_' ~ n ~ '_color_name')\
\ %}\n{% set flabel = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_filament')\
\ %}\n{% set label = 'Slot ' ~ n ~ ' ' ~ (cname if cname not in ['','unknown','unavailable']\
\ else (flabel if flabel not in ['','unknown','unavailable'] else ('#' ~ (c\
\ | upper)))) %}\n{% set sp = namespace(id='', rem=0, fw=0) %}\n{% for e in\
\ integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id\
\ == '' and (state_attr(e[:-10],'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10])\
\ | float(0) %}\n{% set sp.fw = state_attr(e[:-10],'filament_weight') | float(0)\
\ %}\n{% endif %}\n{% endfor %}\n{% set pct = ((((sp.rem | float) / (sp.fw\
\ | float)) * 100) | round(0) | int) if (sp.fw | float) > 0 else 0 %}\n{%\
\ if sp.id != '' %}{% set ns.loaded = ns.loaded + [label ~ ': ' ~ (sp.rem\
\ | round(1)) ~ ' g (' ~ pct ~ '%)'] %}{% endif %}\n{% if sp.id != '' and\
\ single and n == aslot %}{% set ns.match_label = label %}{% set ns.match_rem\
\ = sp.rem %}{% endif %}\n{% if sp.id != '' %}\n{% if single and n == aslot\
\ %}\n{% if (sp.rem | float) < (job_g | float) %}{% set ns.short = ns.short\
\ + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, ' ~ job_g\
\ ~ ' g needed'] %}\n{% else %}{% set ns.ok = ns.ok + [label ~ ': ' ~ (sp.rem\
\ | round(1)) ~ ' g (' ~ pct ~ '%) left, ' ~ job_g ~ ' g needed'] %}{% endif\
\ %}\n{% elif single %}\n{% if (sp.rem | float) >= (job_g | float) %}{% set\
\ ns.cover = ns.cover + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct\
\ ~ '%)'] %}\n{% else %}{% set ns.below = ns.below + [label ~ ': ' ~ (sp.rem\
\ | round(1)) ~ ' g (' ~ pct ~ '%)'] %}{% endif %}\n{% else %}\n{% if (sp.rem\
\ | float) < (job_g | float) %}{% set ns.short = ns.short + [label ~ ': '\
\ ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, up to ' ~ job_g ~ ' g needed']\
\ %}\n{% else %}{% set ns.ok = ns.ok + [label ~ ': ' ~ (sp.rem | round(1))\
\ ~ ' g (' ~ pct ~ '%) left, up to ' ~ job_g ~ ' g needed'] %}{% endif %}\n\
{% endif %}\n{% elif job_g > 0 %}\n{% set ns.missing = ns.missing + [label\
\ ~ ' (#' ~ (c | upper) ~ ')'] %}\n{% endif %}\n{% endif %}\n{% endfor %}\n\
Job: {{ gcode_file if gcode_file not in ['','unknown','unavailable'] else\
\ (state_attr('sensor.sparkx_i7_print_status','file') | default('', true)\
\ | string).split('/')[-1] }}\nNeeds {{ job_g | round(1) }} g ({{ length_cm\
\ | round(1) }} cm) \xB7 used {{ used_g }} g \xB7 {{ rem_g }} g left to print\n\
Slicer: {{ (mc.list | join(', ')) if mc.list else 'material unknown' }} \xB7\
\ {{ ('single colour #' ~ (gcol | upper)) if single else ((gc.list | length)\
\ ~ ' colours') }}\n{% if job_g <= 0 %}Cannot verify: slicer filament estimate\
\ not available yet.{% if ns.loaded %}\nLoaded:\n- {{ ns.loaded | join('\\\
n- ') }}{% endif %}\n{% elif single and aslot != '' %}\n{% if ns.short %}NOT\
\ ENOUGH filament:\n- {{ ns.short | join('\\n- ') }}\n{% elif ns.match_label\
\ %}Enough filament: {{ ns.match_label }}: {{ ns.match_rem | round(1) }} g\
\ left, {{ job_g }} g needed.\n{% else %}Active slot {{ aslot }} has no Spoolman\
\ spool at CFS Lite, so remaining cannot be checked.{% endif %}\n{% elif single\
\ %}No exact colour match for the print colour #{{ gcol | upper }} in a loaded\
\ CFS slot, so the exact spool cannot be identified.{% if ns.cover %}\nWould\
\ cover {{ job_g }} g:\n- {{ ns.cover | join('\\n- ') }}{% endif %}{% if ns.below\
\ %}\nBelow {{ job_g }} g:\n- {{ ns.below | join('\\n- ') }}{% endif %}{%\
\ if not ns.cover and not ns.below %}\nNo loaded CFS slot has a matching Spoolman\
\ spool to compare.{% endif %}\n{% elif ns.short %}NOT ENOUGH filament - possible\
\ shortfall:\n- {{ ns.short | join('\\n- ') }}{% if ns.ok %}\nOK (would still\
\ cover the whole job):\n- {{ ns.ok | join('\\n- ') }}{% endif %}{% if ns.missing\
\ %}\nNo Spoolman spool matched for:\n- {{ ns.missing | join('\\n- ') }}{%\
\ endif %}\n{% elif ns.ok %}Enough filament:\n- {{ ns.ok | join('\\n- ') }}{%\
\ if ns.missing %}\nNo Spoolman spool matched for:\n- {{ ns.missing | join('\\\
n- ') }}{% endif %}\n{% elif ns.missing %}Could not match any loaded CFS slot\
\ to a Spoolman spool.{% endif %}"
- action: notify.persistent_notification
data:
title: Print started - filament check
message: '{{ report }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print started - filament check
message: '{{ report }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print started - filament check
message: '{{ report }}'
mode: single
@@ -0,0 +1,39 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.3d_print_complete_snapshot
captured: '2026-10-03T15:16:22.651698+00:00'
tool: ha_config_set_automation
config:
id: '1787462132503'
alias: 3D Print Complete Snapshot - Telegram
description: Sends a Telegram photo with a SparkX i7 camera snapshot when a print
finishes successfully. Mobile completion notifications are handled by the Creality
integration.
triggers:
- entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
trigger: state
actions:
- variables:
completion_message: '{% set file = trigger.to_state.attributes.get(''file'',
'''') %} {% set name = ''Print'' if file in ['''', none, ''unknown'', ''unavailable'']
else file.split(''/'')[-1].replace(''.gcode'', '''') %} {% set seconds = trigger.to_state.attributes.get(''job_time_s'',
0) | int(0) %} {{ name }} finished successfully at {{ now().strftime(''%I:%M
%p'').lstrip(''0'') }}. Total time: {% if seconds >= 3600 %}{{ seconds //
3600 }}h {{ ((seconds % 3600) // 60) }}m {% else %}{{ ((seconds % 3600) //
60) }}m{% endif %}'
- action: camera.snapshot
data:
filename: /config/www/sparkx_i7_complete_snapshot.jpg
target:
entity_id: camera.sparkx_i7_printer_camera
- action: telegram_bot.send_photo
data:
caption: '{{ completion_message }}'
file: /config/www/sparkx_i7_complete_snapshot.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
mode: single
@@ -0,0 +1,78 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.3d_print_complete_snapshot
captured: '2026-10-03T15:17:03.603772+00:00'
tool: ha_config_set_automation
config:
id: '1787462132503'
alias: 3D Print Complete Snapshot - Telegram
description: Sends a Telegram photo with a SparkX i7 camera snapshot when a print
finishes successfully. Mobile completion notifications are handled by the Creality
integration.
triggers:
- entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
trigger: state
actions:
- variables:
completion_message: '{% set file = trigger.to_state.attributes.get(''file'',
'''') %} {% set name = ''Print'' if file in ['''', none, ''unknown'', ''unavailable'']
else file.split(''/'')[-1].replace(''.gcode'', '''') %} {% set seconds = trigger.to_state.attributes.get(''job_time_s'',
0) | int(0) %} {{ name }} finished successfully at {{ now().strftime(''%I:%M
%p'').lstrip(''0'') }}. Total time: {% if seconds >= 3600 %}{{ seconds //
3600 }}h {{ ((seconds % 3600) // 60) }}m {% else %}{{ ((seconds % 3600) //
60) }}m{% endif %}'
- action: camera.snapshot
data:
filename: /config/www/sparkx_i7_complete_snapshot.jpg
target:
entity_id: camera.sparkx_i7_printer_camera
- variables:
sparkx_needs_light: '{{ not is_state(''light.sparkx_i7_light'', ''on'') }}'
bedroom_needs_light: '{{ not is_state(''light.bedroom_lamp_2'', ''on'') }}'
- if:
- condition: template
value_template: '{{ sparkx_needs_light }}'
then:
- action: light.turn_on
continue_on_error: true
target:
entity_id: light.sparkx_i7_light
- if:
- condition: template
value_template: '{{ bedroom_needs_light }}'
then:
- action: light.turn_on
continue_on_error: true
target:
entity_id: light.bedroom_lamp_2
- delay:
seconds: 3
- delay:
seconds: 2
- if:
- condition: template
value_template: '{{ sparkx_needs_light }}'
then:
- action: light.turn_off
continue_on_error: true
target:
entity_id: light.sparkx_i7_light
- if:
- condition: template
value_template: '{{ bedroom_needs_light }}'
then:
- action: light.turn_off
continue_on_error: true
target:
entity_id: light.bedroom_lamp_2
- action: telegram_bot.send_photo
data:
caption: '{{ completion_message }}'
file: /config/www/sparkx_i7_complete_snapshot.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
mode: single
@@ -0,0 +1,126 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.3d_print_early_layers_snapshot
captured: '2026-10-01T23:47:05.577959+00:00'
tool: ha_config_set_automation
config:
id: '1787462157568'
alias: 3D Print Early Layers Snapshot
description: Telegram-only snapshots from all 3 printer cameras. Fires when Z crosses
1.0 mm, then again at 25%, 50% and 75% print progress. Lights the SparkX i7 and
bedroom lamp only if they are currently off, then restores whatever state they
were in before capturing.
triggers:
- above: 1
entity_id: sensor.sparkx_i7_position_z
trigger: numeric_state
- above: 25
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
- above: 50
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
- above: 75
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
milestone: '{% set source = trigger.get(''entity_id'', '''') %} {% set tstate
= trigger.get(''to_state'') %} {% set value = tstate.state | float(0) if tstate
else 0 %} {% if source == ''sensor.sparkx_i7_position_z'' %} First layers
(Z {{ value }} mm) {% elif source == ''sensor.sparkx_i7_print_progress'' %}
{% if value >= 75 %} 75% complete {% elif value >= 50 %} 50% complete {% else
%} 25% complete {% endif %} {% else %} Manual test {% endif %}'
tag: '{% set source = trigger.get(''entity_id'', '''') %} {% if source == ''sensor.sparkx_i7_position_z''
%} z1 {% elif source == ''sensor.sparkx_i7_print_progress'' %} p{{ trigger.get(''above'',
0) | int }} {% else %} test {% endif %}'
- variables:
bedroom_needs_light: '{{ not is_state(''light.bedroom_lamp_2'', ''on'') }}'
message: "{% set file = state_attr('sensor.sparkx_i7_print_status', 'file')\
\ or '' %} {% set name = 'Print' if file in ['', none, 'unknown', 'unavailable']\
\ else file.split('/')[-1].replace('.gcode', '') %} {% set pct = states('sensor.sparkx_i7_print_progress')\
\ | int(0) %} {% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %} 3D print \xB7 {{ milestone }} \xB7 {{ name }} at {{ pct }}%{% if left\
\ > 0 %} \xB7 {{ (left // 3600) }}h {{ ((left % 3600) // 60) }}m left{% endif\
\ %}"
sparkx_needs_light: '{{ not is_state(''light.sparkx_i7_light'', ''on'') }}'
- if:
- condition: template
value_template: '{{ sparkx_needs_light }}'
then:
- action: light.turn_on
continue_on_error: true
target:
entity_id: light.sparkx_i7_light
- if:
- condition: template
value_template: '{{ bedroom_needs_light }}'
then:
- action: light.turn_on
continue_on_error: true
target:
entity_id: light.bedroom_lamp_2
- delay:
seconds: 3
- parallel:
- action: camera.snapshot
data:
filename: /config/www/sparkx_{{ tag }}.jpg
target:
entity_id: camera.sparkx_i7_printer_camera
- action: camera.snapshot
data:
filename: /config/www/ender5_{{ tag }}.jpg
target:
entity_id: camera.endercamera_duckdns_org
- action: camera.snapshot
data:
filename: /config/www/ender_cam2_{{ tag }}.jpg
target:
entity_id: camera.endercamera2_duckdns_org
- delay:
seconds: 2
- if:
- condition: template
value_template: '{{ sparkx_needs_light }}'
then:
- action: light.turn_off
continue_on_error: true
target:
entity_id: light.sparkx_i7_light
- if:
- condition: template
value_template: '{{ bedroom_needs_light }}'
then:
- action: light.turn_off
continue_on_error: true
target:
entity_id: light.bedroom_lamp_2
- action: telegram_bot.send_photo
data:
caption: "SparkX i7 \u2014 {{ message }}"
file: /config/www/sparkx_{{ tag }}.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
- action: telegram_bot.send_photo
data:
caption: "Back Camera \u2014 {{ message }}"
file: /config/www/ender5_{{ tag }}.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
- action: telegram_bot.send_photo
data:
caption: "Bed Camera \u2014 {{ message }}"
file: /config/www/ender_cam2_{{ tag }}.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
max: 4
mode: parallel
@@ -0,0 +1,122 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.3d_print_early_layers_snapshot
captured: '2026-10-01T23:49:31.000350+00:00'
tool: ha_config_set_automation
config:
id: '1787462157568'
alias: 3D Print Early Layers Snapshot
description: Telegram-only snapshots from all 3 printer cameras. Fires when Z crosses
1.0 mm, then again at 25%, 50% and 75% print progress. Lights the SparkX i7 and
bedroom lamp only if they are currently off, then restores whatever state they
were in before capturing.
triggers:
- above: 5
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
- above: 25
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
- above: 50
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
- above: 75
entity_id: sensor.sparkx_i7_print_progress
trigger: numeric_state
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- variables:
milestone: '{% set above = trigger.get(''above'', 0) | int(0) %}{% if above
>= 75 %} 75% complete{% elif above >= 50 %} 50% complete{% elif above >= 25
%} 25% complete{% elif above >= 5 %} 5% complete{% else %} Print progress
{{ above }}%{% endif %}'
tag: p{{ trigger.get('above', 0) | int(0) }}
- variables:
bedroom_needs_light: '{{ not is_state(''light.bedroom_lamp_2'', ''on'') }}'
message: "{% set file = state_attr('sensor.sparkx_i7_print_status', 'file')\
\ or '' %} {% set name = 'Print' if file in ['', none, 'unknown', 'unavailable']\
\ else file.split('/')[-1].replace('.gcode', '') %} {% set pct = states('sensor.sparkx_i7_print_progress')\
\ | int(0) %} {% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %} 3D print \xB7 {{ milestone }} \xB7 {{ name }} at {{ pct }}%{% if left\
\ > 0 %} \xB7 {{ (left // 3600) }}h {{ ((left % 3600) // 60) }}m left{% endif\
\ %}"
sparkx_needs_light: '{{ not is_state(''light.sparkx_i7_light'', ''on'') }}'
- if:
- condition: template
value_template: '{{ sparkx_needs_light }}'
then:
- action: light.turn_on
continue_on_error: true
target:
entity_id: light.sparkx_i7_light
- if:
- condition: template
value_template: '{{ bedroom_needs_light }}'
then:
- action: light.turn_on
continue_on_error: true
target:
entity_id: light.bedroom_lamp_2
- delay:
seconds: 3
- parallel:
- action: camera.snapshot
data:
filename: /config/www/sparkx_{{ tag }}.jpg
target:
entity_id: camera.sparkx_i7_printer_camera
- action: camera.snapshot
data:
filename: /config/www/ender5_{{ tag }}.jpg
target:
entity_id: camera.endercamera_duckdns_org
- action: camera.snapshot
data:
filename: /config/www/ender_cam2_{{ tag }}.jpg
target:
entity_id: camera.endercamera2_duckdns_org
- delay:
seconds: 2
- if:
- condition: template
value_template: '{{ sparkx_needs_light }}'
then:
- action: light.turn_off
continue_on_error: true
target:
entity_id: light.sparkx_i7_light
- if:
- condition: template
value_template: '{{ bedroom_needs_light }}'
then:
- action: light.turn_off
continue_on_error: true
target:
entity_id: light.bedroom_lamp_2
- action: telegram_bot.send_photo
data:
caption: "SparkX i7 \u2014 {{ message }}"
file: /config/www/sparkx_{{ tag }}.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
- action: telegram_bot.send_photo
data:
caption: "Back Camera \u2014 {{ message }}"
file: /config/www/ender5_{{ tag }}.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
- action: telegram_bot.send_photo
data:
caption: "Bed Camera \u2014 {{ message }}"
file: /config/www/ender_cam2_{{ tag }}.jpg
parse_mode: plain_text
target:
entity_id: notify.franco
max: 4
mode: parallel
@@ -0,0 +1,25 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.basement_temperature_change
captured: '2026-10-04T23:32:18.963450+00:00'
tool: ha_config_set_automation
config:
id: '1781793117883'
alias: Basement Temperature Change
description: ''
triggers:
- trigger: numeric_state
entity_id: sensor.basement_temperature
above: 15
- trigger: numeric_state
entity_id: sensor.basement_temperature
below: 10
conditions: []
actions:
- action: notify.notify
metadata: {}
data:
title: Basement Temperature Change
message: Basement Temperature Changed!
mode: single
@@ -0,0 +1,34 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.cfs_box_1_desiccant_pack_due
captured: '2026-10-02T20:48:40.265891+00:00'
tool: ha_config_set_automation
config:
id: '1790973987624'
alias: CFS Box 1 - Desiccant Pack Due
description: 'Notify when the SparkX i7 CFS box 1 humidity stays at or above 34%
for 60 minutes, meaning the desiccant pack needs replacing. The short spikes
that happen when the box is opened to swap a filament never last that long.'
triggers:
- above: 33.9
entity_id: sensor.sparkx_i7_cfs_box_1_humidity
for:
minutes: 60
trigger: numeric_state
actions:
- action: notify.notify
data:
message: CFS box 1 humidity has been {{ reading }}% or higher for 60 minutes
(threshold 34%). Time to replace the desiccant pack.
title: 'CFS Box 1: replace desiccant pack'
- action: notify.persistent_notification
data:
message: CFS box 1 humidity has been {{ reading }}% or higher for 60 minutes
(threshold 34%). Time to replace the desiccant pack.
title: 'CFS Box 1: replace desiccant pack'
mode: single
variables:
reading: '{{ trigger.to_state.state | float | round(0) | int }}'
@@ -0,0 +1,34 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.printer_finished
captured: '2026-10-10T06:45:42.166180+00:00'
tool: ha_config_set_automation
config:
id: '1791614551939'
alias: Printer finished
description: Sets the job filament helper and notifies when the print reaches 98%
completion.
triggers:
- trigger: state
entity_id: sensor.sparkx_moonraker_progress
to: '98'
conditions: []
actions:
- action: input_text.set_value
target:
entity_id: input_text.job_filament
data:
value: '{{ states.sensor.sparkx_moonraker_filament_used.state_with_unit }}'
- action: notify.franco
data:
message: TTS
title: Printing complete
data:
tts_text: Print job is complete
- action: notify.franco
data:
title: "\U0001F5A8 Printer finished"
message: Printer job has finished
data: {}
mode: single
@@ -0,0 +1,57 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-08T16:34:33.721483+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions:
- condition: template
value_template: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
> 0 }}'
actions:
- variables:
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
}}'
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
- choose:
- conditions:
condition: template
value_template: '{{ spool_id > 0 }}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ weight | float(0) }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- conditions:
condition: template
value_template: '{{ spool_id <= 0 }}'
sequence:
- action: notify.persistent_notification
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_francos_ipad
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_sm_f956w
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
mode: single
@@ -0,0 +1,57 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-08T16:34:45.914807+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions:
- condition: template
value_template: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
> 0 }}'
actions:
- variables:
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
}}'
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
- choose:
- conditions:
condition: template
value_template: '{{ spool_id > 0 }}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ weight | float(0) }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- conditions:
condition: template
value_template: '{{ spool_id <= 0 }}'
sequence:
- action: notify.persistent_notification
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_francos_ipad
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_sm_f956w
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
mode: single
@@ -0,0 +1,57 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-08T17:47:57.827554+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions:
- condition: numeric_state
entity_id: sensor.sparkx_i7_filament_weight_estimated
above: 0
actions:
- variables:
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
}}'
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
- choose:
- conditions:
condition: template
value_template: '{{ spool_id > 0 }}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ weight | float(0) }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- conditions:
condition: template
value_template: '{{ spool_id <= 0 }}'
sequence:
- action: notify.persistent_notification
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_francos_ipad
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_sm_f956w
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
mode: single
@@ -0,0 +1,57 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-08T17:49:35.306437+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions:
- condition: numeric_state
entity_id: sensor.sparkx_i7_filament_weight_estimated
above: 0
actions:
- variables:
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
}}'
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
- choose:
- conditions:
condition: template
value_template: '{{ spool_id > 0 }}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ weight | float(0) }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- conditions:
condition: template
value_template: '{{ spool_id <= 0 }}'
sequence:
- action: notify.persistent_notification
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_francos_ipad
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_sm_f956w
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
mode: single
@@ -0,0 +1,57 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-08T17:50:27.997890+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions:
- condition: numeric_state
entity_id: sensor.sparkx_i7_filament_weight_estimated
above: 0
actions:
- variables:
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
}}'
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
- choose:
- conditions:
condition: template
value_template: '{{ spool_id > 0 }}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ weight | float(0) }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- conditions:
condition: template
value_template: '{{ spool_id <= 0 }}'
sequence:
- action: notify.persistent_notification
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_francos_ipad
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
- action: notify.mobile_app_sm_f956w
data:
title: Spoolman deduction skipped
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
\ latched for this print \u2014 nothing deducted."
mode: single
@@ -0,0 +1,141 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-11T03:52:39.789581+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
description: On print completion, deducts the final segment (used_material_length
delta since last checkpoint x g/cm) from the Spoolman spool in the CFS Lite location
matching the latched slot color (remaining weight > 0 guard), accumulates it per
slot, then sends a summary notification with total and per-slot breakdown whenever
anything was deducted. Silent when total is 0. Clears the latch and re-baselines
the checkpoint.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions: []
actions:
- variables:
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) }}'
- variables:
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
lower) == color and (state_attr(e[:-10], ''location'') | default('''', true)
| lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b) | float(0))
> 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{%
endif %}{% endfor %}{{ ns.id }}'
- variables:
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
''2'', ''3'', ''4''] else '''' }}'
- variables:
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
- if:
condition: template
value_template: '{{ final_grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ final_grams | float(0) }}'
- if:
condition: template
value_template: '{{ helper_idx != '''' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
| float(0)) + (final_grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- variables:
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
(ns.t + (nonhelper_g | float)) | round(1) }}'
- variables:
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
}}'
- if:
condition: template
value_template: '{{ summary_total | float > 0 }}'
then:
- action: notify.persistent_notification
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
mode: single
@@ -0,0 +1,152 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
captured: '2026-10-12T01:04:58.210558+00:00'
tool: ha_config_set_automation
config:
id: '1791477238729'
alias: SparkX i7 - Deduct filament in Spoolman on print complete
description: On print completion, deducts the final segment (used_material_length
delta since last checkpoint x g/cm) from the Spoolman spool in the CFS Lite location
matching the latched slot color (remaining weight > 0 guard), accumulates it per
slot, then sends a summary notification with total and per-slot breakdown whenever
anything was deducted. Silent when total is 0. Clears the latch and re-baselines
the checkpoint.
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
from: printing
to: completed
conditions: []
actions:
- variables:
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) }}'
- variables:
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.03))) | round(2) }}'
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
- variables:
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
lower) == color and (state_attr(e[:-10], ''location'') | default('''', true)
| lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b) | float(0))
> 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{%
endif %}{% endfor %}{{ ns.id }}'
- variables:
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
''2'', ''3'', ''4''] else '''' }}'
- variables:
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
- if:
condition: template
value_template: '{{ final_grams | float > 0 }}'
then:
- choose:
- conditions:
condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
}}'
sequence:
- action: spoolman.use_spool_filament
data:
id: '{{ spool_id | int(0) }}'
use_weight: '{{ final_grams | float(0) }}'
- if:
condition: template
value_template: '{{ helper_idx != '''' }}'
then:
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
data:
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
| float(0)) + (final_grams | float) }}'
default:
- action: notify.persistent_notification
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_francos_ipad
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- action: notify.mobile_app_sm_f956w
data:
title: 'Spoolman: no spool for slot color'
message: 'Print completed: final segment of {{ final_grams }} g from {{
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
}}) could not be deducted - no Spoolman spool in the CFS Lite location
with remaining weight matches that color. Register the new roll in Spoolman
with location CFS Lite, then adjust manually if needed.'
- variables:
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
(ns.t + (nonhelper_g | float)) | round(1) }}'
- variables:
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
}}'
- if:
condition: template
value_template: '{{ summary_total | float > 0 }}'
then:
- action: notify.persistent_notification
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_francos_ipad
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: notify.mobile_app_sm_f956w
data:
title: Print complete - Spoolman updated
message: 'Print complete - Spoolman deducted {{ summary_total }} g
{{ summary_lines }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_last_job_filament_weight
data:
value: '{{ final_grams }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_last_job_cost
data:
value: '{{ ((final_grams | float) * (states(''input_number.filament_price_per_kg'')
| float(25)) / 1000) | round(2) }}'
- action: input_number.set_value
target:
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
data:
value: '{{ cur }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
mode: single
@@ -0,0 +1,53 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_latch_print_spool_for_spoolman
captured: '2026-10-08T16:34:33.495188+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
- trigger: state
entity_id:
- sensor.sparkx_i7_cfs_box_1_slot_1_color
- sensor.sparkx_i7_cfs_box_1_slot_2_color
- sensor.sparkx_i7_cfs_box_1_slot_3_color
- sensor.sparkx_i7_cfs_box_1_slot_4_color
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- choose:
- conditions:
condition: template
value_template: '{{ trigger.entity_id == ''sensor.sparkx_i7_print_status''
}}'
sequence:
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- variables:
spool_id: "{%- set slot = states('sensor.sparkx_i7_active_filament_slot') -%}\n\
{%- set ce = 'sensor.sparkx_i7_cfs_' ~ (slot | lower | replace(' ', '_'))\
\ ~ '_color' -%}\n{%- set color = states(ce) | replace('#', '') | lower -%}\n\
{%- set ns = namespace(id = '') -%}\n{%- for e in integration_entities('spoolman')\
\ -%}\n {%- if e.endswith('_color_hex') and (states(e) | lower) == color\
\ -%}\n {%- set ns.id = states(e[:-10] ~ '_id') -%}\n {%- endif -%}\n\
{%- endfor -%}\n{{ ns.id }}"
- condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable''] }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ spool_id }}'
mode: single
@@ -0,0 +1,53 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_latch_print_spool_for_spoolman
captured: '2026-10-08T16:34:46.060135+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
- trigger: state
entity_id:
- sensor.sparkx_i7_cfs_box_1_slot_1_color
- sensor.sparkx_i7_cfs_box_1_slot_2_color
- sensor.sparkx_i7_cfs_box_1_slot_3_color
- sensor.sparkx_i7_cfs_box_1_slot_4_color
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- choose:
- conditions:
condition: template
value_template: '{{ trigger.entity_id == ''sensor.sparkx_i7_print_status''
}}'
sequence:
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- variables:
spool_id: "{%- set slot = states('sensor.sparkx_i7_active_filament_slot') -%}\n\
{%- set ce = 'sensor.sparkx_i7_cfs_' ~ (slot | lower | replace(' ', '_'))\
\ ~ '_color' -%}\n{%- set color = states(ce) | replace('#', '') | lower -%}\n\
{%- set ns = namespace(id = '') -%}\n{%- for e in integration_entities('spoolman')\
\ -%}\n {%- if e.endswith('_color_hex') and (states(e) | lower) == color\
\ -%}\n {%- set ns.id = states(e[:-10] ~ '_id') -%}\n {%- endif -%}\n\
{%- endfor -%}\n{{ ns.id }}"
- condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable''] }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ spool_id }}'
mode: single
@@ -0,0 +1,53 @@
# ha_mcp_backup
schema_version: 1
domain: automation
entity_id: automation.sparkx_i7_latch_print_spool_for_spoolman
captured: '2026-10-08T17:45:06.877265+00:00'
tool: ha_config_set_automation
config:
id: '1791477238762'
alias: SparkX i7 - Latch print spool for Spoolman
triggers:
- trigger: state
entity_id: sensor.sparkx_i7_print_status
to: printing
id: print_started
- trigger: state
entity_id: sensor.sparkx_i7_active_filament_slot
- trigger: state
entity_id:
- sensor.sparkx_i7_cfs_box_1_slot_1_color
- sensor.sparkx_i7_cfs_box_1_slot_2_color
- sensor.sparkx_i7_cfs_box_1_slot_3_color
- sensor.sparkx_i7_cfs_box_1_slot_4_color
conditions:
- condition: state
entity_id: sensor.sparkx_i7_print_status
state: printing
actions:
- choose:
- conditions:
condition: trigger
id: print_started
sequence:
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: ''
- variables:
spool_id: "{%- set slot = states('sensor.sparkx_i7_active_filament_slot') -%}\n\
{%- set ce = 'sensor.sparkx_i7_cfs_' ~ (slot | lower | replace(' ', '_'))\
\ ~ '_color' -%}\n{%- set color = states(ce) | replace('#', '') | lower -%}\n\
{%- set ns = namespace(id = '') -%}\n{%- for e in integration_entities('spoolman')\
\ -%}\n {%- if e.endswith('_color_hex') and (states(e) | lower) == color\
\ -%}\n {%- set ns.id = states(e[:-10] ~ '_id') -%}\n {%- endif -%}\n\
{%- endfor -%}\n{{ ns.id }}"
- condition: template
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable''] }}'
- action: input_text.set_value
target:
entity_id: input_text.sparkx_i7_print_spool_latch
data:
value: '{{ spool_id }}'
mode: single
@@ -0,0 +1,205 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-15T17:11:00.335551+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- heading: Filament Usage
heading_style: title
type: heading
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}\n{% for n in [1, 2, 3, 4]\
\ %}\n {% set sp = namespace(ent='') %}\n {% for s in states.sensor\
\ %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent')\
\ %}\n {% if sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set v.border = '#d0d0d0' if hex_clean | lower in ['#ffffff',\
\ '#fff'] else 'transparent' %}\n {% set v.html = \"<div class='tube-bg'><div\
\ class='tube-fill' style='height: \" ~ pct ~ \"%; background-color: \"\
\ ~ hex_clean ~ \";'></div><div class='tube-text'>\" ~ remain ~ \"g</div></div>\"\
\ %}\n {% set v.label = 'Slot ' ~ n %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap'>\"\
\ ~ v.html ~ \"<div class='slot-label'>\" ~ v.label ~ \"</div></div>\"\
\n },\n \"styles\": {\n \"card\": [\n {\"background\"\
: \"transparent\"},\n {\"box-shadow\": \"none\"},\n {\"\
border\": \"none\"},\n {\"padding\": \"8px 2px\"},\n {\"\
display\": \"flex\"},\n {\"flex-direction\": \"column\"},\n \
\ {\"align-items\": \"center\"}\n ],\n \"custom_fields\"\
: {\n \"tube\": [\n {\"width\": \"100%\"},\n \
\ {\"display\": \"flex\"},\n {\"flex-direction\": \"column\"\
},\n {\"align-items\": \"center\"}\n ]\n }\n },\n\
\ \"extra_styles\": \"\n .tube-wrap {\n display: flex;\n\
\ flex-direction: column;\n align-items: center;\n \
\ width: 100%;\n }\n .tube-bg {\n position: relative;\n\
\ width: 60px;\n height: 180px;\n background-color:\
\ #dedede;\n border-radius: 20px;\n overflow: hidden;\n\
\ border: 1px solid \" ~ v.border ~ \";\n display: flex;\n\
\ flex-direction: column;\n justify-content: flex-end;\n\
\ }\n .tube-empty {\n background: transparent;\n \
\ border: 2px dashed var(--error-color);\n }\n .tube-fill\
\ {\n width: 100%;\n border-radius: 0 0 19px 19px;\n \
\ }\n .tube-text {\n position: absolute;\n top: 48%;\n\
\ left: 50%;\n transform: translate(-50%, -50%);\n \
\ font-size: 13px;\n font-weight: 800;\n color: #111111;\n\
\ pointer-events: none;\n z-index: 2;\n white-space:\
\ nowrap;\n }\n .slot-label {\n margin-top: 8px;\n \
\ font-size: 12px;\n font-weight: 700;\n letter-spacing:\
\ 0.3px;\n color: var(--secondary-text-color);\n }\n \
\ .slot-warn {\n color: var(--error-color);\n }\n \",\n\
\ \"tap_action\": {\n \"action\": \"more-info\" if sp.ent != ''\
\ else \"none\"\n }\n } %}\n\n {% set ns.cards = ns.cards + [card]\
\ %}\n{% endfor %}\n{{ ns.cards }}\n"
type: custom:auto-entities
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total (cm)
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 1
icon: mdi:weight-gram
name: Current Job Weight (est.)
type: tile
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 20
min: 0
name: Flow
severity:
green: 0
red: 12
yellow: 6
type: gauge
type: grid
type: sections
@@ -0,0 +1,201 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-15T17:21:40.300831+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- heading: Filament Usage
heading_style: title
type: heading
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}\n{% for n in [1, 2, 3, 4]\
\ %}\n {% set sp = namespace(ent='') %}\n {% for s in states.sensor\
\ %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent')\
\ %}\n {% if sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set v.border = '#d0d0d0' if hex_clean | lower in ['#ffffff',\
\ '#fff'] else 'transparent' %}\n {% set v.html = \"<div class='tube-bg'><div\
\ class='tube-fill' style='height: \" ~ pct ~ \"%; background-color: \"\
\ ~ hex_clean ~ \";'></div><div class='tube-text'>\" ~ remain ~ \"g</div></div>\"\
\ %}\n {% set v.label = 'Slot ' ~ n %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap'>\"\
\ ~ v.html ~ \"<div class='slot-label'>\" ~ v.label ~ \"</div></div>\"\
\n },\n \"styles\": {\n \"card\": [\n {\"background\"\
: \"transparent\"},\n {\"box-shadow\": \"none\"},\n {\"\
border\": \"none\"},\n {\"padding\": \"8px 2px\"},\n {\"\
display\": \"flex\"},\n {\"flex-direction\": \"column\"},\n \
\ {\"align-items\": \"center\"}\n ],\n \"custom_fields\"\
: {\n \"tube\": [\n {\"width\": \"100%\"},\n \
\ {\"display\": \"flex\"},\n {\"flex-direction\": \"column\"\
},\n {\"align-items\": \"center\"}\n ]\n }\n },\n\
\ \"extra_styles\": \"\n .tube-wrap {\n display: flex;\n\
\ flex-direction: column;\n align-items: center;\n \
\ width: 100%;\n }\n .tube-bg {\n position: relative;\n\
\ width: 60px;\n height: 180px;\n background-color:\
\ #dedede;\n border-radius: 20px;\n overflow: hidden;\n\
\ border: 1px solid \" ~ v.border ~ \";\n display: flex;\n\
\ flex-direction: column;\n justify-content: flex-end;\n\
\ }\n .tube-empty {\n background: transparent;\n \
\ border: 2px dashed var(--error-color);\n }\n .tube-fill\
\ {\n width: 100%;\n border-radius: 0 0 19px 19px;\n \
\ }\n .tube-text {\n position: absolute;\n top: 48%;\n\
\ left: 50%;\n transform: translate(-50%, -50%);\n \
\ font-size: 13px;\n font-weight: 800;\n color: #111111;\n\
\ pointer-events: none;\n z-index: 2;\n white-space:\
\ nowrap;\n }\n .slot-label {\n margin-top: 8px;\n \
\ font-size: 12px;\n font-weight: 700;\n letter-spacing:\
\ 0.3px;\n color: var(--secondary-text-color);\n }\n \
\ .slot-warn {\n color: var(--error-color);\n }\n \",\n\
\ \"tap_action\": {\n \"action\": \"more-info\" if sp.ent != ''\
\ else \"none\"\n }\n } %}\n\n {% set ns.cards = ns.cards + [card]\
\ %}\n{% endfor %}\n{{ ns.cards }}\n"
type: custom:auto-entities
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
name: Print ETA
type: tile
vertical: false
grid_options:
columns: 6
rows: 1
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
yellow: 12
red: 24
type: gauge
type: grid
type: sections
@@ -0,0 +1,404 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-15T17:40:11.907712+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}\n{% for n in [1, 2, 3, 4]\
\ %}\n {% set sp = namespace(ent='') %}\n {% for s in states.sensor\
\ %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='') %}\n {% if sp.ent != '' %}\n {% set hex = state_attr(sp.ent,\
\ 'filament_color_hex') | default('44739e') %}\n {% set hex_clean =\
\ hex if hex.startswith('#') else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent,\
\ 'remaining_weight') | default(states(sp.ent)) | float(0)) | round(1)\
\ %}\n {% set total = state_attr(sp.ent, 'filament_weight') | float(1000)\
\ %}\n {% set raw_pct = ((remain / total) * 100) | round(1) if total\
\ > 0 else 0 %}\n {% set pct = 0 if raw_pct < 0 else (100 if raw_pct\
\ > 100 else raw_pct) %}\n {% set rem_n = states(sp.ent) | float(-1)\
\ %}\n {% set band = 2 if (rem_n >= 0 and rem_n < 25) else (1 if (rem_n\
\ >= 0 and rem_n < 100) else 0) %}\n {% set v.wrap = ' warn-crit' if\
\ band == 2 else (' warn-low' if band == 1 else '') %}\n {% set v.border\
\ = '#d0d0d0' if hex_clean | lower in ['#ffffff', '#fff'] else 'transparent'\
\ %}\n {% set v.html = \"<div class='tube-bg'><div class='tube-fill'\
\ style='height: \" ~ pct ~ \"%; background-color: \" ~ hex_clean ~ \"\
;'></div><div class='tube-text'>\" ~ remain ~ \"g</div></div>\" %}\n \
\ {% set v.label = 'Slot ' ~ n ~ (' \u26A0' if band > 0 else '') %}\n\
\ {% else %}\n {% set v.html = \"<div class='tube-bg tube-empty'></div>\"\
\ %}\n {% set v.label = \"<span class='slot-warn'>Slot \" ~ n ~ \"\
\ \u2014 empty</span>\" %}\n {% endif %}\n {% set card = {\n \"type\"\
: \"custom:button-card\",\n \"entity\": sp.ent if sp.ent != '' else\
\ 'sensor.sparkx_i7_active_filament_slot',\n \"show_icon\": false,\n\
\ \"show_state\": false,\n \"show_name\": false,\n \"custom_fields\"\
: {\n \"tube\": \"<div class='tube-wrap\" ~ v.wrap ~ \"'>\" ~ v.html\
\ ~ \"<div class='slot-label'>\" ~ v.label ~ \"</div></div>\"\n },\n\
\ \"styles\": {\n \"card\": [\n {\"background\": \"transparent\"\
},\n {\"box-shadow\": \"none\"},\n {\"border\": \"none\"\
},\n {\"padding\": \"8px 2px\"},\n {\"display\": \"flex\"\
},\n {\"flex-direction\": \"column\"},\n {\"align-items\"\
: \"center\"}\n ],\n \"custom_fields\": {\n \"tube\"\
: [\n {\"width\": \"100%\"},\n {\"display\": \"flex\"\
},\n {\"flex-direction\": \"column\"},\n {\"align-items\"\
: \"center\"}\n ]\n }\n },\n \"extra_styles\": \"\n\
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: #111111;\n pointer-events: none;\n z-index: 2;\n\
\ white-space: nowrap;\n }\n .slot-label {\n margin-top:\
\ 8px;\n font-size: 12px;\n font-weight: 700;\n letter-spacing:\
\ 0.3px;\n color: var(--secondary-text-color);\n }\n \
\ .slot-warn {\n color: var(--error-color);\n }\n .warn-low\
\ .tube-bg {\n background-color: #fff6df;\n outline: 2px\
\ solid var(--warning-color);\n }\n .warn-low .slot-label {\n\
\ color: var(--warning-color);\n }\n .warn-crit .tube-bg\
\ {\n background-color: #fdecea;\n outline: 2px solid var(--error-color);\n\
\ }\n .warn-crit .slot-label {\n color: var(--error-color);\n\
\ }\n \",\n \"tap_action\": {\n \"action\": \"more-info\"\
\ if sp.ent != '' else \"none\"\n }\n } %}\n\n {% set ns.cards =\
\ ns.cards + [card] %}\n{% endfor %}\n{{ ns.cards }}\n"
type: custom:auto-entities
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state == ''none'' %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set v = namespace(state='unknown', label='check\
\ unavailable') %}\n{% if job_g <= 0 %}\n{% set v.state = 'none' %}\n{%\
\ set v.label = 'no slicer estimate yet' %}\n{% elif s.short %}\n{% set\
\ v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH' %}\n{% elif s.ok %}\n\
{% set v.state = 'ok' %}\n{% set v.label = 'enough' %}\n{% elif single and\
\ aslot == '' %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no active\
\ CFS slot' %}\n{% elif single and not s.active %}\n{% set v.state = 'unknown'\
\ %}\n{% set v.label = 'active slot has no spool' %}\n{% elif s.matched\
\ == 0 %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no spool loaded'\
\ %}\n{% endif %}\n{{ job_g }} g needed \xB7 {{ used_g }} g used"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set v = namespace(state='unknown', label='check\
\ unavailable') %}\n{% if job_g <= 0 %}\n{% set v.state = 'none' %}\n{%\
\ set v.label = 'no slicer estimate yet' %}\n{% elif s.short %}\n{% set\
\ v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH' %}\n{% elif s.ok %}\n\
{% set v.state = 'ok' %}\n{% set v.label = 'enough' %}\n{% elif single and\
\ aslot == '' %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no active\
\ CFS slot' %}\n{% elif single and not s.active %}\n{% set v.state = 'unknown'\
\ %}\n{% set v.label = 'active slot has no spool' %}\n{% elif s.matched\
\ == 0 %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no spool loaded'\
\ %}\n{% endif %}\n{{ rem_g }} g left to print \xB7 {{ v.label }}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,421 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-15T21:01:06.734288+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}\n{% for n in [1, 2, 3, 4]\
\ %}\n {% set sp = namespace(ent='') %}\n {% for s in states.sensor\
\ %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='') %}\n {% if sp.ent != '' %}\n {% set hex = state_attr(sp.ent,\
\ 'filament_color_hex') | default('44739e') %}\n {% set hex_clean =\
\ hex if hex.startswith('#') else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent,\
\ 'remaining_weight') | default(states(sp.ent)) | float(0)) | round(1)\
\ %}\n {% set total = state_attr(sp.ent, 'filament_weight') | float(1000)\
\ %}\n {% set raw_pct = ((remain / total) * 100) | round(1) if total\
\ > 0 else 0 %}\n {% set pct = 0 if raw_pct < 0 else (100 if raw_pct\
\ > 100 else raw_pct) %}\n {% set rem_n = states(sp.ent) | float(-1)\
\ %}\n {% set band = 2 if (rem_n >= 0 and rem_n < 25) else (1 if (rem_n\
\ >= 0 and rem_n < 100) else 0) %}\n {% set v.wrap = ' warn-crit' if\
\ band == 2 else (' warn-low' if band == 1 else '') %}\n {% set v.border\
\ = '#d0d0d0' if hex_clean | lower in ['#ffffff', '#fff'] else 'transparent'\
\ %}\n {% set v.html = \"<div class='tube-bg'><div class='tube-fill'\
\ style='height: \" ~ pct ~ \"%; background-color: \" ~ hex_clean ~ \"\
;'></div><div class='tube-text'>\" ~ remain ~ \"g</div></div>\" %}\n \
\ {% set v.label = 'Slot ' ~ n ~ (' \u26A0' if band > 0 else '') %}\n\
\ {% else %}\n {% set v.html = \"<div class='tube-bg tube-empty'></div>\"\
\ %}\n {% set v.label = \"<span class='slot-warn'>Slot \" ~ n ~ \"\
\ \u2014 empty</span>\" %}\n {% endif %}\n {% set card = {\n \"type\"\
: \"custom:button-card\",\n \"entity\": sp.ent if sp.ent != '' else\
\ 'sensor.sparkx_i7_active_filament_slot',\n \"show_icon\": false,\n\
\ \"show_state\": false,\n \"show_name\": false,\n \"custom_fields\"\
: {\n \"tube\": \"<div class='tube-wrap\" ~ v.wrap ~ \"'>\" ~ v.html\
\ ~ \"<div class='slot-label'>\" ~ v.label ~ \"</div></div>\"\n },\n\
\ \"styles\": {\n \"card\": [\n {\"background\": \"transparent\"\
},\n {\"box-shadow\": \"none\"},\n {\"border\": \"none\"\
},\n {\"padding\": \"8px 2px\"},\n {\"display\": \"flex\"\
},\n {\"flex-direction\": \"column\"},\n {\"align-items\"\
: \"center\"}\n ],\n \"custom_fields\": {\n \"tube\"\
: [\n {\"width\": \"100%\"},\n {\"display\": \"flex\"\
},\n {\"flex-direction\": \"column\"},\n {\"align-items\"\
: \"center\"}\n ]\n }\n },\n \"extra_styles\": \"\n\
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: #111111;\n pointer-events: none;\n z-index: 2;\n\
\ white-space: nowrap;\n }\n .slot-label {\n margin-top:\
\ 8px;\n font-size: 12px;\n font-weight: 700;\n letter-spacing:\
\ 0.3px;\n color: var(--secondary-text-color);\n }\n \
\ .slot-warn {\n color: var(--error-color);\n }\n .warn-low\
\ .tube-bg {\n background-color: #fff6df;\n outline: 2px\
\ solid var(--warning-color);\n }\n .warn-low .slot-label {\n\
\ color: var(--warning-color);\n }\n .warn-crit .tube-bg\
\ {\n background-color: #fdecea;\n outline: 2px solid var(--error-color);\n\
\ }\n .warn-crit .slot-label {\n color: var(--error-color);\n\
\ }\n \",\n \"tap_action\": {\n \"action\": \"more-info\"\
\ if sp.ent != '' else \"none\"\n }\n } %}\n\n {% set ns.cards =\
\ ns.cards + [card] %}\n{% endfor %}\n{{ ns.cards }}\n"
type: custom:auto-entities
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,428 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T14:03:14.258687+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}\n{% for n in [1, 2, 3, 4]\
\ %}\n {% set sp = namespace(ent='') %}\n {% for s in states.sensor\
\ %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap {\n \
\ display: flex;\n flex-direction: column;\n align-items:\
\ center;\n width: 100%;\n }\n .tube-bg {\n position:\
\ relative;\n width: 60px;\n height: 180px;\n background-color:\
\ #dedede;\n border-radius: 20px;\n overflow: hidden;\n\
\ border: 1px solid \" ~ v.border ~ \";\n display: flex;\n\
\ flex-direction: column;\n justify-content: flex-end;\n\
\ }\n .tube-empty {\n background: transparent;\n \
\ border: 2px dashed var(--error-color);\n }\n .tube-fill\
\ {\n width: 100%;\n border-radius: 0 0 19px 19px;\n \
\ }\n .tube-text {\n position: absolute;\n top: 48%;\n\
\ left: 50%;\n transform: translate(-50%, -50%);\n \
\ font-size: 13px;\n font-weight: 800;\n color: \" ~ v.text\
\ ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~ \", 0 0 6px \" ~ v.halo\
\ ~ \";\n pointer-events: none;\n z-index: 2;\n white-space:\
\ nowrap;\n }\n .slot-label {\n margin-top: 8px;\n \
\ font-size: 12px;\n font-weight: 700;\n letter-spacing:\
\ 0.3px;\n color: var(--secondary-text-color);\n }\n \
\ .slot-warn {\n color: var(--error-color);\n }\n .warn-low\
\ .tube-bg {\n background-color: #fff6df;\n outline: 2px\
\ solid var(--warning-color);\n }\n .warn-low .slot-label {\n\
\ color: var(--warning-color);\n }\n .warn-crit .tube-bg\
\ {\n background-color: #fdecea;\n outline: 2px solid var(--error-color);\n\
\ }\n .warn-crit .slot-label {\n color: var(--error-color);\n\
\ }\n \",\n \"tap_action\": {\n \"action\": \"more-info\"\
\ if sp.ent != '' else \"none\"\n }\n } %}\n\n {% set ns.cards =\
\ ns.cards + [card] %}\n{% endfor %}\n{{ ns.cards }}\n"
type: custom:auto-entities
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,433 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:11:26.000588+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,501 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:13:44.170829+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: Slot 1
icon: mdi:printer-filament
multiline_secondary: true
primary: ''
secondary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}This print so far: {{ live | round(1) }} g{% else %}Last print:
{{ (states(''input_number.sparkx_i7_slot_1_grams'') | float(0)) | round(1)
}} g{% endif %}'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: Slot 2
icon: mdi:printer-filament
multiline_secondary: true
primary: ''
secondary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}This print so far: {{ live | round(1) }} g{% else %}Last print:
{{ (states(''input_number.sparkx_i7_slot_2_grams'') | float(0)) | round(1)
}} g{% endif %}'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: Slot 3
icon: mdi:printer-filament
multiline_secondary: true
primary: ''
secondary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}This print so far: {{ live | round(1) }} g{% else %}Last print:
{{ (states(''input_number.sparkx_i7_slot_3_grams'') | float(0)) | round(1)
}} g{% endif %}'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: Slot 4
icon: mdi:printer-filament
multiline_secondary: true
primary: ''
secondary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}This print so far: {{ live | round(1) }} g{% else %}Last print:
{{ (states(''input_number.sparkx_i7_slot_4_grams'') | float(0)) | round(1)
}} g{% endif %}'
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,497 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:16:07.146764+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: ''
icon: mdi:weight-gram
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: ''
icon: mdi:weight-gram
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: ''
icon: mdi:weight-gram
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: ''
icon: mdi:weight-gram
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,497 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:17:46.982906+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: ''
icon: none
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: ''
icon: none
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: ''
icon: none
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: ''
icon: none
multiline_secondary: false
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }} g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }} g{% endif %}'
secondary: ''
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,501 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:21:43.818350+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; font-size: 11px; padding: 2px; }'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; font-size: 11px; padding: 2px; }'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; font-size: 11px; padding: 2px; }'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; font-size: 11px; padding: 2px; }'
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,505 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:29:47.993746+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; padding: 0 4px; font-size: 12px; line-height:
1.2; } .mushroom-state { text-align: left; }'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; padding: 0 4px; font-size: 12px; line-height:
1.2; } .mushroom-state { text-align: left; }'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; padding: 0 4px; font-size: 12px; line-height:
1.2; } .mushroom-state { text-align: left; }'
- type: custom:mushroom-template-card
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: ''
icon: none
primary: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }}g{% endif %}'
secondary: ''
card_mod:
style: 'ha-card { text-align: left; padding: 0 4px; font-size: 12px; line-height:
1.2; } .mushroom-state { text-align: left; }'
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,581 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:30:24.143652+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: button-card
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: ''
show_icon: false
show_state: false
show_name: false
custom_fields:
value: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }}g{% endif %}'
styles:
card:
- background: transparent
- box-shadow: none
- border: none
- padding: 0 2px
- text-align: left
- justify-content: flex-start
- align-items: flex-start
custom_fields:
value:
- text-align: left
- font-size: 11px
- line-height: '1.1'
- padding: '0'
- margin: '0'
- justify-content: flex-start
- display: flex
tap_action:
action: none
- type: button-card
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: ''
show_icon: false
show_state: false
show_name: false
custom_fields:
value: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }}g{% endif %}'
styles:
card:
- background: transparent
- box-shadow: none
- border: none
- padding: 0 2px
- text-align: left
- justify-content: flex-start
- align-items: flex-start
custom_fields:
value:
- text-align: left
- font-size: 11px
- line-height: '1.1'
- padding: '0'
- margin: '0'
- justify-content: flex-start
- display: flex
tap_action:
action: none
- type: button-card
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: ''
show_icon: false
show_state: false
show_name: false
custom_fields:
value: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }}g{% endif %}'
styles:
card:
- background: transparent
- box-shadow: none
- border: none
- padding: 0 2px
- text-align: left
- justify-content: flex-start
- align-items: flex-start
custom_fields:
value:
- text-align: left
- font-size: 11px
- line-height: '1.1'
- padding: '0'
- margin: '0'
- justify-content: flex-start
- display: flex
tap_action:
action: none
- type: button-card
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: ''
show_icon: false
show_state: false
show_name: false
custom_fields:
value: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }}g{% endif %}'
styles:
card:
- background: transparent
- box-shadow: none
- border: none
- padding: 0 2px
- text-align: left
- justify-content: flex-start
- align-items: flex-start
custom_fields:
value:
- text-align: left
- font-size: 11px
- line-height: '1.1'
- padding: '0'
- margin: '0'
- justify-content: flex-start
- display: flex
tap_action:
action: none
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,533 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-16T20:32:05.728987+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_slot_1_color
name: ''
icon: none
state_content:
- state
grid_options:
columns: 3
tap_action:
action: none
card_mod:
style: 'ha-card { padding: 0 4px; margin: 0; } .tile { padding: 0; } .tile__title
{ display: none; } .tile__state { text-align: left; justify-content:
flex-start; font-size: 10px; line-height: 1; margin: 0; padding: 0;
} .tile__icon { display: none; }'
state_display: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }}g{% endif %}'
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_slot_2_color
name: ''
icon: none
state_content:
- state
grid_options:
columns: 3
tap_action:
action: none
card_mod:
style: 'ha-card { padding: 0 4px; margin: 0; } .tile { padding: 0; } .tile__title
{ display: none; } .tile__state { text-align: left; justify-content:
flex-start; font-size: 10px; line-height: 1; margin: 0; padding: 0;
} .tile__icon { display: none; }'
state_display: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }}g{% endif %}'
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_slot_3_color
name: ''
icon: none
state_content:
- state
grid_options:
columns: 3
tap_action:
action: none
card_mod:
style: 'ha-card { padding: 0 4px; margin: 0; } .tile { padding: 0; } .tile__title
{ display: none; } .tile__state { text-align: left; justify-content:
flex-start; font-size: 10px; line-height: 1; margin: 0; padding: 0;
} .tile__icon { display: none; }'
state_display: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }}g{% endif %}'
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_slot_4_color
name: ''
icon: none
state_content:
- state
grid_options:
columns: 3
tap_action:
action: none
card_mod:
style: 'ha-card { padding: 0 4px; margin: 0; } .tile { padding: 0; } .tile__title
{ display: none; } .tile__state { text-align: left; justify-content:
flex-start; font-size: 10px; line-height: 1; margin: 0; padding: 0;
} .tile__icon { display: none; }'
state_display: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }}g{% endif %}'
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- heading: Temperature
heading_style: title
icon: mdi:coolant-temperature
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,493 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-18T06:00:39.967779+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)') %}\n {% if\
\ sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.label = 'Slot ' ~ n ~\
\ (' \u26A0' if band > 0 else '') %}\n {% else %}\n {% set v.html\
\ = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label\
\ = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014 empty</span>\" %}\n\
\ {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\"\
,\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ v.html ~ \"<div class='slot-label'>\" ~ v.label\
\ ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n \
\ {\"background\": \"transparent\"},\n {\"box-shadow\": \"\
none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px\
\ 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .warn-low .tube-bg {\n background-color: #fff6df;\n\
\ outline: 2px solid var(--warning-color);\n }\n .warn-low\
\ .slot-label {\n color: var(--warning-color);\n }\n \
\ .warn-crit .tube-bg {\n background-color: #fdecea;\n outline:\
\ 2px solid var(--error-color);\n }\n .warn-crit .slot-label\
\ {\n color: var(--error-color);\n }\n \",\n \"tap_action\"\
: {\n \"action\": \"more-info\" if sp.ent != '' else \"none\"\n \
\ }\n } %}\n\n {% set ns.cards = ns.cards + [card] %}\n{% endfor %}\n\
{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,499 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: 3d-printer-cellphone
captured: '2026-10-18T06:04:51.942731+00:00'
tool: ha_config_set_dashboard
config:
views:
- sections:
- cards:
- card:
columns: 4
square: false
type: grid
card_param: cards
filter:
template: "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1]\
\ | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing',\
\ 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='')\
\ %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_')\
\ %}\n {% set loc = (s.attributes.location | default('')) | lower\
\ %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent =\
\ s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n\
\ {% set v = namespace(html='', label='Slot ' ~ n, border='transparent',\
\ wrap='', text='#111111', halo='rgba(255,255,255,0.95)', vendor='') %}\n\
\ {% if sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex')\
\ | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#')\
\ else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight')\
\ | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total\
\ = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set\
\ raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n\
\ {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct)\
\ %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3]\
\ | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb =\
\ hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg\
\ + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170)\
\ else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff'\
\ else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0\
\ and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n\
\ {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band\
\ == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n)\
\ else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower\
\ in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"\
<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~\
\ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\"\
\ ~ remain ~ \"g</div></div>\" %}\n {% set v.vendor = (state_attr(sp.ent,\
\ 'filament_vendor_name') | default('') | string | trim) %}{% set v.label\
\ = 'Slot ' ~ n ~ (' \u26A0' if band > 0 else '') %}\n {% else %}\n \
\ {% set v.html = \"<div class='tube-bg tube-empty'></div>\" %}\n \
\ {% set v.label = \"<span class='slot-warn'>Slot \" ~ n ~ \" \u2014\
\ empty</span>\" %}\n {% endif %}\n {% set card = {\n \"type\": \"\
custom:button-card\",\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n\
\ \"show_icon\": false,\n \"show_state\": false,\n \"show_name\"\
: false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\"\
\ ~ v.wrap ~ \"'>\" ~ ((\"<div class='slot-vendor'>\" ~ v.vendor ~ \"\
</div>\") if v.vendor else '') ~ v.html ~ \"<div class='slot-label'>\"\
\ ~ v.label ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\"\
: [\n {\"background\": \"transparent\"},\n {\"box-shadow\"\
: \"none\"},\n {\"border\": \"none\"},\n {\"padding\": \"\
8px 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ],\n \
\ \"custom_fields\": {\n \"tube\": [\n {\"width\": \"\
100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\"\
: \"column\"},\n {\"align-items\": \"center\"}\n ]\n \
\ }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg\
\ { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active\
\ .slot-label { color: var(--primary-color); font-weight: 800; } \
\ .tube-wrap {\n display: flex;\n flex-direction: column;\n\
\ align-items: center;\n width: 100%;\n }\n .tube-bg\
\ {\n position: relative;\n width: 60px;\n height:\
\ 180px;\n background-color: #dedede;\n border-radius: 20px;\n\
\ overflow: hidden;\n border: 1px solid \" ~ v.border ~\
\ \";\n display: flex;\n flex-direction: column;\n \
\ justify-content: flex-end;\n }\n .tube-empty {\n \
\ background: transparent;\n border: 2px dashed var(--error-color);\n\
\ }\n .tube-fill {\n width: 100%;\n border-radius:\
\ 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n\
\ top: 48%;\n left: 50%;\n transform: translate(-50%,\
\ -50%);\n font-size: 13px;\n font-weight: 800;\n \
\ color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~\
\ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n \
\ z-index: 2;\n white-space: nowrap;\n }\n .slot-label\
\ {\n margin-top: 8px;\n font-size: 12px;\n font-weight:\
\ 700;\n letter-spacing: 0.3px;\n color: var(--secondary-text-color);\n\
\ }\n .slot-warn {\n color: var(--error-color);\n \
\ }\n .slot-vendor {\n margin-bottom: 2px;\n font-size:\
\ 9px;\n font-weight: 700;\n letter-spacing: 0.2px;\n \
\ text-transform: uppercase;\n color: var(--secondary-text-color);\n\
\ max-width: 70px;\n overflow: hidden;\n text-overflow:\
\ ellipsis;\n white-space: nowrap;\n }\n .warn-low .tube-bg\
\ {\n background-color: #fff6df;\n outline: 2px solid var(--warning-color);\n\
\ }\n .warn-low .slot-label {\n color: var(--warning-color);\n\
\ }\n .warn-crit .tube-bg {\n background-color: #fdecea;\n\
\ outline: 2px solid var(--error-color);\n }\n .warn-crit\
\ .slot-label {\n color: var(--error-color);\n }\n \",\n\
\ \"tap_action\": {\n \"action\": \"more-info\" if sp.ent != ''\
\ else \"none\"\n }\n } %}\n\n {% set ns.cards = ns.cards + [card]\
\ %}\n{% endfor %}\n{{ ns.cards }}\n"
type: custom:auto-entities
- type: horizontal-stack
grid_options:
columns: full
cards:
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_1_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_1''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_1_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_2_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_2''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_2_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_3_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_3''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_3_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- type: markdown
content: '{% if states(''sensor.sparkx_i7_print_status'') in [''printing'',
''paused''] %}{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}{% set cur = states(''sensor.sparkx_i7_used_material_length'')
| float(0) %}{% set ck = states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
| float(0) %}{% set booked = states(''input_number.sparkx_i7_slot_4_grams'')
| float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if
states(''sensor.sparkx_i7_active_filament_slot'') == ''box_1_slot_4''
else 0) %}{{ live | round(1) }}g{% else %}{{ (states(''input_number.sparkx_i7_slot_4_grams'')
| float(0)) | round(1) }}g{% endif %}'
card_mod:
style: 'ha-card { background: transparent; box-shadow: none; border: none;
padding: 0 4px; margin: 0; text-align: left; } .markdown { padding:
0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align:
left; font-size: 11px; line-height: 1; }'
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: full
icon: mdi:magnet
icon_color: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% set c = states(''sensor.sparkx_i7_cfs_'' ~ (slot | lower | replace(''
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower %}{% if c | length
== 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}'
multiline_secondary: true
name: Next Deduction Match
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_'\
\ ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce)\
\ | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1)\
\ %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex')\
\ and (state_attr(e[:-10], 'location') | default('', true) | lower) ==\
\ ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10]\
\ ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif\
\ %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No\
\ slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{\
\ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} \u2192 spool {{\
\ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper\
\ }} \u2192 spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id\
\ ~ '_filament_name') }} \xB7 {{ ns.rem | round(1) }} g left)\n{% endif\
\ %}\n"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- heading: Last/Current Print Job
heading_style: title
icon: mdi:printer-3d
type: heading
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
rows: 1
icon: mdi:plus-minus
name: Used Material Total
type: tile
- entity: sensor.sparkx_moonraker_print_eta
features_position: bottom
grid_options:
columns: 6
rows: 1
name: Print ETA
type: tile
vertical: false
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: auto
icon: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in\
\ ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n\
{% endif %}"
icon_color: "{% set st = states('sensor.sparkx_i7_print_status') %} {% if\
\ st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif\
\ %}"
multiline_secondary: true
primary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w\
\ = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in\
\ ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1)\
\ }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight')\
\ | float(0) | round(1) }} g\n{% endif %}\n"
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set\
\ c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing',\
\ 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){%\
\ else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost')\
\ | float(0) | round(2) }} $ (last job)\n{% endif %}\n"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_expected_material_length
grid_options:
columns: 6
rows: auto
icon: mdi:scale-balance
icon_color: '{% set gcm = states(''input_number.sparkx_i7_filament_g_cm'')
| float(0.0298) %}
{% set lencm = states(''sensor.sparkx_i7_expected_material_length'') | float(0)
%}
{% set wgt = states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
%}
{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}
{% set used_g = ((states(''sensor.sparkx_i7_used_material_length'') | float(0))
* gcm) | round(1) %}
{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}
{% set gc = namespace(list=[]) %}
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
| default('''', true) | string).split('';'') %}
{% set q = p | replace(''#'','''') | lower | trim %}
{% if q not in ['''',''none'',''unknown'',''unavailable''] %}{% set gc.list
= gc.list + [q] %}{% endif %}
{% endfor %}
{% set single = (gc.list | length) == 1 %}
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
true) | string).split(''_'')[-1] %}
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
{% set s = namespace(short=false, ok=false, matched=0, active=false) %}
{% for n in [''1'',''2'',''3'',''4''] %}
{% set sp = namespace(id='''', rem=-1) %}
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
%}
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
true) | lower) == (''cfs lite '' ~ n) %}
{% set sp.id = e[:-10] %}
{% set sp.rem = states(e[:-10]) | float(-1) %}
{% endif %}
{% endfor %}
{% if sp.id != '''' and sp.rem >= 0 %}
{% set s.matched = s.matched + 1 %}
{% if single %}
{% if n == aslot %}
{% set s.active = true %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% else %}
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true
%}{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% set active = (states(''sensor.sparkx_i7_print_status'') | default('''',
true)) in [''printing'',''paused''] %}
{% set v = namespace(state=''unknown'', label=''check unavailable'') %}
{% if not active %}
{% set v.state = ''idle'' %}
{% set v.label = ''no active print'' %}
{% elif job_g <= 0 %}
{% set v.state = ''none'' %}
{% set v.label = ''no slicer estimate yet'' %}
{% elif s.short %}
{% set v.state = ''short'' %}
{% set v.label = ''NOT ENOUGH'' %}
{% elif s.ok %}
{% set v.state = ''ok'' %}
{% set v.label = ''enough'' %}
{% elif single and aslot == '''' %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no active CFS slot'' %}
{% elif single and not s.active %}
{% set v.state = ''unknown'' %}
{% set v.label = ''active slot has no spool'' %}
{% elif s.matched == 0 %}
{% set v.state = ''unknown'' %}
{% set v.label = ''no spool loaded'' %}
{% endif %}
{% if v.state == ''ok'' %}green{% elif v.state == ''short'' %}red{% elif
v.state in [''none'',''idle''] %}grey{% else %}orange{% endif %}'
multiline_secondary: true
name: Filament Sufficiency
primary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298)\
\ %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}no active print{% else %}{{ job_g }} g needed \xB7 {{ used_g }} g used{%\
\ endif %}"
secondary: "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') |\
\ float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length')\
\ | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight')\
\ | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1))\
\ %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length')\
\ | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0]\
\ | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color')\
\ | default('', true) | string).split(';') %}\n{% set q = p | replace('#','')\
\ | lower | trim %}\n{% if q not in ['','none','unknown','unavailable']\
\ %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single\
\ = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot')\
\ | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot\
\ if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false,\
\ ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n\
{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman')\
\ if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location')\
\ | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10]\
\ %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor\
\ %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched\
\ + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n\
{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true\
\ %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set\
\ s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif\
\ %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status')\
\ | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown',\
\ label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle'\
\ %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set\
\ v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{%\
\ elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH'\
\ %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough'\
\ %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active\
\ %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no\
\ spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n\
{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle'\
\ %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print\
\ \xB7 {{ v.label }}{% endif %}"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 4
max: 40
min: 0
name: Flow
severity:
green: 0
red: 24
yellow: 12
type: gauge
type: grid
type: sections
@@ -0,0 +1,787 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: printer-stats
captured: '2026-10-10T06:18:30.555566+00:00'
tool: ha_config_set_dashboard
config:
views:
- title: Print
path: print
type: sections
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: Printer Status
icon: mdi:printer-3d-nozzle
- type: custom:webrtc-camera
url: octoprint
ui: true
- type: custom:webrtc-camera
url: octoprint2
ui: true
- type: tile
entity: binary_sensor.octoprint_printing
name: Printing
icon: mdi:printer-3d
grid_options:
columns: 6
- type: tile
entity: binary_sensor.octoprint_connected
name: Connected
icon: mdi:lan-connect
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_print_status
name: Status
icon: mdi:state-machine
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_last_event
name: Last Event
icon: mdi:history
grid_options:
columns: 6
- type: tile
entity: binary_sensor.octoprint_paused
name: Paused
icon: mdi:pause
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_current_z
name: Current Z
icon: mdi:axis-z-arrow
grid_options:
columns: 6
- type: markdown
content: '**File:** {{ states(''sensor.octoprint_print_file'') }}
**Size:** {{ (states(''sensor.octoprint_print_file_size'') | int(0) / 1048576)
| round(2) }} MB
**User:** {{ states(''sensor.octoprint_print_user'') }}'
grid_options:
columns: full
- type: tile
entity: sensor.octoprint_print_file
name: File
icon: mdi:file-code
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print Progress
icon: mdi:progress-clock
- type: gauge
entity: sensor.octoprint_print_progress_live
name: Progress
min: 0
max: 100
unit: '%'
severity:
green: 0
yellow: 40
red: 90
grid_options:
columns: 6
rows: 3
- type: custom:mushroom-template-card
primary: Elapsed
name: Elapsed
icon: mdi:clock-start
grid_options:
columns: 6
multiline_secondary: true
secondary: '{% set s = states(''sensor.octoprint_elapsed'') | float(0) %}{%
set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{% if h
%}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
- type: custom:mushroom-template-card
primary: Remaining
name: Remaining
icon: mdi:clock-end
grid_options:
columns: 6
multiline_secondary: true
secondary: '{% set s = states(''sensor.octoprint_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
- type: custom:mushroom-template-card
primary: Est. Finish
secondary: "{% set finish = states('sensor.octoprint_approximate_completion_time')\
\ | as_datetime %}{% if finish %}{{ (as_local(finish)).strftime('%I:%M %p').lstrip('0')\
\ }}{% else %}\u2014{% endif %}"
multiline_secondary: true
icon: mdi:clock-outline
grid_options:
columns: 6
- type: custom:mushroom-template-card
primary: Layer
name: Layer
icon: mdi:layers
grid_options:
columns: 6
multiline_secondary: true
secondary: '{% set c = states(''sensor.octoprint_layer_progress'') | int(0)
%}{% set t = state_attr(''sensor.octoprint_layer_progress'', ''total'')
| int(0) %}{{ c }} of {{ t }}'
- type: custom:mushroom-template-card
primary: Height
name: Height
icon: mdi:axis-z-arrow
grid_options:
columns: 6
secondary: '{% set c = states(''sensor.octoprint_height_progress_clean'')
| float(0) %}{% set t = state_attr(''sensor.octoprint_height_progress_clean'',
''total'') | float(0) %}{{ c }} of {{ t }} mm'
multiline_secondary: true
- type: tile
entity: light.3d_printer_lights_local
name: Printer Light
icon: mdi:lightbulb
grid_options:
columns: 6
- type: sensor
entity: sensor.octoprint_print_progress_live
name: Progress History
graph: line
hours_to_show: 24
detail: 1
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Temperatures
icon: mdi:thermometer
- type: gauge
entity: sensor.octoprint_tool_0_temperature
name: Nozzle
min: 0
max: 260
unit: "\xB0C"
severity:
green: 0
yellow: 180
red: 240
grid_options:
columns: 4
- type: gauge
entity: sensor.octoprint_bed_temperature
name: Bed
min: 0
max: 120
unit: "\xB0C"
severity:
green: 0
yellow: 60
red: 100
grid_options:
columns: 4
- type: gauge
entity: sensor.octoprint_soc_temperature
name: SoC
min: 0
max: 100
unit: "\xB0C"
severity:
green: 0
yellow: 70
red: 90
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_tool_0_target
name: Nozzle Target
icon: mdi:printer-3d-nozzle
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_bed_target
name: Bed Target
icon: mdi:radiator
grid_options:
columns: 6
- title: Nozzle Temperature
type: history-graph
entities:
- entity: sensor.octoprint_tool_0_temperature
name: Actual
color: '#ef5350'
- entity: sensor.octoprint_tool_0_target
name: Target
color: '#4caf50'
hours_to_show: 24
show_names: true
expand_legend: true
grid_options:
columns: full
- title: Bed Temperature
type: history-graph
entities:
- entity: sensor.octoprint_bed_temperature
name: Actual
color: '#42a5f5'
- entity: sensor.octoprint_bed_target
name: Target
color: '#4caf50'
hours_to_show: 24
show_names: true
expand_legend: true
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Controls
icon: mdi:gesture-tap-button
- type: tile
entity: switch.octoprint_pause_print
name: Pause
icon: mdi:pause
grid_options:
columns: 4
- type: tile
entity: switch.octoprint_connect_to_printer
name: Connect
icon: mdi:lan-connect
grid_options:
columns: 4
- type: tile
entity: switch.octoprint_camera_snapshot
name: Snapshot
icon: mdi:camera
grid_options:
columns: 4
- type: tile
entity: button.octoprint_cancel_print
name: Cancel Print
icon: mdi:cancel
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.octoprint_cancel_print
grid_options:
columns: 6
- type: tile
entity: button.octoprint_emergency_stop
name: Emergency Stop
icon: mdi:stop-circle
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.octoprint_emergency_stop
grid_options:
columns: 6
- type: button
name: GCode Viewer
icon: mdi:cube-outline
tap_action:
action: url
url_path: https://ender5pro.duckdns.org/#gcode
grid_options:
columns: 6
- type: button
name: Pretty GCode Viewer
icon: mdi:cube-outline
tap_action:
action: url
url_path: https://ender5pro.duckdns.org/#tab_plugin_prettygcode
grid_options:
columns: 6
- type: grid
cards:
- type: heading
heading: Totals
icon: mdi:chart-box-outline
- type: tile
entity: sensor.octoprint_printer_print_time_today
name: Print Time Today
icon: mdi:clock-start
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_printer_print_time_this_week
name: Print Time This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
grid_options:
columns: 4
entity: sensor.octoprint_printer_print_time_last_7_days
name: Print Time Last 7 Days
icon: mdi:history
vertical: false
features_position: bottom
- type: tile
entity: sensor.octoprint_printer_prints_today
name: Prints Today
icon: mdi:counter
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_printer_prints_this_week
name: Prints This Week
icon: mdi:counter
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_printer_prints_last_7_days
name: Prints Last 7 Days
icon: mdi:counter
grid_options:
columns: 4
- type: grid
cards:
- type: heading
heading: Filament Usage
icon: mdi:chart-donut
- type: tile
entity: sensor.octoprint_last_print_filament
name: Last Job
icon: mdi:history
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_daily
name: Filament Today
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weekly
name: Filament This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_monthly
name: Filament This Month
icon: mdi:calendar-month
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_used_total
name: Grand Total
icon: mdi:chart-pie
grid_options:
columns: 4
- type: heading
heading: Grams Usage
icon: mdi:weight
- type: tile
entity: sensor.octoprint_last_print_filament_weight
name: Last Job
icon: mdi:history
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weight_daily
name: Filament Today
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weight_weekly
name: Filament This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weight_monthly
name: Filament This Month
icon: mdi:calendar-month
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_used_weight_total
name: Grand Total
icon: mdi:chart-pie
grid_options:
columns: 4
- type: heading
heading: Cost Usage
icon: mdi:cash-multiple
- type: tile
entity: sensor.octoprint_filament_cost_last_job
name: Last Job
icon: mdi:history
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_daily
name: Cost Today
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_weekly
name: Cost This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_monthly
name: Cost This Month
icon: mdi:calendar-month
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_total
name: Grand Total
icon: mdi:chart-pie
grid_options:
columns: 4
- title: History
path: history
type: sections
max_columns: 2
sections:
- type: grid
cards:
- type: heading
heading: Temperature History
icon: mdi:chart-line-variant
- type: history-graph
title: Temperatures (24h)
hours_to_show: 24
show_names: true
expand_legend: true
entities:
- entity: sensor.octoprint_tool_0_temperature
name: Nozzle
color: '#ef5350'
- entity: sensor.octoprint_tool_0_target
name: Nozzle Target
color: '#ffab91'
- entity: sensor.octoprint_bed_temperature
name: Bed
color: '#42a5f5'
- entity: sensor.octoprint_bed_target
name: Bed Target
color: '#90caf9'
grid_options:
columns: full
- type: history-graph
title: Temperatures (7 days)
hours_to_show: 168
show_names: true
expand_legend: true
entities:
- entity: sensor.octoprint_tool_0_temperature
name: Nozzle
color: '#ef5350'
- entity: sensor.octoprint_bed_temperature
name: Bed
color: '#42a5f5'
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print Activity
icon: mdi:chart-box-outline
- type: custom:apexcharts-card
header:
show: true
title: Z Position (24h)
show_states: true
colorize_states: true
graph_span: 24h
series:
- entity: sensor.octoprint_current_z
name: Current Z
color: '#ab47bc'
type: line
curve: straight
fill_raw: last
grid_options:
columns: full
apex_config:
chart:
height: 300
stroke:
width: 1
- type: history-graph
title: Print Progress (24h)
hours_to_show: 24
show_names: true
entities:
- entity: sensor.octoprint_print_progress_live
name: Progress
color: '#66bb6a'
grid_options:
columns: full
- type: history-graph
title: Print Duration (24h)
hours_to_show: 24
show_names: true
entities:
- entity: sensor.octoprint_elapsed
name: Elapsed
color: '#26c6da'
- entity: sensor.octoprint_time_left
name: Remaining
color: '#ffa726'
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print History
icon: mdi:history
- type: markdown
content: '**Successful:** {{ states(''sensor.octoprint_successful_prints_count'')
}} | **Failed:** {{ states(''sensor.octoprint_failed_prints_count'') }}'
- type: history-graph
title: Printing State (7 days)
hours_to_show: 168
show_names: true
entities:
- entity: binary_sensor.octoprint_printing
name: Printing
color: '#66bb6a'
grid_options:
columns: full
- type: custom:apexcharts-card
header:
show: true
title: Print Outcomes (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
stacked: true
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: true
yaxis:
tickAmount: 4
labels:
minWidth: 40
legend:
show: true
series:
- entity: sensor.octoprint_successful_prints_count
name: Successful
color: '#66bb6a'
type: column
group_by:
func: diff
duration: 1d
start_with_last: true
- entity: sensor.octoprint_failed_prints_count
name: Failed
color: '#ef5350'
type: column
group_by:
func: diff
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: markdown
title: Recent Prints
content: "{% for j in (state_attr('sensor.octoprint_recent_prints', 'allPrintJobs')\
\ | default([]))[:5] %}\n{% set d = j.get('duration', 0) | int %}\n- **{{\
\ j.fileName }}** \u2014 {{ j.printStatusResult | title }}, {{ (d / 3600)\
\ | int }}h {{ ((d % 3600) / 60) | int }}m, {{ j.get('filamentModels', {}).get('total',\
\ {}).get('usedLength', 0) | round(0) }}mm\n{% endfor %}"
- type: grid
cards:
- type: heading
heading: Filament Usage
icon: mdi:spool
- type: custom:apexcharts-card
header:
show: true
title: Filament Usage (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: false
yaxis:
tickAmount: 4
labels:
minWidth: 40
series:
- entity: sensor.octoprint_filament_daily
name: Used (mm)
color: '#26c6da'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_used_total
name: Total (mm)
color: '#ab47bc'
type: line
curve: straight
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_weekly
name: Weekly (mm)
color: '#ffca28'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: custom:apexcharts-card
header:
show: true
title: Filament Usage - Grams (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: false
yaxis:
tickAmount: 4
labels:
minWidth: 40
series:
- entity: sensor.octoprint_filament_weight_daily
name: Used (g)
color: '#26c6da'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_used_weight_total
name: Total (g)
color: '#ab47bc'
type: line
curve: straight
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_weight_weekly
name: Weekly (g)
color: '#ffca28'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: custom:apexcharts-card
header:
show: true
title: Filament Usage - Cost (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: false
yaxis:
tickAmount: 4
labels:
minWidth: 40
series:
- entity: sensor.octoprint_filament_cost_daily
name: Used ($)
color: '#26c6da'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_cost_weekly
name: Weekly ($)
color: '#ffca28'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_cost_total
name: Total ($)
color: '#ab47bc'
type: line
curve: straight
group_by:
func: last
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: grid
cards:
- type: heading
heading: OctoPrint Host
icon: mdi:server
- type: tile
entity: sensor.octoprint_disk_usage
icon: mdi:harddisk
- type: tile
entity: sensor.octoprint_cpu_usage
icon: mdi:cpu-64-bit
- type: tile
entity: sensor.octoprint_memory_usage
icon: mdi:memory
- type: tile
entity: sensor.octoprint_core_0_temperature
icon: mdi:thermometer
- type: tile
entity: sensor.octoprint_uptime
icon: mdi:clock-outline
- type: sections
max_columns: 4
title: Test
path: test
sections:
- type: grid
cards: []
@@ -0,0 +1,969 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: printer-stats
captured: '2026-10-10T07:02:52.536646+00:00'
tool: ha_config_set_dashboard
config:
views:
- title: Print
path: print
type: sections
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: Printer Status
icon: mdi:printer-3d-nozzle
- type: custom:webrtc-camera
url: octoprint
ui: true
- type: custom:webrtc-camera
url: octoprint2
ui: true
- type: tile
entity: binary_sensor.octoprint_printing
name: Printing
icon: mdi:printer-3d
grid_options:
columns: 6
- type: tile
entity: binary_sensor.octoprint_connected
name: Connected
icon: mdi:lan-connect
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_print_status
name: Status
icon: mdi:state-machine
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_last_event
name: Last Event
icon: mdi:history
grid_options:
columns: 6
- type: tile
entity: binary_sensor.octoprint_paused
name: Paused
icon: mdi:pause
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_current_z
name: Current Z
icon: mdi:axis-z-arrow
grid_options:
columns: 6
- type: markdown
content: '**File:** {{ states(''sensor.octoprint_print_file'') }}
**Size:** {{ (states(''sensor.octoprint_print_file_size'') | int(0) / 1048576)
| round(2) }} MB
**User:** {{ states(''sensor.octoprint_print_user'') }}'
grid_options:
columns: full
- type: tile
entity: sensor.octoprint_print_file
name: File
icon: mdi:file-code
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print Progress
icon: mdi:progress-clock
- type: gauge
entity: sensor.octoprint_print_progress_live
name: Progress
min: 0
max: 100
unit: '%'
severity:
green: 0
yellow: 40
red: 90
grid_options:
columns: 6
rows: 3
- type: custom:mushroom-template-card
primary: Elapsed
name: Elapsed
icon: mdi:clock-start
grid_options:
columns: 6
multiline_secondary: true
secondary: '{% set s = states(''sensor.octoprint_elapsed'') | float(0) %}{%
set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{% if h
%}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
- type: custom:mushroom-template-card
primary: Remaining
name: Remaining
icon: mdi:clock-end
grid_options:
columns: 6
multiline_secondary: true
secondary: '{% set s = states(''sensor.octoprint_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
- type: custom:mushroom-template-card
primary: Est. Finish
secondary: "{% set finish = states('sensor.octoprint_approximate_completion_time')\
\ | as_datetime %}{% if finish %}{{ (as_local(finish)).strftime('%I:%M %p').lstrip('0')\
\ }}{% else %}\u2014{% endif %}"
multiline_secondary: true
icon: mdi:clock-outline
grid_options:
columns: 6
- type: custom:mushroom-template-card
primary: Layer
name: Layer
icon: mdi:layers
grid_options:
columns: 6
multiline_secondary: true
secondary: '{% set c = states(''sensor.octoprint_layer_progress'') | int(0)
%}{% set t = state_attr(''sensor.octoprint_layer_progress'', ''total'')
| int(0) %}{{ c }} of {{ t }}'
- type: custom:mushroom-template-card
primary: Height
name: Height
icon: mdi:axis-z-arrow
grid_options:
columns: 6
secondary: '{% set c = states(''sensor.octoprint_height_progress_clean'')
| float(0) %}{% set t = state_attr(''sensor.octoprint_height_progress_clean'',
''total'') | float(0) %}{{ c }} of {{ t }} mm'
multiline_secondary: true
- type: tile
entity: light.3d_printer_lights_local
name: Printer Light
icon: mdi:lightbulb
grid_options:
columns: 6
- type: sensor
entity: sensor.octoprint_print_progress_live
name: Progress History
graph: line
hours_to_show: 24
detail: 1
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Temperatures
icon: mdi:thermometer
- type: gauge
entity: sensor.octoprint_tool_0_temperature
name: Nozzle
min: 0
max: 260
unit: "\xB0C"
severity:
green: 0
yellow: 180
red: 240
grid_options:
columns: 4
- type: gauge
entity: sensor.octoprint_bed_temperature
name: Bed
min: 0
max: 120
unit: "\xB0C"
severity:
green: 0
yellow: 60
red: 100
grid_options:
columns: 4
- type: gauge
entity: sensor.octoprint_soc_temperature
name: SoC
min: 0
max: 100
unit: "\xB0C"
severity:
green: 0
yellow: 70
red: 90
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_tool_0_target
name: Nozzle Target
icon: mdi:printer-3d-nozzle
grid_options:
columns: 6
- type: tile
entity: sensor.octoprint_bed_target
name: Bed Target
icon: mdi:radiator
grid_options:
columns: 6
- title: Nozzle Temperature
type: history-graph
entities:
- entity: sensor.octoprint_tool_0_temperature
name: Actual
color: '#ef5350'
- entity: sensor.octoprint_tool_0_target
name: Target
color: '#4caf50'
hours_to_show: 24
show_names: true
expand_legend: true
grid_options:
columns: full
- title: Bed Temperature
type: history-graph
entities:
- entity: sensor.octoprint_bed_temperature
name: Actual
color: '#42a5f5'
- entity: sensor.octoprint_bed_target
name: Target
color: '#4caf50'
hours_to_show: 24
show_names: true
expand_legend: true
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Controls
icon: mdi:gesture-tap-button
- type: tile
entity: switch.octoprint_pause_print
name: Pause
icon: mdi:pause
grid_options:
columns: 4
- type: tile
entity: switch.octoprint_connect_to_printer
name: Connect
icon: mdi:lan-connect
grid_options:
columns: 4
- type: tile
entity: switch.octoprint_camera_snapshot
name: Snapshot
icon: mdi:camera
grid_options:
columns: 4
- type: tile
entity: button.octoprint_cancel_print
name: Cancel Print
icon: mdi:cancel
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.octoprint_cancel_print
grid_options:
columns: 6
- type: tile
entity: button.octoprint_emergency_stop
name: Emergency Stop
icon: mdi:stop-circle
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.octoprint_emergency_stop
grid_options:
columns: 6
- type: button
name: GCode Viewer
icon: mdi:cube-outline
tap_action:
action: url
url_path: https://ender5pro.duckdns.org/#gcode
grid_options:
columns: 6
- type: button
name: Pretty GCode Viewer
icon: mdi:cube-outline
tap_action:
action: url
url_path: https://ender5pro.duckdns.org/#tab_plugin_prettygcode
grid_options:
columns: 6
- type: grid
cards:
- type: heading
heading: Totals
icon: mdi:chart-box-outline
- type: tile
entity: sensor.octoprint_printer_print_time_today
name: Print Time Today
icon: mdi:clock-start
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_printer_print_time_this_week
name: Print Time This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
grid_options:
columns: 4
entity: sensor.octoprint_printer_print_time_last_7_days
name: Print Time Last 7 Days
icon: mdi:history
vertical: false
features_position: bottom
- type: tile
entity: sensor.octoprint_printer_prints_today
name: Prints Today
icon: mdi:counter
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_printer_prints_this_week
name: Prints This Week
icon: mdi:counter
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_printer_prints_last_7_days
name: Prints Last 7 Days
icon: mdi:counter
grid_options:
columns: 4
- type: grid
cards:
- type: heading
heading: Filament Usage
icon: mdi:chart-donut
- type: tile
entity: sensor.octoprint_last_print_filament
name: Last Job
icon: mdi:history
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_daily
name: Filament Today
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weekly
name: Filament This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_monthly
name: Filament This Month
icon: mdi:calendar-month
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_used_total
name: Grand Total
icon: mdi:chart-pie
grid_options:
columns: 4
- type: heading
heading: Grams Usage
icon: mdi:weight
- type: tile
entity: sensor.octoprint_last_print_filament_weight
name: Last Job
icon: mdi:history
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weight_daily
name: Filament Today
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weight_weekly
name: Filament This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_weight_monthly
name: Filament This Month
icon: mdi:calendar-month
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_used_weight_total
name: Grand Total
icon: mdi:chart-pie
grid_options:
columns: 4
- type: heading
heading: Cost Usage
icon: mdi:cash-multiple
- type: tile
entity: sensor.octoprint_filament_cost_last_job
name: Last Job
icon: mdi:history
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_daily
name: Cost Today
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_weekly
name: Cost This Week
icon: mdi:calendar-week
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_monthly
name: Cost This Month
icon: mdi:calendar-month
grid_options:
columns: 4
- type: tile
entity: sensor.octoprint_filament_cost_total
name: Grand Total
icon: mdi:chart-pie
grid_options:
columns: 4
- title: History
path: history
type: sections
max_columns: 2
sections:
- type: grid
cards:
- type: heading
heading: Temperature History
icon: mdi:chart-line-variant
- type: history-graph
title: Temperatures (24h)
hours_to_show: 24
show_names: true
expand_legend: true
entities:
- entity: sensor.octoprint_tool_0_temperature
name: Nozzle
color: '#ef5350'
- entity: sensor.octoprint_tool_0_target
name: Nozzle Target
color: '#ffab91'
- entity: sensor.octoprint_bed_temperature
name: Bed
color: '#42a5f5'
- entity: sensor.octoprint_bed_target
name: Bed Target
color: '#90caf9'
grid_options:
columns: full
- type: history-graph
title: Temperatures (7 days)
hours_to_show: 168
show_names: true
expand_legend: true
entities:
- entity: sensor.octoprint_tool_0_temperature
name: Nozzle
color: '#ef5350'
- entity: sensor.octoprint_bed_temperature
name: Bed
color: '#42a5f5'
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print Activity
icon: mdi:chart-box-outline
- type: custom:apexcharts-card
header:
show: true
title: Z Position (24h)
show_states: true
colorize_states: true
graph_span: 24h
series:
- entity: sensor.octoprint_current_z
name: Current Z
color: '#ab47bc'
type: line
curve: straight
fill_raw: last
grid_options:
columns: full
apex_config:
chart:
height: 300
stroke:
width: 1
- type: history-graph
title: Print Progress (24h)
hours_to_show: 24
show_names: true
entities:
- entity: sensor.octoprint_print_progress_live
name: Progress
color: '#66bb6a'
grid_options:
columns: full
- type: history-graph
title: Print Duration (24h)
hours_to_show: 24
show_names: true
entities:
- entity: sensor.octoprint_elapsed
name: Elapsed
color: '#26c6da'
- entity: sensor.octoprint_time_left
name: Remaining
color: '#ffa726'
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print History
icon: mdi:history
- type: markdown
content: '**Successful:** {{ states(''sensor.octoprint_successful_prints_count'')
}} | **Failed:** {{ states(''sensor.octoprint_failed_prints_count'') }}'
- type: history-graph
title: Printing State (7 days)
hours_to_show: 168
show_names: true
entities:
- entity: binary_sensor.octoprint_printing
name: Printing
color: '#66bb6a'
grid_options:
columns: full
- type: custom:apexcharts-card
header:
show: true
title: Print Outcomes (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
stacked: true
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: true
yaxis:
tickAmount: 4
labels:
minWidth: 40
legend:
show: true
series:
- entity: sensor.octoprint_successful_prints_count
name: Successful
color: '#66bb6a'
type: column
group_by:
func: diff
duration: 1d
start_with_last: true
- entity: sensor.octoprint_failed_prints_count
name: Failed
color: '#ef5350'
type: column
group_by:
func: diff
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: markdown
title: Recent Prints
content: "{% for j in (state_attr('sensor.octoprint_recent_prints', 'allPrintJobs')\
\ | default([]))[:5] %}\n{% set d = j.get('duration', 0) | int %}\n- **{{\
\ j.fileName }}** \u2014 {{ j.printStatusResult | title }}, {{ (d / 3600)\
\ | int }}h {{ ((d % 3600) / 60) | int }}m, {{ j.get('filamentModels', {}).get('total',\
\ {}).get('usedLength', 0) | round(0) }}mm\n{% endfor %}"
- type: grid
cards:
- type: heading
heading: Filament Usage
icon: mdi:spool
- type: custom:apexcharts-card
header:
show: true
title: Filament Usage (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: false
yaxis:
tickAmount: 4
labels:
minWidth: 40
series:
- entity: sensor.octoprint_filament_daily
name: Used (mm)
color: '#26c6da'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_used_total
name: Total (mm)
color: '#ab47bc'
type: line
curve: straight
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_weekly
name: Weekly (mm)
color: '#ffca28'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: custom:apexcharts-card
header:
show: true
title: Filament Usage - Grams (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: false
yaxis:
tickAmount: 4
labels:
minWidth: 40
series:
- entity: sensor.octoprint_filament_weight_daily
name: Used (g)
color: '#26c6da'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_used_weight_total
name: Total (g)
color: '#ab47bc'
type: line
curve: straight
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_weight_weekly
name: Weekly (g)
color: '#ffca28'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: custom:apexcharts-card
header:
show: true
title: Filament Usage - Cost (30 days)
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
type: bar
height: 300
plotOptions:
bar:
columnWidth: 50%
dataLabels:
enabled: false
yaxis:
tickAmount: 4
labels:
minWidth: 40
series:
- entity: sensor.octoprint_filament_cost_daily
name: Used ($)
color: '#26c6da'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_cost_weekly
name: Weekly ($)
color: '#ffca28'
type: column
group_by:
func: last
duration: 1d
start_with_last: true
- entity: sensor.octoprint_filament_cost_total
name: Total ($)
color: '#ab47bc'
type: line
curve: straight
group_by:
func: last
duration: 1d
start_with_last: true
grid_options:
columns: full
span:
end: day
- type: grid
cards:
- type: heading
heading: OctoPrint Host
icon: mdi:server
- type: tile
entity: sensor.octoprint_disk_usage
icon: mdi:harddisk
- type: tile
entity: sensor.octoprint_cpu_usage
icon: mdi:cpu-64-bit
- type: tile
entity: sensor.octoprint_memory_usage
icon: mdi:memory
- type: tile
entity: sensor.octoprint_core_0_temperature
icon: mdi:thermometer
- type: tile
entity: sensor.octoprint_uptime
icon: mdi:clock-outline
- type: sections
max_columns: 4
title: Test
path: test
sections:
- type: grid
cards:
- type: custom:mushroom-title-card
title: "Moonraker \u2013 {{ states('sensor.sparkx_moonraker_current_display_message')\
\ }}"
subtitle: '{{ states(''sensor.sparkx_moonraker_filename'') }}'
alignment: center
title_tap_action:
action: url
url_path: http://moonraker.local/
- type: tile
entity: sensor.sparkx_moonraker_current_print_state
name: Status
grid_options:
columns: 4
- type: tile
entity: sensor.sparkx_moonraker_print_duration
name: Elapsed
grid_options:
columns: 4
- type: tile
entity: sensor.sparkx_moonraker_print_eta
name: Completion
grid_options:
columns: 4
- type: tile
entity: sensor.sparkx_moonraker_progress
name: Print Progress
icon: mdi:clock-end
features:
- type: bar-gauge
min: 0
max: 100
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Controls
icon: mdi:gesture-tap-button
- type: grid
columns: 4
square: false
cards:
- type: custom:button-card
entity: button.sparkx_moonraker_pause_print
color_type: icon
tap_action:
action: toggle
name: Pause
- type: custom:button-card
entity: button.sparkx_moonraker_resume_print
color_type: icon
tap_action:
action: toggle
name: Resume
- type: custom:button-card
entity: button.sparkx_moonraker_cancel_print
color_type: icon
tap_action:
action: toggle
name: Cancel
lock:
enabled: false
confirmation:
text: This will CANCEL the print. Are you sure?
- type: custom:button-card
entity: button.sparkx_moonraker_emergency_stop
color_type: icon
color: red
tap_action:
action: toggle
name: Emergency
lock:
enabled: false
confirmation:
text: This will REBOOT the printer. Are you sure?
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Printer Temperatures
icon: mdi:thermometer
- type: custom:apexcharts-card
graph_span: 1h
header:
show: true
title: Printer Temperatures
show_states: true
colorize_states: true
apex_config:
chart:
height: 200
legend:
show: false
grid:
xaxis:
lines:
show: true
borderColor: '#555'
yaxis:
- opposite: true
decimals: 0
tickAmount: 2
all_series_config:
stroke_width: 2
float_precision: 0
show:
name_in_header: true
series:
- entity: sensor.sparkx_moonraker_extruder_temperature
name: Hotend
- entity: sensor.sparkx_moonraker_bed_temperature
name: Bed
- entity: sensor.sparkx_moonraker_mcu_temp
name: MCU
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Fan Speeds
icon: mdi:fan
- type: custom:apexcharts-card
graph_span: 1h
header:
show: true
title: Fan Speeds
show_states: true
colorize_states: true
apex_config:
chart:
height: 200
legend:
show: false
grid:
xaxis:
lines:
show: true
borderColor: '#555'
yaxis:
- opposite: true
decimals: 0
tickAmount: 2
all_series_config:
stroke_width: 2
show:
name_in_header: true
series:
- entity: sensor.sparkx_moonraker_hotend_fan
name: Hotend
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Camera
icon: mdi:camera
- type: conditional
conditions:
- entity: sensor.sparkx_moonraker_current_print_state
state_not: unavailable
card:
type: picture-entity
entity: camera.sparkx_moonraker_back
camera_view: live
show_name: false
show_state: false
aspect_ratio: 4x3
grid_options:
columns: 6
- type: conditional
conditions:
- entity: sensor.sparkx_moonraker_current_print_state
state_not: unavailable
card:
type: picture-entity
entity: camera.sparkx_moonraker_thumbnail
camera_view: auto
show_name: false
show_state: false
grid_options:
columns: 6
@@ -0,0 +1,328 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T01:53:57.178530+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: creality_k2_192_168_1_233
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
@@ -0,0 +1,332 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T01:55:13.613039+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: creality_k2_192_168_1_233
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
@@ -0,0 +1,341 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T01:56:14.808635+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
@@ -0,0 +1,332 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T02:37:41.746451+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
@@ -0,0 +1,380 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T02:37:46.568526+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Filament Used
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: g
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
@@ -0,0 +1,392 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T02:38:09.546522+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_chamber_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Chamber
severity:
green: 0
red: 70
yellow: 45
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Filament Used
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: g
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
@@ -0,0 +1,505 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T02:45:12.119555+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 6
icon: mdi:axis-z-arrow
name: Current Z
type: tile
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_chamber_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Chamber
severity:
green: 0
red: 70
yellow: 45
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Filament Used
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: g
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- title: CFS / Fans
path: cfs-fans
type: sections
icon: mdi:printer-3d-nozzle-outline
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: CFS Box 1
icon: mdi:file-cabinet
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_temperature
name: Temperature
icon: mdi:thermometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_humidity
name: Humidity
icon: mdi:water-percent
grid_options:
columns: 6
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_remaining'') }}%
left'
multiline_secondary: true
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_remaining'') }}%
left'
multiline_secondary: true
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_remaining'') }}%
left'
multiline_secondary: true
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_remaining'') }}%
left'
multiline_secondary: true
- type: grid
cards:
- type: heading
heading: External / Active
icon: mdi:printer-3d
- type: tile
entity: sensor.sparkx_i7_active_filament_slot
name: Active Slot
icon: mdi:swap-horizontal
grid_options:
columns: 6
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:lan-outline
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_external_remaining'') }}% left'
multiline_secondary: true
- type: tile
entity: sensor.sparkx_i7_filament_status
name: Filament Status
icon: mdi:printer-3d-nozzle-alert
grid_options:
columns: 6
- type: grid
cards:
- type: heading
heading: Fans
icon: mdi:fan
- type: tile
entity: fan.sparkx_i7_model_fan
name: Model Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_case_fan
name: Case Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_side_fan
name: Side Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
@@ -0,0 +1,582 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T02:45:25.739434+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- type: picture
image_entity: image.sparkx_i7_current_print_preview
show_name: false
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 12
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 4
icon: mdi:axis-z-arrow
name: Current Z
type: tile
- type: tile
entity: sensor.sparkx_i7_position_x
name: X
icon: mdi:axis-x-arrow
grid_options:
columns: 4
- type: tile
entity: sensor.sparkx_i7_position_y
name: Y
icon: mdi:axis-y-arrow
grid_options:
columns: 4
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
- type: tile
entity: number.sparkx_i7_print_tuning
name: Print Tuning
icon: mdi:speedometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_print_speed
name: Speed
icon: mdi:speedometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_real_time_flow
name: Real-Time Flow
icon: mdi:cube-send
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_current_object
name: Object
icon: mdi:cube-outline
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_object_count
name: Object Count
icon: mdi:counter
grid_options:
columns: 6
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_chamber_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Chamber
severity:
green: 0
red: 70
yellow: 45
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
- type: tile
entity: button.sparkx_i7_home_xy_then_z
name: Home
icon: mdi:home-circle
grid_options:
columns: 4
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_home_xy_then_z
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Filament Used
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: g
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- type: tile
entity: sensor.sparkx_i7_used_material_length
name: Used Length
icon: mdi:counter
grid_options:
columns: 6
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- title: CFS / Fans
path: cfs-fans
type: sections
icon: mdi:printer-3d-nozzle-outline
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: CFS Box 1
icon: mdi:file-cabinet
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_temperature
name: Temperature
icon: mdi:thermometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_humidity
name: Humidity
icon: mdi:water-percent
grid_options:
columns: 6
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_1_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
\ }}% left"
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_2_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_3_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_4_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_remaining'') }}%
left'
multiline_secondary: true
- type: grid
cards:
- type: heading
heading: External / Active
icon: mdi:printer-3d
- type: tile
entity: sensor.sparkx_i7_active_filament_slot
name: Active Slot
icon: mdi:swap-horizontal
grid_options:
columns: 6
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:lan-outline
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_external_color') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_external_color'') }}'
- type: tile
entity: sensor.sparkx_i7_filament_status
name: Filament Status
icon: mdi:printer-3d-nozzle-alert
grid_options:
columns: 6
- type: grid
cards:
- type: heading
heading: Fans
icon: mdi:fan
- type: tile
entity: fan.sparkx_i7_model_fan
name: Model Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_case_fan
name: Case Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_side_fan
name: Side Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
@@ -0,0 +1,582 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T02:45:32.515465+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- type: picture
image_entity: image.sparkx_i7_current_print_preview
show_name: false
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 12
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 4
icon: mdi:axis-z-arrow
name: Current Z
type: tile
- type: tile
entity: sensor.sparkx_i7_position_x
name: X
icon: mdi:axis-x-arrow
grid_options:
columns: 4
- type: tile
entity: sensor.sparkx_i7_position_y
name: Y
icon: mdi:axis-y-arrow
grid_options:
columns: 4
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
- type: tile
entity: number.sparkx_i7_print_tuning
name: Print Tuning
icon: mdi:speedometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_print_speed
name: Speed
icon: mdi:speedometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_real_time_flow
name: Real-Time Flow
icon: mdi:cube-send
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_current_object
name: Object
icon: mdi:cube-outline
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_object_count
name: Object Count
icon: mdi:counter
grid_options:
columns: 6
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_chamber_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Chamber
severity:
green: 0
red: 70
yellow: 45
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
- type: tile
entity: button.sparkx_i7_home_xy_then_z
name: Home
icon: mdi:home-circle
grid_options:
columns: 4
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_home_xy_then_z
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Filament Used
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: g
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- type: tile
entity: sensor.sparkx_i7_used_material_length
name: Used Length
icon: mdi:counter
grid_options:
columns: 6
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- title: CFS / Fans
path: cfs-fans
type: sections
icon: mdi:printer-3d-nozzle-outline
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: CFS Box 1
icon: mdi:file-cabinet
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_temperature
name: Temperature
icon: mdi:thermometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_humidity
name: Humidity
icon: mdi:water-percent
grid_options:
columns: 6
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_1_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
\ }}% left"
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_2_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_3_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_4_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_remaining'') }}%
left'
multiline_secondary: true
- type: grid
cards:
- type: heading
heading: External / Active
icon: mdi:printer-3d
- type: tile
entity: sensor.sparkx_i7_active_filament_slot
name: Active Slot
icon: mdi:swap-horizontal
grid_options:
columns: 6
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:lan-outline
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_external_color') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_external_color'') }}'
- type: tile
entity: sensor.sparkx_i7_filament_status
name: Filament Status
icon: mdi:printer-3d-nozzle-alert
grid_options:
columns: 6
- type: grid
cards:
- type: heading
heading: Fans
icon: mdi:fan
- type: tile
entity: fan.sparkx_i7_model_fan
name: Model Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_case_fan
name: Case Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_side_fan
name: Side Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
@@ -0,0 +1,580 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-09-24T03:02:08.718310+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- heading: Printer Status
icon: mdi:printer-3d-nozzle
type: heading
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- show_state: true
show_name: true
camera_view: live
fit_mode: cover
type: picture-entity
entity: camera.sparkx_i7_printer_camera
camera_image: camera.sparkx_i7_printer_camera
grid_options:
columns: full
- type: picture
image_entity: image.sparkx_i7_current_print_preview
show_name: false
grid_options:
columns: full
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 12
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z
grid_options:
columns: 4
icon: mdi:axis-z-arrow
name: Current Z
type: tile
- type: tile
entity: sensor.sparkx_i7_position_x
name: X
icon: mdi:axis-x-arrow
grid_options:
columns: 4
- type: tile
entity: sensor.sparkx_i7_position_y
name: Y
icon: mdi:axis-y-arrow
grid_options:
columns: 4
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
- type: tile
entity: number.sparkx_i7_print_tuning
name: Print Tuning
icon: mdi:speedometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_print_speed
name: Speed
icon: mdi:speedometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_real_time_flow
name: Real-Time Flow
icon: mdi:cube-send
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_current_object
name: Object
icon: mdi:cube-outline
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_object_count
name: Object Count
icon: mdi:counter
grid_options:
columns: 6
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_chamber_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Chamber
severity:
green: 0
red: 70
yellow: 45
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
- type: tile
entity: button.sparkx_i7_home_xy_then_z
name: Home
icon: mdi:home-circle
grid_options:
columns: 4
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_home_xy_then_z
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Filament Used
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: g
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- type: tile
entity: sensor.sparkx_i7_used_material_length
name: Used Length
icon: mdi:counter
grid_options:
columns: 6
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- title: CFS / Fans
path: cfs-fans
type: sections
icon: mdi:printer-3d-nozzle-outline
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: CFS Box 1
icon: mdi:file-cabinet
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_temperature
name: Temperature
icon: mdi:thermometer
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_cfs_box_1_humidity
name: Humidity
icon: mdi:water-percent
grid_options:
columns: 6
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_1_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_2_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_3_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'') }}'
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_box_1_slot_4_color')\
\ %}{% if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'') }}'
- type: grid
cards:
- type: heading
heading: External / Active
icon: mdi:printer-3d
- type: tile
entity: sensor.sparkx_i7_active_filament_slot
name: Active Slot
icon: mdi:swap-horizontal
grid_options:
columns: 6
- type: custom:mushroom-template-card
grid_options:
columns: 6
icon: mdi:lan-outline
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_cfs_external_color') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
\ }}% left"
multiline_secondary: true
icon_color: '{{ states(''sensor.sparkx_i7_cfs_external_color'') }}'
- type: tile
entity: sensor.sparkx_i7_filament_status
name: Filament Status
icon: mdi:printer-3d-nozzle-alert
grid_options:
columns: 6
- type: grid
cards:
- type: heading
heading: Fans
icon: mdi:fan
- type: tile
entity: fan.sparkx_i7_model_fan
name: Model Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_case_fan
name: Case Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
- type: tile
entity: fan.sparkx_i7_side_fan
name: Side Fan
icon: mdi:fan
features:
- type: fan-speed
grid_options:
columns: 4
@@ -0,0 +1,683 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-10-08T16:47:45.078937+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- bed: sensor.sparkx_i7_bed_temperature
camera: camera.sparkx_i7_printer_camera
grid_options:
columns: full
layer: sensor.sparkx_i7_working_layer
light: light.sparkx_i7_light
name: SparkX i7
nozzle: sensor.sparkx_i7_nozzle_temperature
pause_btn: button.sparkx_i7_pause_print
progress: sensor.sparkx_i7_print_progress
resume_btn: button.sparkx_i7_resume_print
status: sensor.sparkx_i7_print_status
stop_btn: button.sparkx_i7_stop_print
time_left: sensor.sparkx_i7_print_time_left
total_layers: sensor.sparkx_i7_total_layers
type: custom:k-printer-card
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- camera_image: camera.sparkx_i7_printer_camera
camera_view: live
entity: camera.sparkx_i7_printer_camera
fit_mode: cover
grid_options:
columns: full
show_name: true
show_state: true
type: picture-entity
- cards:
- grid_options:
columns: 6
image_entity: image.sparkx_i7_current_print_preview
show_name: false
type: picture
- entity: sensor.sparkx_i7_active_filament_slot
icon: mdi:palette
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
''color'') | default('''') | string %}{% set core = color | replace(''#'',
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
endif %}'
multiline_secondary: true
name: Active Color
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
}}{% else %}Unknown{% endif %}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') }}{% endif %}"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 12
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z_2_decimals
grid_options:
columns: 4
icon: mdi:axis-z-arrow
name: Current Z
type: tile
- entity: sensor.sparkx_i7_position_x
grid_options:
columns: 4
icon: mdi:axis-x-arrow
name: X
type: tile
- entity: sensor.sparkx_i7_position_y
grid_options:
columns: 4
icon: mdi:axis-y-arrow
name: Y
type: tile
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:message-alert-outline
multiline_secondary: true
name: Printer Message
primary: '{{ states("sensor.sparkx_i7_print_status") | replace("_", " ") |
title }}'
secondary: '{% set err = state_attr("sensor.sparkx_i7_print_status", "err")
or {} %}{% set code = err.get("errcode", 0) | int(0) %}{% set msg = err.get("value",
"") %}{% if state_attr("sensor.sparkx_i7_print_status", "paused_flag") |
default(false) %}Print paused{% elif msg %}ERROR {{ code }}: {{ msg }}{%
elif code %}Printer error {{ code }}{% else %}No printer error{% endif %}'
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:file-document-outline
multiline_secondary: true
name: Current File
primary: Current File
secondary: '{% set file = state_attr("sensor.sparkx_i7_print_status", "file")
or "" %}{% if file %}{{ file.split("/")[-1] | replace(".gcode", "") }}{%
else %}No active file{% endif %}'
type: custom:mushroom-template-card
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
- entity: number.sparkx_i7_print_tuning
grid_options:
columns: 6
icon: mdi:speedometer
name: Print Tuning
type: tile
- entity: sensor.sparkx_i7_print_speed
grid_options:
columns: 6
icon: mdi:speedometer
name: Speed
type: tile
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 6
icon: mdi:cube-send
name: Real-Time Flow
type: tile
- entity: sensor.sparkx_i7_flow_rate
grid_options:
columns: 6
icon: mdi:chart-gantt
name: Flow Rate
type: tile
- entity: sensor.sparkx_i7_current_object
grid_options:
columns: 6
icon: mdi:cube-outline
name: Object
type: tile
- entity: sensor.sparkx_i7_object_count
grid_options:
columns: 6
icon: mdi:counter
name: Object Count
type: tile
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
- entity: button.sparkx_i7_home_xy_then_z
grid_options:
columns: 4
icon: mdi:home-circle
name: Home
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_home_xy_then_z
type: tile
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
icon: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st in
[''printing'', ''paused''] %}mdi:printer-3d-nozzle{% else %}mdi:calendar-today{%
endif %}'
multiline_secondary: true
name: Filament Used
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_filament_weight_estimated'')
| round(1) }} g{% else %}No active job{% endif %}'
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}{% if st\
\ in ['printing', 'paused'] %}{{ states('sensor.sparkx_i7_used_material_length')\
\ | round(0) }} cm this job{% else %}{{ states('sensor.sparkx_i7_filament_weight_daily')\
\ | round(1) }} g \xB7 {{ states('sensor.sparkx_i7_filament_cost_daily')\
\ | round(2) }} $ today{% endif %}"
type: custom:mushroom-template-card
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
icon: mdi:counter
multiline_secondary: true
name: Used Length
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_used_material_length'')
| round(0) }} cm{% else %}{{ (states(''sensor.sparkx_i7_filament_weight_daily'')
| float(0) / states(''input_number.sparkx_i7_filament_g_cm'') | float(0.0298))
| round(0) }} cm{% endif %}'
secondary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if
st in [''printing'', ''paused''] %}this job (printer-reported){% else %}today,
from today''s weight{% endif %}'
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Job Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- icon: mdi:printer-3d-nozzle-outline
max_columns: 4
path: cfs-fans
sections:
- cards:
- heading: CFS Box 1
icon: mdi:file-cabinet
type: heading
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_1_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_2_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_3_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_4_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
\ }}% left"
type: custom:mushroom-template-card
type: grid
- cards:
- heading: External / Active
icon: mdi:printer-3d
type: heading
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: 6
icon: mdi:swap-horizontal
name: Active Slot
type: tile
- entity: sensor.sparkx_i7_active_filament_slot
icon: mdi:palette
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
''color'') | default('''') | string %}{% set core = color | replace(''#'',
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
endif %}'
multiline_secondary: true
name: Active Color
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
}}{% else %}Unknown{% endif %}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') }}{% endif %}"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- grid_options:
columns: 6
icon: mdi:lan-outline
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_external_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_external_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_filament_status
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle-alert
name: Filament Status
type: tile
type: grid
- cards:
- heading: Fans
icon: mdi:fan
type: heading
- entity: fan.sparkx_i7_model_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Model Fan
type: tile
- entity: fan.sparkx_i7_case_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Case Fan
type: tile
- entity: fan.sparkx_i7_side_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Side Fan
type: tile
type: grid
title: CFS / Fans
type: sections
@@ -0,0 +1,683 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-10-08T16:48:05.400974+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- bed: sensor.sparkx_i7_bed_temperature
camera: camera.sparkx_i7_printer_camera
grid_options:
columns: full
layer: sensor.sparkx_i7_working_layer
light: light.sparkx_i7_light
name: SparkX i7
nozzle: sensor.sparkx_i7_nozzle_temperature
pause_btn: button.sparkx_i7_pause_print
progress: sensor.sparkx_i7_print_progress
resume_btn: button.sparkx_i7_resume_print
status: sensor.sparkx_i7_print_status
stop_btn: button.sparkx_i7_stop_print
time_left: sensor.sparkx_i7_print_time_left
total_layers: sensor.sparkx_i7_total_layers
type: custom:k-printer-card
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- camera_image: camera.sparkx_i7_printer_camera
camera_view: live
entity: camera.sparkx_i7_printer_camera
fit_mode: cover
grid_options:
columns: full
show_name: true
show_state: true
type: picture-entity
- cards:
- grid_options:
columns: 6
image_entity: image.sparkx_i7_current_print_preview
show_name: false
type: picture
- entity: sensor.sparkx_i7_active_filament_slot
icon: mdi:palette
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
''color'') | default('''') | string %}{% set core = color | replace(''#'',
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
endif %}'
multiline_secondary: true
name: Active Color
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
}}{% else %}Unknown{% endif %}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') }}{% endif %}"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 12
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z_2_decimals
grid_options:
columns: 4
icon: mdi:axis-z-arrow
name: Current Z
type: tile
- entity: sensor.sparkx_i7_position_x
grid_options:
columns: 4
icon: mdi:axis-x-arrow
name: X
type: tile
- entity: sensor.sparkx_i7_position_y
grid_options:
columns: 4
icon: mdi:axis-y-arrow
name: Y
type: tile
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:message-alert-outline
multiline_secondary: true
name: Printer Message
primary: '{{ states("sensor.sparkx_i7_print_status") | replace("_", " ") |
title }}'
secondary: '{% set err = state_attr("sensor.sparkx_i7_print_status", "err")
or {} %}{% set code = err.get("errcode", 0) | int(0) %}{% set msg = err.get("value",
"") %}{% if state_attr("sensor.sparkx_i7_print_status", "paused_flag") |
default(false) %}Print paused{% elif msg %}ERROR {{ code }}: {{ msg }}{%
elif code %}Printer error {{ code }}{% else %}No printer error{% endif %}'
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:file-document-outline
multiline_secondary: true
name: Current File
primary: Current File
secondary: '{% set file = state_attr("sensor.sparkx_i7_print_status", "file")
or "" %}{% if file %}{{ file.split("/")[-1] | replace(".gcode", "") }}{%
else %}No active file{% endif %}'
type: custom:mushroom-template-card
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
- entity: number.sparkx_i7_print_tuning
grid_options:
columns: 6
icon: mdi:speedometer
name: Print Tuning
type: tile
- entity: sensor.sparkx_i7_print_speed
grid_options:
columns: 6
icon: mdi:speedometer
name: Speed
type: tile
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 6
icon: mdi:cube-send
name: Real-Time Flow
type: tile
- entity: sensor.sparkx_i7_flow_rate
grid_options:
columns: 6
icon: mdi:chart-gantt
name: Flow Rate
type: tile
- entity: sensor.sparkx_i7_current_object
grid_options:
columns: 6
icon: mdi:cube-outline
name: Object
type: tile
- entity: sensor.sparkx_i7_object_count
grid_options:
columns: 6
icon: mdi:counter
name: Object Count
type: tile
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
- entity: button.sparkx_i7_home_xy_then_z
grid_options:
columns: 4
icon: mdi:home-circle
name: Home
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_home_xy_then_z
type: tile
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
icon: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st in
[''printing'', ''paused''] %}mdi:printer-3d-nozzle{% else %}mdi:calendar-today{%
endif %}'
multiline_secondary: true
name: Filament Used
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_filament_weight_estimated'')
| round(1) }} g{% else %}No active job{% endif %}'
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}{% if st\
\ in ['printing', 'paused'] %}{{ states('sensor.sparkx_i7_used_material_length')\
\ | round(0) }} cm this job{% else %}{{ states('sensor.sparkx_i7_filament_weight_daily')\
\ | round(1) }} g \xB7 {{ states('sensor.sparkx_i7_filament_cost_daily')\
\ | round(2) }} $ today{% endif %}"
type: custom:mushroom-template-card
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
icon: mdi:counter
multiline_secondary: true
name: Used Length
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_used_material_length'')
| round(0) }} cm{% else %}{{ (states(''sensor.sparkx_i7_filament_weight_daily'')
| float(0) / states(''input_number.sparkx_i7_filament_g_cm'') | float(0.0298))
| round(0) }} cm{% endif %}'
secondary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if
st in [''printing'', ''paused''] %}this job (printer-reported){% else %}today,
from today''s weight{% endif %}'
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Job Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- icon: mdi:printer-3d-nozzle-outline
max_columns: 4
path: cfs-fans
sections:
- cards:
- heading: CFS Box 1
icon: mdi:file-cabinet
type: heading
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_1_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_2_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_3_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_4_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
\ }}% left"
type: custom:mushroom-template-card
type: grid
- cards:
- heading: External / Active
icon: mdi:printer-3d
type: heading
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: 6
icon: mdi:swap-horizontal
name: Active Slot
type: tile
- entity: sensor.sparkx_i7_active_filament_slot
icon: mdi:palette
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
''color'') | default('''') | string %}{% set core = color | replace(''#'',
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
endif %}'
multiline_secondary: true
name: Active Color
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
}}{% else %}Unknown{% endif %}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') }}{% endif %}"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- grid_options:
columns: 6
icon: mdi:lan-outline
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_external_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_external_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_filament_status
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle-alert
name: Filament Status
type: tile
type: grid
- cards:
- heading: Fans
icon: mdi:fan
type: heading
- entity: fan.sparkx_i7_model_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Model Fan
type: tile
- entity: fan.sparkx_i7_case_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Case Fan
type: tile
- entity: fan.sparkx_i7_side_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Side Fan
type: tile
type: grid
title: CFS / Fans
type: sections
@@ -0,0 +1,924 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: sparkx-i7
captured: '2026-10-08T17:58:47.063357+00:00'
tool: ha_config_set_dashboard
config:
views:
- max_columns: 4
path: print
sections:
- cards:
- bed: sensor.sparkx_i7_bed_temperature
camera: camera.sparkx_i7_printer_camera
grid_options:
columns: full
layer: sensor.sparkx_i7_working_layer
light: light.sparkx_i7_light
name: SparkX i7
nozzle: sensor.sparkx_i7_nozzle_temperature
pause_btn: button.sparkx_i7_pause_print
progress: sensor.sparkx_i7_print_progress
resume_btn: button.sparkx_i7_resume_print
status: sensor.sparkx_i7_print_status
stop_btn: button.sparkx_i7_stop_print
time_left: sensor.sparkx_i7_print_time_left
total_layers: sensor.sparkx_i7_total_layers
type: custom:k-printer-card
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint
- grid_options:
columns: full
type: custom:webrtc-camera
ui: true
url: octoprint2
- camera_image: camera.sparkx_i7_printer_camera
camera_view: live
entity: camera.sparkx_i7_printer_camera
fit_mode: cover
grid_options:
columns: full
show_name: true
show_state: true
type: picture-entity
- cards:
- grid_options:
columns: 6
image_entity: image.sparkx_i7_current_print_preview
show_name: false
type: picture
- entity: sensor.sparkx_i7_active_filament_slot
icon: mdi:palette
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
''color'') | default('''') | string %}{% set core = color | replace(''#'',
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
endif %}'
multiline_secondary: true
name: Active Color
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
}}{% else %}Unknown{% endif %}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') }}{% endif %}"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 12
icon: mdi:state-machine
name: Status
type: tile
- entity: sensor.sparkx_i7_position_z_2_decimals
grid_options:
columns: 4
icon: mdi:axis-z-arrow
name: Current Z
type: tile
- entity: sensor.sparkx_i7_position_x
grid_options:
columns: 4
icon: mdi:axis-x-arrow
name: X
type: tile
- entity: sensor.sparkx_i7_position_y
grid_options:
columns: 4
icon: mdi:axis-y-arrow
name: Y
type: tile
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:message-alert-outline
multiline_secondary: true
name: Printer Message
primary: '{{ states("sensor.sparkx_i7_print_status") | replace("_", " ") |
title }}'
secondary: '{% set err = state_attr("sensor.sparkx_i7_print_status", "err")
or {} %}{% set code = err.get("errcode", 0) | int(0) %}{% set msg = err.get("value",
"") %}{% if state_attr("sensor.sparkx_i7_print_status", "paused_flag") |
default(false) %}Print paused{% elif msg %}ERROR {{ code }}: {{ msg }}{%
elif code %}Printer error {{ code }}{% else %}No printer error{% endif %}'
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_print_status
grid_options:
columns: 6
icon: mdi:file-document-outline
multiline_secondary: true
name: Current File
primary: Current File
secondary: '{% set file = state_attr("sensor.sparkx_i7_print_status", "file")
or "" %}{% if file %}{{ file.split("/")[-1] | replace(".gcode", "") }}{%
else %}No active file{% endif %}'
type: custom:mushroom-template-card
type: grid
- cards:
- heading: Print Progress
icon: mdi:progress-clock
type: heading
- entity: sensor.sparkx_i7_print_progress
grid_options:
columns: 6
rows: 3
max: 100
min: 0
name: Progress
severity:
green: 0
red: 90
yellow: 40
type: gauge
unit: '%'
- grid_options:
columns: 6
icon: mdi:clock-start
multiline_secondary: true
name: Elapsed
primary: Elapsed
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-end
multiline_secondary: true
name: Remaining
primary: Remaining
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
m }} min{% endif %}{% endif %}'
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:clock-outline
multiline_secondary: true
primary: Est. Finish
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:layers
multiline_secondary: true
name: Layer
primary: Layer
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
of {{ t }}'
type: custom:mushroom-template-card
- entity: light.sparkx_i7_light
grid_options:
columns: 6
icon: mdi:lightbulb
name: Printer Light
type: tile
- detail: 1
entity: sensor.sparkx_i7_print_progress
graph: line
grid_options:
columns: full
hours_to_show: 24
name: Progress History
type: sensor
- entity: number.sparkx_i7_print_tuning
grid_options:
columns: 6
icon: mdi:speedometer
name: Print Tuning
type: tile
- entity: sensor.sparkx_i7_print_speed
grid_options:
columns: 6
icon: mdi:speedometer
name: Speed
type: tile
- entity: sensor.sparkx_i7_real_time_flow
grid_options:
columns: 6
icon: mdi:cube-send
name: Real-Time Flow
type: tile
- entity: sensor.sparkx_i7_flow_rate
grid_options:
columns: 6
icon: mdi:chart-gantt
name: Flow Rate
type: tile
- entity: sensor.sparkx_i7_current_object
grid_options:
columns: 6
icon: mdi:cube-outline
name: Object
type: tile
- entity: sensor.sparkx_i7_object_count
grid_options:
columns: 6
icon: mdi:counter
name: Object Count
type: tile
type: grid
- cards:
- heading: Temperatures
icon: mdi:thermometer
type: heading
- entity: sensor.sparkx_i7_nozzle_temperature
grid_options:
columns: 4
max: 300
min: 0
name: Nozzle
severity:
green: 0
red: 240
yellow: 180
type: gauge
unit: "\xB0C"
- entity: sensor.sparkx_i7_bed_temperature
grid_options:
columns: 4
max: 100
min: 0
name: Bed
severity:
green: 0
red: 100
yellow: 60
type: gauge
unit: "\xB0C"
- entity: number.sparkx_i7_nozzle_target
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
name: Nozzle Target
type: tile
- entity: number.sparkx_i7_bed_target
grid_options:
columns: 6
icon: mdi:radiator
name: Bed Target
type: tile
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_nozzle_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Nozzle Temperature
type: history-graph
- entities:
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Actual
- color: '#4caf50'
entity: number.sparkx_i7_bed_target
name: Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Bed Temperature
type: history-graph
type: grid
- cards:
- heading: Controls
icon: mdi:gesture-tap-button
type: heading
- entity: button.sparkx_i7_pause_print
grid_options:
columns: 4
icon: mdi:pause
name: Pause
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_pause_print
type: tile
- entity: button.sparkx_i7_resume_print
grid_options:
columns: 4
icon: mdi:play
name: Resume
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_resume_print
type: tile
- entity: button.sparkx_i7_reconnect
grid_options:
columns: 4
icon: mdi:lan-connect
name: Connect
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_reconnect
type: tile
- entity: button.sparkx_i7_stop_print
grid_options:
columns: 4
icon: mdi:cancel
name: Cancel Print
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_stop_print
type: tile
- entity: button.sparkx_i7_home_xy_then_z
grid_options:
columns: 4
icon: mdi:home-circle
name: Home
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.sparkx_i7_home_xy_then_z
type: tile
type: grid
- cards:
- heading: Filament
icon: mdi:printer-3d-nozzle-outline
type: heading
- entity: sensor.sparkx_i7_filament_weight_estimated
grid_options:
columns: 6
icon: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st in
[''printing'', ''paused''] %}mdi:printer-3d-nozzle{% else %}mdi:calendar-today{%
endif %}'
multiline_secondary: true
name: Filament Used
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_filament_weight_estimated'')
| round(1) }} g{% else %}No active job{% endif %}'
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}{% if st\
\ in ['printing', 'paused'] %}{{ states('sensor.sparkx_i7_used_material_length')\
\ | round(0) }} cm this job{% else %}{{ states('sensor.sparkx_i7_filament_weight_daily')\
\ | round(1) }} g \xB7 {{ states('sensor.sparkx_i7_filament_cost_daily')\
\ | round(2) }} $ today{% endif %}"
type: custom:mushroom-template-card
- entity: input_number.sparkx_i7_filament_g_cm
grid_options:
columns: 6
icon: mdi:weight-kilogram
name: g/cm
type: tile
- entity: sensor.sparkx_i7_used_material_length
grid_options:
columns: 6
icon: mdi:counter
multiline_secondary: true
name: Used Length
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_used_material_length'')
| round(0) }} cm{% else %}{{ (states(''sensor.sparkx_i7_filament_weight_daily'')
| float(0) / states(''input_number.sparkx_i7_filament_g_cm'') | float(0.0298))
| round(0) }} cm{% endif %}'
secondary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if
st in [''printing'', ''paused''] %}this job (printer-reported){% else %}today,
from today''s weight{% endif %}'
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_filament_cost
grid_options:
columns: 3
icon: mdi:cash
name: Job Cost (total)
type: tile
- entity: sensor.sparkx_i7_filament_cost_daily
grid_options:
columns: 3
icon: mdi:cash-multiple
name: Today
type: tile
- entity: sensor.sparkx_i7_filament_cost_weekly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Week
type: tile
- entity: sensor.sparkx_i7_filament_cost_monthly
grid_options:
columns: 3
icon: mdi:cash-multiple
name: This Month
type: tile
type: grid
title: Print
type: sections
- max_columns: 2
path: history
sections:
- cards:
- heading: Temperature History
icon: mdi:chart-line-variant
type: heading
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#ffab91'
entity: number.sparkx_i7_nozzle_target
name: Nozzle Target
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
- color: '#90caf9'
entity: number.sparkx_i7_bed_target
name: Bed Target
expand_legend: true
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Temperatures (24h)
type: history-graph
- entities:
- color: '#ef5350'
entity: sensor.sparkx_i7_nozzle_temperature
name: Nozzle
- color: '#42a5f5'
entity: sensor.sparkx_i7_bed_temperature
name: Bed
expand_legend: true
grid_options:
columns: full
hours_to_show: 168
show_names: true
title: Temperatures (7 days)
type: history-graph
type: grid
- cards:
- heading: Print Activity
icon: mdi:chart-box-outline
type: heading
- apex_config:
chart:
height: 300
stroke:
width: 1
graph_span: 24h
grid_options:
columns: full
header:
colorize_states: true
show: true
show_states: true
title: Z Position (24h)
series:
- color: '#ab47bc'
curve: straight
entity: sensor.sparkx_i7_position_z
fill_raw: last
name: Current Z
type: line
type: custom:apexcharts-card
- entities:
- color: '#66bb6a'
entity: sensor.sparkx_i7_print_progress
name: Progress
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Progress (24h)
type: history-graph
- entities:
- color: '#26c6da'
entity: sensor.sparkx_i7_print_job_time
name: Elapsed
- color: '#ffa726'
entity: sensor.sparkx_i7_print_time_left
name: Remaining
grid_options:
columns: full
hours_to_show: 24
show_names: true
title: Print Duration (24h)
type: history-graph
type: grid
title: History
type: sections
- icon: mdi:printer-3d-nozzle-outline
max_columns: 4
path: cfs-fans
sections:
- cards:
- heading: CFS Box 1
icon: mdi:file-cabinet
type: heading
- entity: sensor.sparkx_i7_cfs_box_1_temperature
grid_options:
columns: 6
icon: mdi:thermometer
name: Temperature
type: tile
- entity: sensor.sparkx_i7_cfs_box_1_humidity
grid_options:
columns: 6
icon: mdi:water-percent
name: Humidity
type: tile
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 1
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_1_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 2
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_2_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 3
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_3_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- grid_options:
columns: 6
icon: mdi:printer-3d-nozzle
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: Slot 4
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_slot_4_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
\ }}% left"
type: custom:mushroom-template-card
type: grid
- cards:
- heading: External / Active
icon: mdi:printer-3d
type: heading
- cards:
- entity: sensor.sparkx_i7_active_filament_slot
grid_options:
columns: 6
icon: mdi:swap-horizontal
name: Active Slot
type: tile
- entity: sensor.sparkx_i7_active_filament_slot
icon: mdi:palette
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
''color'') | default('''') | string %}{% set core = color | replace(''#'',
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
endif %}'
multiline_secondary: true
name: Active Color
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
}}{% else %}Unknown{% endif %}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
\ 'filament') }}{% endif %}"
type: custom:mushroom-template-card
grid_options:
columns: full
type: horizontal-stack
- grid_options:
columns: 6
icon: mdi:lan-outline
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_external_color'')|default('''')|string
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
}}{% endif %}'
multiline_secondary: true
name: External Filament
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
secondary: "{% set col = states('sensor.sparkx_i7_external_color_name') %}{%\
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
\ }}% left"
type: custom:mushroom-template-card
- entity: sensor.sparkx_i7_filament_status
grid_options:
columns: 6
icon: mdi:printer-3d-nozzle-alert
name: Filament Status
type: tile
type: grid
- cards:
- heading: Fans
icon: mdi:fan
type: heading
- entity: fan.sparkx_i7_model_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Model Fan
type: tile
- entity: fan.sparkx_i7_case_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Case Fan
type: tile
- entity: fan.sparkx_i7_side_fan
features:
- type: fan-speed
grid_options:
columns: 4
icon: mdi:fan
name: Side Fan
type: tile
type: grid
title: CFS / Fans
type: sections
- title: Spoolman
path: spoolman
icon: mdi:package-variant-closed
type: sections
max_columns: 4
sections:
- type: grid
cards:
- type: heading
heading: Overture Black ABS (Spool 1)
icon: mdi:spool
- type: gauge
entity: sensor.spoolman_spool_1
name: Remaining
unit: g
min: 0
max: 1000
severity:
red: 0
yellow: 300
green: 600
grid_options:
columns: 6
rows: 3
- type: custom:mushroom-template-card
entity: sensor.spoolman_spool_1_color_hex
name: Color
icon: mdi:palette
icon_color: '{% set c = states(''sensor.spoolman_spool_1_color_hex'')|replace(''#'','''')|lower
%}{% if c|length == 6 %}#{{ c }}{% else %}var(--primary-text-color){% endif
%}'
primary: '{{ states(''sensor.spoolman_spool_1_color_hex'') }}'
secondary: "{{ states('sensor.spoolman_spool_1_filament_name') }} \xB7 {{\
\ states('sensor.spoolman_spool_1_material') }}"
multiline_secondary: true
grid_options:
columns: 6
- type: tile
entity: sensor.spoolman_spool_1_used_weight
name: Used Weight
icon: mdi:scale-balance
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_used_percentage
name: Used %
icon: mdi:chart-donut
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_remaining_length
name: Remaining Length
icon: mdi:ruler
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_used_length
name: Used Length
icon: mdi:ruler-square
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_spool_weight
name: Empty Spool Weight
icon: mdi:scale
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_filament_weight
name: Full Spool Weight
icon: mdi:weight-kilogram
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_vendor
name: Vendor
icon: mdi:factory
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_material
name: Material
icon: mdi:layers-triple
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_diameter
name: Diameter
icon: mdi:circle-outline
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_density
name: Density
icon: mdi:weight-gram
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_filament_name
name: Filament Name
icon: mdi:tag-outline
grid_options:
columns: 4
- type: tile
entity: select.spoolman_spool_1_location
name: Location
icon: mdi:map-marker-outline
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_estimated_runout
name: Est. Runout
icon: mdi:calendar-alert
grid_options:
columns: 6
- type: tile
entity: sensor.spoolman_spool_1_registered
name: Registered
icon: mdi:calendar-check-outline
grid_options:
columns: 6
- type: tile
entity: binary_sensor.spoolman_spool_1_low_filament
name: Low Filament
icon: mdi:alert-circle-outline
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_flow_rate
name: Flow Rate
icon: mdi:progress-clock
grid_options:
columns: 4
- type: tile
entity: sensor.spoolman_spool_1_id
name: Spool ID
icon: mdi:identifier
grid_options:
columns: 4
- type: markdown
content: "**Spoolman UI:** [http://2c829f0e-spoolman.local.hass.io:7912](http://2c829f0e-spoolman.local.hass.io:7912)\n\
\n**Changing filaments:** 1. Set the slot color in the CFS app. 2. Create\
\ the spool in Spoolman with a matching color hex. No Home Assistant changes\
\ needed \u2014 new spools appear here automatically."
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Adjust Remaining
icon: mdi:pencil-outline
- type: entities
title: Set value (g)
show_header_toggle: false
entities:
- input_number.spoolman_set_remaining
grid_options:
columns: 6
- type: tile
entity: sensor.spoolman_spool_1
name: Apply to Spool 1
icon: mdi:content-save-outline
grid_options:
columns: 6
tap_action:
action: perform-action
perform_action: script.spoolman_set_spool_remaining
data:
spool_id: 1
confirmation:
text: Overwrite Spool 1 remaining weight in Spoolman?
- type: markdown
content: "1. Type the new remaining grams above. 2. Tap **Apply to Spool 1**.\
\ The value is **absolute** \u2014 it replaces Spoolman's remaining weight,\
\ and print deductions continue from there. Wait for a running print to\
\ finish before adjusting."
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Print Linkage
icon: mdi:printer-3d-nozzle
- type: tile
entity: input_text.sparkx_i7_print_spool_latch
name: Latched Spool ID
icon: mdi:link-variant
grid_options:
columns: 6
- type: tile
entity: sensor.sparkx_i7_filament_weight_estimated
name: Current Job Weight
icon: mdi:weight-gram
grid_options:
columns: 6
- type: tile
entity: automation.sparkx_i7_latch_print_spool_for_spoolman
name: Latch Automation
icon: mdi:link
grid_options:
columns: 6
- type: tile
entity: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
name: Deduct Automation
icon: mdi:minus-circle-outline
grid_options:
columns: 6
- type: custom:mushroom-template-card
name: Next Deduction Match
icon: mdi:magnet
icon_color: mdi:link
primary: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
\ %}{% set ce = 'sensor.sparkx_i7_cfs_' ~ (slot|lower|replace(' ','_'))\
\ ~ '_color' %}{% set color = states(ce)|replace('#','')|lower %}{% set\
\ ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{%\
\ if e.endswith('_color_hex') and (states(e)|lower) == color %}{% set ns.id\
\ = states(e[:-10] ~ '_id') %}{% endif %}{% endfor %}{% if ns.id %}Color\
\ #{{ color }} \u2192 deducts from spool {{ ns.id }} ({% set fn = 'sensor.spoolman_spool_'\
\ ~ ns.id ~ '_filament_name' %}{{ states(fn) }}){% elif color in ['', 'unknown',\
\ 'unavailable'] %}Slot color unavailable{% else %}Color #{{ color }} \u2014\
\ no matching spool{% endif %}"
multiline_secondary: true
grid_options:
columns: full
- type: grid
cards:
- type: heading
heading: Spool History
icon: mdi:history
- type: history-graph
title: Remaining & Used (7 days)
hours_to_show: 168
show_names: true
entities:
- entity: sensor.spoolman_spool_1
name: Remaining
- entity: sensor.spoolman_spool_1_used_weight
name: Used
grid_options:
columns: full
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,15 @@
# ha_mcp_backup
schema_version: 1
domain: dashboard
entity_id: spoolman-ui
captured: '2026-10-09T00:22:40.531965+00:00'
tool: ha_config_set_dashboard
config:
views:
- title: Spoolman
path: spoolman
type: panel
cards:
- type: iframe
url: http://192.168.1.140:7912
aspect_ratio: 100%
@@ -0,0 +1,23 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: input_text.sparkx_i7_print_spool_latch
captured: '2026-10-08T17:12:15.440599+00:00'
tool: ha_set_entity
config:
entity_id: input_text.sparkx_i7_print_spool_latch
state: unknown
attributes:
mode: text
min: 0
max: 100
pattern: null
editable: true
friendly_name: SparkX i7 Print Spool Latch
last_changed: '2026-10-08T16:31:30.856182+00:00'
last_reported: '2026-10-08T16:31:30.856673+00:00'
last_updated: '2026-10-08T16:31:30.856182+00:00'
context:
id: 01M4E5P2H8J5XCWZG5TCX7AHCK
parent_id: null
user_id: null
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: input_text.total_filament_used
captured: '2026-10-10T06:40:39.314783+00:00'
tool: ha_set_entity
config:
entity_id: input_text.total_filament_used
state: unknown
attributes:
mode: text
min: 0
max: 100
pattern: null
editable: true
icon: mdi:counter
friendly_name: Total Filament Used
last_changed: '2026-10-10T06:40:34.866852+00:00'
last_reported: '2026-10-10T06:40:34.867787+00:00'
last_updated: '2026-10-10T06:40:34.866852+00:00'
context:
id: 01M4J8NFHJPBQD3E3BK5Y65S7Z
parent_id: null
user_id: null
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: sensor.spoolman_filament_1
captured: '2026-10-09T01:04:34.967384+00:00'
tool: ha_remove_entity
config:
entity_id: sensor.spoolman_filament_1
state: unavailable
attributes:
restored: true
state_class: measurement
device_class: weight
icon: mdi:printer-3d-nozzle
friendly_name: Filaments Overture Black ABS
supported_features: 0
unit_of_measurement: g
last_changed: '2026-10-09T00:42:15.531885+00:00'
last_reported: '2026-10-09T00:42:15.531885+00:00'
last_updated: '2026-10-09T00:42:15.531885+00:00'
context:
id: 01M4F1RN3B72ZCY9YK8Y43F2CG
parent_id: null
user_id: null
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: sensor.spoolman_filament_2
captured: '2026-10-09T01:04:34.964180+00:00'
tool: ha_remove_entity
config:
entity_id: sensor.spoolman_filament_2
state: unavailable
attributes:
restored: true
state_class: measurement
device_class: weight
icon: mdi:printer-3d-nozzle
friendly_name: Filaments Generic PLA PLA
supported_features: 0
unit_of_measurement: g
last_changed: '2026-10-09T00:55:34.767842+00:00'
last_reported: '2026-10-09T00:55:34.767842+00:00'
last_updated: '2026-10-09T00:55:34.767842+00:00'
context:
id: 01M4F2H1KFTKXWS3G5NHFAWH80
parent_id: null
user_id: null
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: sensor.spoolman_filament_7
captured: '2026-10-09T18:48:53.850639+00:00'
tool: ha_remove_entity
config:
entity_id: sensor.spoolman_filament_7
state: unavailable
attributes:
restored: true
state_class: measurement
device_class: weight
icon: mdi:printer-3d-nozzle
friendly_name: Filaments Black Hyper RFID PLA
supported_features: 0
unit_of_measurement: g
last_changed: '2026-10-09T18:48:49.033085+00:00'
last_reported: '2026-10-09T18:48:49.033085+00:00'
last_updated: '2026-10-09T18:48:49.033085+00:00'
context:
id: 01M4GZY6M98V7PHG0YC8EQN8SE
parent_id: null
user_id: null
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: sensor.spoolman_filament_8
captured: '2026-10-09T18:48:53.853156+00:00'
tool: ha_remove_entity
config:
entity_id: sensor.spoolman_filament_8
state: unavailable
attributes:
restored: true
state_class: measurement
device_class: weight
icon: mdi:printer-3d-nozzle
friendly_name: Filaments White Hyper RFID PLA
supported_features: 0
unit_of_measurement: g
last_changed: '2026-10-09T18:48:49.033206+00:00'
last_reported: '2026-10-09T18:48:49.033206+00:00'
last_updated: '2026-10-09T18:48:49.033206+00:00'
context:
id: 01M4GZY6M9XM8RXZN954T76C8X
parent_id: null
user_id: null
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: entity
entity_id: sensor.spoolman_filament_9
captured: '2026-10-09T18:48:53.855002+00:00'
tool: ha_remove_entity
config:
entity_id: sensor.spoolman_filament_9
state: unavailable
attributes:
restored: true
state_class: measurement
device_class: weight
icon: mdi:printer-3d-nozzle
friendly_name: Filaments Hyper PLA (Naval Adventures) Hyper PLA
supported_features: 0
unit_of_measurement: g
last_changed: '2026-10-09T18:48:49.033339+00:00'
last_reported: '2026-10-09T18:48:49.033339+00:00'
last_updated: '2026-10-09T18:48:49.033339+00:00'
context:
id: 01M4GZY6M9D3XRZC93ZNADDB5K
parent_id: null
user_id: null
@@ -0,0 +1,20 @@
# ha_mcp_backup
schema_version: 1
domain: helper_template
entity_id: 01M4J95V58XWWCRA3X26S6ZDN6
captured: '2026-10-10T06:55:50.281069+00:00'
tool: ha_config_set_helper
config:
entry_id: 01M4J95V58XWWCRA3X26S6ZDN6
options:
template_type: sensor
name: Active Spool
state: '{% set sid = states(''sensor.sparkx_moonraker_spool_id'') | int(0) %}{%
if sid == 0 %}No active spool{% else %}{% set eid = ''sensor.spoolman_spool_''
~ sid %}{{ state_attr(eid, ''friendly_name'') or (''Spool '' ~ sid) }}{% endif
%}'
entities:
- entity_id: sensor.active_spool
unique_id: 01M4J95V58XWWCRA3X26S6ZDN6
name: null
original_name: Active Spool
@@ -0,0 +1,24 @@
# ha_mcp_backup
schema_version: 1
domain: script
entity_id: spoolman_set_spool_remaining
captured: '2026-10-08T17:52:20.969671+00:00'
tool: ha_config_set_script
config:
alias: Spoolman - Set Spool Remaining
fields:
spool_id:
required: true
name: Spool ID
selector:
number:
min: 1
max: 9999
mode: box
sequence:
- action: spoolman.patch_spool
data:
id: '{{ spool_id | int(0) }}'
remaining_weight: '{{ states(''input_number.spoolman_set_remaining'') | float(0)
}}'
mode: single
@@ -0,0 +1,60 @@
# ha_mcp_backup
schema_version: 1
domain: script
entity_id: spoolman_set_spool_remaining
captured: '2026-10-09T00:26:18.075188+00:00'
tool: ha_config_set_script
config:
alias: Spoolman - Set Spool Remaining
fields:
slot:
name: CFS Slot
description: CFS slot number 1-4 - resolves the spool by the slot color hex
selector:
number:
min: 1
max: 4
mode: box
spool_id:
name: Spool ID
description: Direct Spoolman spool ID - used when no slot is given
selector:
number:
min: 1
max: 9999
mode: box
sequence:
- variables:
resolved_id: '{% set n = (slot | int(0)) if slot is defined else 0 %}{% if n
>= 1 %}{% set color = states(''sensor.sparkx_i7_cfs_box_1_slot_'' ~ (n | int)
~ ''_color'') | replace(''#'', '''') | lower %}{% set ns = namespace(id='''')
%}{% for e in integration_entities(''spoolman'') %}{% if e.endswith(''_color_hex'')
and (states(e) | replace(''#'', '''') | lower) == color and ns.id == ''''
%}{% set ns.id = states(e[:-10] ~ ''_id'') %}{% endif %}{% endfor %}{{ ns.id
}}{% else %}{{ (spool_id | int(0)) if spool_id is defined else 0 }}{% endif
%}'
slot_n: '{{ (slot | int(0)) if slot is defined else 0 }}'
- choose:
- conditions:
condition: template
value_template: '{{ resolved_id | int(0) > 0 }}'
sequence:
- action: spoolman.patch_spool
data:
id: '{{ resolved_id | int(0) }}'
remaining_weight: '{{ states(''input_number.spoolman_set_remaining'') |
float(0) }}'
default:
- action: notify.persistent_notification
data:
title: Spoolman - remaining not set
message: '{% if slot_n | int >= 1 %}No Spoolman spool matched CFS slot {{
slot_n }} (color {{ states(''sensor.sparkx_i7_cfs_box_1_slot_'' ~ (slot_n
| int) ~ ''_color'') }}) - register a spool with that color hex in Spoolman,
then try again.{% else %}No spool resolved - pass spool_id or a CFS slot
1-4. Nothing was set.{% endif %}'
mode: single
description: Sets a Spoolman spool remaining weight from the shared helper input_number.spoolman_set_remaining.
Pass slot (1-4) to resolve the spool by the CFS slot color hex (no remaining-weight
guard, so an exhausted spool can be reset to full), or pass spool_id directly.
Notifies via persistent notification when nothing could be resolved.
@@ -0,0 +1,60 @@
# ha_mcp_backup
schema_version: 1
domain: script
entity_id: spoolman_set_spool_remaining
captured: '2026-10-15T13:23:53.118614+00:00'
tool: ha_config_set_script
config:
alias: Spoolman - Set Spool Remaining
fields:
slot:
name: CFS Slot
description: CFS slot number 1-4 - resolves the spool by the slot color hex
selector:
number:
min: 1
max: 4
mode: box
spool_id:
name: Spool ID
description: Direct Spoolman spool ID - used when no slot is given
selector:
number:
min: 1
max: 9999
mode: box
sequence:
- variables:
resolved_id: '{% set n = (slot | int(0)) if slot is defined else 0 %}{% if n
>= 1 %}{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
%}{% if e.endswith(''_color_hex'') and (state_attr(e[:-10], ''location'')
| default('''', true) | lower) == (''cfs lite '' ~ (n | int)) and ns.id ==
'''' %}{% set ns.id = states(e[:-10] ~ ''_id'') %}{% endif %}{% endfor %}{{
ns.id }}{% else %}{{ (spool_id | int(0)) if spool_id is defined else 0 }}{%
endif %}'
slot_n: '{{ (slot | int(0)) if slot is defined else 0 }}'
- choose:
- conditions:
condition: template
value_template: '{{ resolved_id | int(0) > 0 }}'
sequence:
- action: spoolman.patch_spool
data:
id: '{{ resolved_id | int(0) }}'
remaining_weight: '{{ states(''input_number.spoolman_set_remaining'') |
float(0) }}'
default:
- action: notify.persistent_notification
data:
title: Spoolman - remaining not set
message: '{% if slot_n | int >= 1 %}No Spoolman spool matched CFS slot {{
slot_n }} (color {{ states(''sensor.sparkx_i7_cfs_box_1_slot_'' ~ (slot_n
| int) ~ ''_color'') }}) in the CFS Lite location - register a spool with
that color hex and location in Spoolman, then try again.{% else %}No spool
resolved - pass spool_id or a CFS slot 1-4. Nothing was set.{% endif %}'
mode: single
description: Sets a Spoolman spool remaining weight from the shared helper input_number.spoolman_set_remaining.
Pass slot (1-4) to resolve the spool by the CFS slot color hex in the CFS Lite
location (no remaining-weight guard, so an exhausted spool can be reset to full),
or pass spool_id directly. Notifies via persistent notification when nothing could
be resolved.
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -1 +1 @@
{"pid": 72, "version": 1, "ha_version": "2026.8.3", "start_ts": 1788057668.905601}
{"pid": 71, "version": 1, "ha_version": "2026.10.1", "start_ts": 1792306893.29437}
File diff suppressed because it is too large. Load diff
+209
View File
@@ -0,0 +1,209 @@
{
"version": 1,
"minor_version": 1,
"key": "lovelace.3d_printer_cellphone",
"data": {
"config": {
"views": [
{
"sections": [
{
"cards": [
{
"card": {
"columns": 4,
"square": false,
"type": "grid"
},
"card_param": "cards",
"filter": {
"template": "{% set ns = namespace(cards=[]) %}{% set active_n = (states('sensor.sparkx_i7_active_filament_slot').split('_')[-1] | int(0)) if states('sensor.sparkx_i7_print_status') in ['printing', 'paused'] else 0 %}\n{% for n in [1, 2, 3, 4] %}\n {% set sp = namespace(ent='') %}\n {% for s in states.sensor %}\n {% if sp.ent == '' and s.entity_id.startswith('sensor.spoolman_spool_') %}\n {% set loc = (s.attributes.location | default('')) | lower %}\n {% if loc == ('cfs lite ' ~ n) %}\n {% set sp.ent = s.entity_id %}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set v = namespace(html='', label='Slot ' ~ n, border='transparent', wrap='', text='#111111', halo='rgba(255,255,255,0.95)', vendor='') %}\n {% if sp.ent != '' %}\n {% set hex = state_attr(sp.ent, 'filament_color_hex') | default('44739e') %}\n {% set hex_clean = hex if hex.startswith('#') else '#' ~ hex %}\n {% set remain = (state_attr(sp.ent, 'remaining_weight') | default(states(sp.ent)) | float(0)) | round(1) %}\n {% set total = state_attr(sp.ent, 'filament_weight') | float(1000) %}\n {% set raw_pct = ((remain / total) * 100) | round(1) if total > 0 else 0 %}\n {% set pct = 0 if raw_pct < 0 else (100 if raw_pct > 100 else raw_pct) %}\n {% set rem_n = states(sp.ent) | float(-1) %}{% set tr = hex_clean[1:3] | int(0, 16) %}{% set tg = hex_clean[3:5] | int(0, 16) %}{% set tb = hex_clean[5:7] | int(0, 16) %}{% set lum = 0.2126 * tr + 0.7152 * tg + 0.0722 * tb %}{% set v.text = '#ffffff' if (pct >= 60 and lum <= 170) else '#111111' %}{% set v.halo = 'rgba(0,0,0,0.9)' if v.text == '#ffffff' else 'rgba(255,255,255,0.95)' %}\n {% set band = 2 if (rem_n >= 0 and rem_n < 25) else (1 if (rem_n >= 0 and rem_n < 100) else 0) %}\n {% set v.wrap = ' warn-crit' if band == 2 else (' warn-low' if band == 1 else '') %}{% set v.wrap = v.wrap ~ ' active' if (n == active_n) else v.wrap %}\n {% set v.border = '#d0d0d0' if hex_clean | lower in ['#ffffff', '#fff'] else 'transparent' %}\n {% set v.html = \"<div class='tube-bg'><div class='tube-fill' style='height: \" ~ pct ~ \"%; background-color: \" ~ hex_clean ~ \";'></div><div class='tube-text'>\" ~ remain ~ \"g</div></div>\" %}\n {% set v.vendor = (state_attr(sp.ent, 'filament_vendor_name') | default('') | string | trim) %}{% set v.label = 'Slot ' ~ n ~ (' ⚠' if band > 0 else '') %}\n {% else %}\n {% set v.html = \"<div class='tube-bg tube-empty'></div>\" %}\n {% set v.label = \"<span class='slot-warn'>Slot \" ~ n ~ \" — empty</span>\" %}\n {% endif %}\n {% set card = {\n \"type\": \"custom:button-card\",\n \"entity\": sp.ent if sp.ent != '' else 'sensor.sparkx_i7_active_filament_slot',\n \"show_icon\": false,\n \"show_state\": false,\n \"show_name\": false,\n \"custom_fields\": {\n \"tube\": \"<div class='tube-wrap\" ~ v.wrap ~ \"'>\" ~ ((\"<div class='slot-vendor'>\" ~ v.vendor ~ \"</div>\") if v.vendor else '') ~ v.html ~ \"<div class='slot-label'>\" ~ v.label ~ \"</div></div>\"\n },\n \"styles\": {\n \"card\": [\n {\"background\": \"transparent\"},\n {\"box-shadow\": \"none\"},\n {\"border\": \"none\"},\n {\"padding\": \"8px 2px\"},\n {\"display\": \"flex\"},\n {\"flex-direction\": \"column\"},\n {\"align-items\": \"center\"}\n ],\n \"custom_fields\": {\n \"tube\": [\n {\"width\": \"100%\"},\n {\"display\": \"flex\"},\n {\"flex-direction\": \"column\"},\n {\"align-items\": \"center\"}\n ]\n }\n },\n \"extra_styles\": \"\n .tube-wrap.active .tube-bg { box-shadow: 0 0 10px 2px var(--primary-color); } .tube-wrap.active .slot-label { color: var(--primary-color); font-weight: 800; } .tube-wrap.active .slot-vendor { color: var(--primary-color); font-weight: 800; } .tube-wrap {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n }\n .tube-bg {\n position: relative;\n width: 60px;\n height: 180px;\n background-color: #dedede;\n border-radius: 20px;\n overflow: hidden;\n border: 1px solid \" ~ v.border ~ \";\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n }\n .tube-empty {\n background: transparent;\n border: 2px dashed var(--error-color);\n }\n .tube-fill {\n width: 100%;\n border-radius: 0 0 19px 19px;\n }\n .tube-text {\n position: absolute;\n top: 48%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 13px;\n font-weight: 800;\n color: \" ~ v.text ~ \"; text-shadow: 0 0 3px \" ~ v.halo ~ \", 0 0 6px \" ~ v.halo ~ \";\n pointer-events: none;\n z-index: 2;\n white-space: nowrap;\n }\n .slot-label {\n margin-top: 8px;\n font-size: Line truncated
},
"type": "custom:auto-entities"
},
{
"type": "horizontal-stack",
"grid_options": {
"columns": "full"
},
"cards": [
{
"type": "markdown",
"content": "{% if states('sensor.sparkx_i7_print_status') in ['printing', 'paused'] %}{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}{% set cur = states('sensor.sparkx_i7_used_material_length') | float(0) %}{% set ck = states('input_number.sparkx_i7_spoolman_length_checkpoint') | float(0) %}{% set booked = states('input_number.sparkx_i7_slot_1_grams') | float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if states('sensor.sparkx_i7_active_filament_slot') == 'box_1_slot_1' else 0) %}{{ live | round(1) }}g{% else %}{{ (states('input_number.sparkx_i7_slot_1_grams') | float(0)) | round(1) }}g{% endif %}",
"card_mod": {
"style": "ha-card { background: transparent; box-shadow: none; border: none; padding: 0 4px; margin: 0; text-align: left; } .markdown { padding: 0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align: left; font-size: 11px; line-height: 1; }"
}
},
{
"type": "markdown",
"content": "{% if states('sensor.sparkx_i7_print_status') in ['printing', 'paused'] %}{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}{% set cur = states('sensor.sparkx_i7_used_material_length') | float(0) %}{% set ck = states('input_number.sparkx_i7_spoolman_length_checkpoint') | float(0) %}{% set booked = states('input_number.sparkx_i7_slot_2_grams') | float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if states('sensor.sparkx_i7_active_filament_slot') == 'box_1_slot_2' else 0) %}{{ live | round(1) }}g{% else %}{{ (states('input_number.sparkx_i7_slot_2_grams') | float(0)) | round(1) }}g{% endif %}",
"card_mod": {
"style": "ha-card { background: transparent; box-shadow: none; border: none; padding: 0 4px; margin: 0; text-align: left; } .markdown { padding: 0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align: left; font-size: 11px; line-height: 1; }"
}
},
{
"type": "markdown",
"content": "{% if states('sensor.sparkx_i7_print_status') in ['printing', 'paused'] %}{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}{% set cur = states('sensor.sparkx_i7_used_material_length') | float(0) %}{% set ck = states('input_number.sparkx_i7_spoolman_length_checkpoint') | float(0) %}{% set booked = states('input_number.sparkx_i7_slot_3_grams') | float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if states('sensor.sparkx_i7_active_filament_slot') == 'box_1_slot_3' else 0) %}{{ live | round(1) }}g{% else %}{{ (states('input_number.sparkx_i7_slot_3_grams') | float(0)) | round(1) }}g{% endif %}",
"card_mod": {
"style": "ha-card { background: transparent; box-shadow: none; border: none; padding: 0 4px; margin: 0; text-align: left; } .markdown { padding: 0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align: left; font-size: 11px; line-height: 1; }"
}
},
{
"type": "markdown",
"content": "{% if states('sensor.sparkx_i7_print_status') in ['printing', 'paused'] %}{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}{% set cur = states('sensor.sparkx_i7_used_material_length') | float(0) %}{% set ck = states('input_number.sparkx_i7_spoolman_length_checkpoint') | float(0) %}{% set booked = states('input_number.sparkx_i7_slot_4_grams') | float(0) %}{% set live = booked + ((([cur - ck, 0] | max) * gcm) if states('sensor.sparkx_i7_active_filament_slot') == 'box_1_slot_4' else 0) %}{{ live | round(1) }}g{% else %}{{ (states('input_number.sparkx_i7_slot_4_grams') | float(0)) | round(1) }}g{% endif %}",
"card_mod": {
"style": "ha-card { background: transparent; box-shadow: none; border: none; padding: 0 4px; margin: 0; text-align: left; } .markdown { padding: 0; margin: 0; text-align: left; } p { margin: 0; padding: 0; text-align: left; font-size: 11px; line-height: 1; }"
}
}
]
},
{
"entity": "sensor.sparkx_i7_cfs_box_1_humidity",
"grid_options": {
"columns": 6
},
"icon": "mdi:water-percent",
"name": "Humidity",
"type": "tile"
},
{
"entity": "sensor.sparkx_i7_cfs_box_1_temperature",
"grid_options": {
"columns": 6
},
"icon": "mdi:thermometer",
"name": "Temperature",
"type": "tile"
},
{
"cards": [
{
"entity": "sensor.sparkx_i7_active_filament_slot",
"grid_options": {
"columns": "full"
},
"icon": "mdi:magnet",
"icon_color": "{% set slot = states('sensor.sparkx_i7_active_filament_slot') %}{% set c = states('sensor.sparkx_i7_cfs_' ~ (slot | lower | replace(' ', '_')) ~ '_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}",
"multiline_secondary": true,
"name": "Next Deduction Match",
"primary": "{{ states('sensor.sparkx_i7_active_filament_slot') }}",
"secondary": "{% set slot = states('sensor.sparkx_i7_active_filament_slot') %}\n{% set n = slot.split('_')[-1] %}\n{% set ce = 'sensor.sparkx_i7_cfs_' ~ (slot | lower | replace(' ', '_')) ~ '_color' %}\n{% set color = states(ce) | replace('#', '') | lower %}\n{% set ns = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman') %}\n{% if e.endswith('_color_hex') and (state_attr(e[:-10], 'location') | default('', true) | lower) == ('cfs lite ' ~ n) and ns.id == '' %}\n{% set ns.id = states(e[:-10] ~ '_id') %}\n{% set ns.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor %}\n{% if slot in ['', 'unknown', 'unavailable'] %}No slot latched\n{% elif ns.id == '' %}No spool assigned to CFS Lite {{ n }}\n{% elif ns.rem < 0 %}Color #{{ color | upper }} → spool {{ ns.id }} unreachable\n{% elif ns.rem == 0 %}Color #{{ color | upper }} → spool {{ ns.id }} is EMPTY\n{% else %}Color #{{ color | upper }} → spool {{ ns.id }} ({{ states('sensor.spoolman_spool_' ~ ns.id ~ '_filament_name') }} · {{ ns.rem | round(1) }} g left)\n{% endif %}\n",
"type": "custom:mushroom-template-card"
}
],
"grid_options": {
"columns": "full"
},
"type": "horizontal-stack"
},
{
"heading": "Last/Current Print Job",
"heading_style": "title",
"icon": "mdi:printer-3d",
"type": "heading"
},
{
"entity": "sensor.sparkx_i7_used_material_length",
"grid_options": {
"columns": 6,
"rows": 1
},
"icon": "mdi:plus-minus",
"name": "Used Material Total",
"type": "tile"
},
{
"entity": "sensor.sparkx_moonraker_print_eta",
"features_position": "bottom",
"grid_options": {
"columns": 6,
"rows": 1
},
"name": "Print ETA",
"type": "tile",
"vertical": false
},
{
"entity": "sensor.sparkx_i7_filament_weight_estimated",
"grid_options": {
"columns": 6,
"rows": "auto"
},
"icon": "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in ['printing', 'paused'] %}\n mdi:printer-3d-nozzle\n{% else %}\n mdi:cash-multiple\n{% endif %}",
"icon_color": "{% set st = states('sensor.sparkx_i7_print_status') %} {% if st in ['printing', 'paused'] %}\n blue\n{% else %}\n green\n{% endif %}",
"multiline_secondary": true,
"primary": "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set w = states('sensor.sparkx_i7_filament_weight_estimated') %}\n{% if st in ['printing', 'paused'] %}\n {% if is_number(w) %}{{ w | float | round(1) }} g{% else %}weight unavailable{% endif %}\n{% else %}\n Last: {{ states('input_number.sparkx_i7_last_job_filament_weight') | float(0) | round(1) }} g\n{% endif %}\n",
"secondary": "{% set st = states('sensor.sparkx_i7_print_status') %}\n{% set c = states('sensor.sparkx_i7_filament_cost') %}\n{% if st in ['printing', 'paused'] %}\n {% if is_number(c) %}{{ c | float | round(2) }} $ (live){% else %}cost unavailable{% endif %}\n{% else %}\n {{ states('input_number.sparkx_i7_last_job_cost') | float(0) | round(2) }} $ (last job)\n{% endif %}\n",
"type": "custom:mushroom-template-card"
},
{
"entity": "sensor.sparkx_i7_expected_material_length",
"grid_options": {
"columns": 6,
"rows": "auto"
},
"icon": "mdi:scale-balance",
"icon_color": "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length') | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight') | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length') | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color') | default('', true) | string).split(';') %}\n{% set q = p | replace('#','') | lower | trim %}\n{% if q not in ['','none','unknown','unavailable'] %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot') | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false, ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location') | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status') | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown', label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle' %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{% elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH' %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough' %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'ok' %}green{% elif v.state == 'short' %}red{% elif v.state in ['none','idle'] %}grey{% else %}orange{% endif %}",
"multiline_secondary": true,
"name": "Filament Sufficiency",
"primary": "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length') | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight') | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length') | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color') | default('', true) | string).split(';') %}\n{% set q = p | replace('#','') | lower | trim %}\n{% if q not in ['','none','unknown','unavailable'] %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot') | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false, ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location') | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status') | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown', label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle' %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{% elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH' %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough' %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle' %}no active print{% else %}{{ job_g }} g needed · {{ used_g }} g used{% endif %}",
"secondary": "{% set gcm = states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) %}\n{% set lencm = states('sensor.sparkx_i7_expected_material_length') | float(0) %}\n{% set wgt = states('sensor.sparkx_i7_expected_material_weight') | float(0) %}\n{% set job_g = ((wgt if wgt > 0 else lencm * gcm) | round(1)) %}\n{% set used_g = ((states('sensor.sparkx_i7_used_material_length') | float(0)) * gcm) | round(1) %}\n{% set rem_g = ([job_g - used_g, 0] | max) | round(1) %}\n{% set gc = namespace(list=[]) %}\n{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color') | default('', true) | string).split(';') %}\n{% set q = p | replace('#','') | lower | trim %}\n{% if q not in ['','none','unknown','unavailable'] %}{% set gc.list = gc.list + [q] %}{% endif %}\n{% endfor %}\n{% set single = (gc.list | length) == 1 %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot') | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot if aslot in ['1','2','3','4'] else '' %}\n{% set s = namespace(short=false, ok=false, matched=0, active=false) %}\n{% for n in ['1','2','3','4'] %}\n{% set sp = namespace(id='', rem=-1) %}\n{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location') | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10]) | float(-1) %}\n{% endif %}\n{% endfor %}\n{% if sp.id != '' and sp.rem >= 0 %}\n{% set s.matched = s.matched + 1 %}\n{% if single %}\n{% if n == aslot %}\n{% set s.active = true %}\n{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif %}\n{% else %}\n{% if sp.rem < job_g %}{% set s.short = true %}{% else %}{% set s.ok = true %}{% endif %}\n{% endif %}\n{% endif %}\n{% endfor %}\n{% set active = (states('sensor.sparkx_i7_print_status') | default('', true)) in ['printing','paused'] %}\n{% set v = namespace(state='unknown', label='check unavailable') %}\n{% if not active %}\n{% set v.state = 'idle' %}\n{% set v.label = 'no active print' %}\n{% elif job_g <= 0 %}\n{% set v.state = 'none' %}\n{% set v.label = 'no slicer estimate yet' %}\n{% elif s.short %}\n{% set v.state = 'short' %}\n{% set v.label = 'NOT ENOUGH' %}\n{% elif s.ok %}\n{% set v.state = 'ok' %}\n{% set v.label = 'enough' %}\n{% elif single and aslot == '' %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no active CFS slot' %}\n{% elif single and not s.active %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'active slot has no spool' %}\n{% elif s.matched == 0 %}\n{% set v.state = 'unknown' %}\n{% set v.label = 'no spool loaded' %}\n{% endif %}\n{% if v.state == 'idle' %}last job: {{ job_g }} g needed{% else %}{{ rem_g }} g left to print · {{ v.label }}{% endif %}",
"type": "custom:mushroom-template-card"
},
{
"entity": "sensor.sparkx_i7_nozzle_temperature",
"grid_options": {
"columns": 4
},
"max": 300,
"min": 0,
"name": "Nozzle",
"severity": {
"green": 0,
"red": 240,
"yellow": 180
},
"type": "gauge",
"unit": "°C"
},
{
"entity": "sensor.sparkx_i7_bed_temperature",
"grid_options": {
"columns": 4
},
"max": 100,
"min": 0,
"name": "Bed",
"severity": {
"green": 0,
"red": 100,
"yellow": 60
},
"type": "gauge",
"unit": "°C"
},
{
"entity": "sensor.sparkx_i7_real_time_flow",
"grid_options": {
"columns": 4
},
"max": 40,
"min": 0,
"name": "Flow",
"severity": {
"green": 0,
"red": 24,
"yellow": 12
},
"type": "gauge"
}
],
"type": "grid"
}
],
"type": "sections"
}
]
}
}
}
File diff suppressed because it is too large. Load diff
+18
View File
@@ -673,6 +673,24 @@
]
}
]
},
{
"type": "grid",
"cards": [
{
"type": "heading",
"heading": "New section"
},
{
"show_state": true,
"show_name": true,
"camera_view": "live",
"fit_mode": "cover",
"type": "picture-entity",
"entity": "camera.sparkx_i7_printer_camera",
"camera_image": "camera.sparkx_i7_printer_camera"
}
]
}
]
}
Loaded 100 of 1519 files, more files were not shown because too many files have changed in this diff. Show more