diff --git a/esphome/.device-builder.json b/esphome/.device-builder.json index c67d208..01ad320 100644 --- a/esphome/.device-builder.json +++ b/esphome/.device-builder.json @@ -307,18 +307,19 @@ }, "_firmware_jobs": [ { - "job_id": "9d96dea4da3e", - "configuration": "esp-ledmatrix1.yaml", + "job_id": "06e53abdd6ff", + "configuration": "esp-3dprinterpow.yaml", "job_type": "upload", "status": "completed", - "created_at": "2026-06-03T23:08:40.527798+00:00", - "started_at": "2026-06-03T23:11:53.217518+00:00", - "completed_at": "2026-06-03T23:12:12.355156+00:00", + "created_at": "2026-06-09T11:35:54.132773+00:00", + "started_at": "2026-06-09T11:36:05.519037+00:00", + "completed_at": "2026-06-09T11:36:23.208528+00:00", "exit_code": 0, "error": null, "port": "OTA", "new_name": "", - "depends_on": "3029f689380d", + "depends_on": "5beb243f1231", + "dependency_released": true, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -331,18 +332,219 @@ "source_esphome_version": "" }, { - "job_id": "3029f689380d", - "configuration": "esp-ledmatrix1.yaml", + "job_id": "5beb243f1231", + "configuration": "esp-3dprinterpow.yaml", "job_type": "compile", "status": "completed", - "created_at": "2026-06-03T23:08:40.527759+00:00", - "started_at": "2026-06-03T23:08:40.528950+00:00", - "completed_at": "2026-06-03T23:11:53.215585+00:00", + "created_at": "2026-06-09T11:35:54.132732+00:00", + "started_at": "2026-06-09T11:35:54.133652+00:00", + "completed_at": "2026-06-09T11:36:05.517867+00:00", "exit_code": 0, "error": null, "port": "", "new_name": "", "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "41113c499335", + "configuration": "esp-centralstairs-top.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-06-09T09:53:08.269304+00:00", + "started_at": "2026-06-09T09:56:03.960069+00:00", + "completed_at": "2026-06-09T09:56:16.824331+00:00", + "exit_code": 0, + "error": null, + "port": "OTA", + "new_name": "", + "depends_on": "e8a0dc3df7ee", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "e8a0dc3df7ee", + "configuration": "esp-centralstairs-top.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-06-09T09:53:08.269262+00:00", + "started_at": "2026-06-09T09:53:08.269733+00:00", + "completed_at": "2026-06-09T09:56:03.957642+00:00", + "exit_code": 0, + "error": null, + "port": "", + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "1e40be3ec915", + "configuration": "esp-centralstairs-bottom.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-06-09T09:49:57.889780+00:00", + "started_at": "2026-06-09T09:52:48.099065+00:00", + "completed_at": "2026-06-09T09:52:59.909485+00:00", + "exit_code": 0, + "error": null, + "port": "OTA", + "new_name": "", + "depends_on": "288d2fd20526", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "288d2fd20526", + "configuration": "esp-centralstairs-bottom.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-06-09T09:49:57.889737+00:00", + "started_at": "2026-06-09T09:49:57.893793+00:00", + "completed_at": "2026-06-09T09:52:48.093273+00:00", + "exit_code": 0, + "error": null, + "port": "", + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "af97c828d58a", + "configuration": "esp-downstkitchlights.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-06-05T04:25:30.974561+00:00", + "started_at": "2026-06-05T04:25:44.710401+00:00", + "completed_at": "2026-06-05T04:25:58.902563+00:00", + "exit_code": 0, + "error": null, + "port": "OTA", + "new_name": "", + "depends_on": "bd7bbeb99660", + "dependency_released": true, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "bd7bbeb99660", + "configuration": "esp-downstkitchlights.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-06-05T04:25:30.974521+00:00", + "started_at": "2026-06-05T04:25:30.977331+00:00", + "completed_at": "2026-06-05T04:25:44.702151+00:00", + "exit_code": 0, + "error": null, + "port": "", + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "03f644942f51", + "configuration": "esp-ledmatrix1.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-06-04T08:57:16.073756+00:00", + "started_at": "2026-06-04T09:01:37.971417+00:00", + "completed_at": "2026-06-04T09:02:14.927761+00:00", + "exit_code": 0, + "error": null, + "port": "OTA", + "new_name": "", + "depends_on": "1ebb77f84d00", + "dependency_released": false, + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "1ebb77f84d00", + "configuration": "esp-ledmatrix1.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-06-04T08:57:16.073691+00:00", + "started_at": "2026-06-04T08:57:16.077874+00:00", + "completed_at": "2026-06-04T09:01:37.966674+00:00", + "exit_code": 0, + "error": null, + "port": "", + "new_name": "", + "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -367,6 +569,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -391,6 +594,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -415,6 +619,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -439,6 +644,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -463,6 +669,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -487,6 +694,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -511,6 +719,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -535,6 +744,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -559,6 +769,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -583,6 +794,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -607,6 +819,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -631,6 +844,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -655,6 +869,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -679,6 +894,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -703,6 +919,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -727,6 +944,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -751,6 +969,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -775,6 +994,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -799,6 +1019,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -823,6 +1044,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -847,6 +1069,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -871,6 +1094,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -895,6 +1119,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -919,6 +1144,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -943,6 +1169,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -967,6 +1194,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -991,6 +1219,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1015,6 +1244,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -1039,6 +1269,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1063,6 +1294,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1087,6 +1319,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1111,6 +1344,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1135,6 +1369,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -1159,6 +1394,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1183,6 +1419,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1207,6 +1444,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1231,6 +1469,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1255,6 +1494,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1279,6 +1519,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1303,6 +1544,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1327,6 +1569,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1351,6 +1594,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1375,6 +1619,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1399,6 +1644,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1423,6 +1669,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1447,6 +1694,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1471,6 +1719,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1495,6 +1744,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1519,6 +1769,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1543,6 +1794,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1567,6 +1819,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1591,6 +1844,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1615,6 +1869,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1639,6 +1894,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1663,6 +1919,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1687,6 +1944,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1711,6 +1969,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1735,6 +1994,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1759,6 +2019,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1783,6 +2044,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1807,6 +2069,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1831,6 +2094,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1855,6 +2119,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1879,6 +2144,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1903,6 +2169,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1927,6 +2194,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1951,6 +2219,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1975,6 +2244,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -1999,6 +2269,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2023,6 +2294,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2047,6 +2319,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2071,6 +2344,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2095,6 +2369,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2119,6 +2394,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2143,6 +2419,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2167,6 +2444,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2191,6 +2469,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2215,6 +2494,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2239,6 +2519,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2263,6 +2544,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2287,6 +2569,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2311,6 +2594,7 @@ "port": "OTA", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": 100, "remote_peer": "", "remote_job_id": "", @@ -2335,6 +2619,7 @@ "port": "", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -2359,6 +2644,7 @@ "port": "", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -2383,6 +2669,7 @@ "port": "", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -2407,6 +2694,7 @@ "port": "", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", @@ -2431,6 +2719,7 @@ "port": "", "new_name": "", "depends_on": "", + "dependency_released": false, "progress": null, "remote_peer": "", "remote_job_id": "", diff --git a/packages/announcement_test.yaml b/packages/announcement_test.yaml deleted file mode 100644 index 7602697..0000000 --- a/packages/announcement_test.yaml +++ /dev/null @@ -1,40 +0,0 @@ -################################################################################ -# PACKAGE: Announcement Test Button -################################################################################ - -input_button: - announcement_test: - name: Test Announcement - icon: mdi:bullhorn - -automation: - - id: announcement_test_button_pressed - alias: Announcement Test Button Pressed - mode: single - - trigger: - - platform: state - entity_id: input_button.announcement_test - - action: - # - action: script.view_road_announcement - # data: - # channels: "sony_tv_lounge" - # title: "View Road Test" - # short_announcement: "Test announcement" - # long_announcement: "This is a test announcement from the package test button." - # payload: "On" - # indicator: "" - - #- action: script.view_road_announcement - # data: - # channels: "pushover_zorruno,pushover_kim" - # title: "View Road Test" - # long_announcement: "This is a test through the View Road announcement router." - - - action: script.view_road_announcement - data: - channels: "lounge_google_home_voice, sony_tv_lounge" - title: "View Road " - short_announcement: "9pm, Free Power time" - long_announcement: "It is 9pm." diff --git a/packages/laundry_cancel_appliance_announcements.yaml b/packages/laundry_cancel_appliance_announcements.yaml new file mode 100644 index 0000000..d737fdb --- /dev/null +++ b/packages/laundry_cancel_appliance_announcements.yaml @@ -0,0 +1,57 @@ +################################################################################ +# Laundry Occupancy Cancel Appliance Announcements +# +# File: +# laundry_cancel_appliance_announcements.yaml +# +# Purpose: +# If laundry occupancy is detected, cancel appliance announcements on the +# LED matrix for both washing machine and dryer. +# +# Also provides a manual button entity: +# input_button.cancel_laundry_appliance_announcements +# +################################################################################ + +input_button: + cancel_laundry_appliance_announcements: + name: Cancel Laundry Appliance Announcements + icon: mdi:message-off-outline + +script: + laundry_cancel_appliance_announcements: + alias: "Laundry Cancel Appliance Announcements" + mode: restart + sequence: + - action: mqtt.publish + data: + topic: viewroad-commands/ledmatrix1/cancel_id + payload: "wash" + + - delay: + seconds: 5 + + - action: mqtt.publish + data: + topic: viewroad-commands/ledmatrix1/cancel_id + payload: "dry" + +automation: + - id: laundry_cancel_appliance_announcements_on_occupancy_or_button + alias: "Laundry - Cancel Appliance Announcements On Occupancy Or Button" + description: > + Cancels washing machine and dryer LED matrix announcements when laundry + occupancy is detected, or when the manual cancel button is pressed. + mode: restart + trigger: + - platform: state + entity_id: + - binary_sensor.esp_laundryenv_laundry_pir + - binary_sensor.laundry_ceiling_pir_x03ir_occupancy + to: "on" + + - platform: state + entity_id: input_button.cancel_laundry_appliance_announcements + + action: + - action: script.laundry_cancel_appliance_announcements diff --git a/packages/quiet_time.yaml b/packages/quiet_time.yaml index 25dd8d7..4171daf 100644 --- a/packages/quiet_time.yaml +++ b/packages/quiet_time.yaml @@ -6,6 +6,11 @@ # Quiet Time # # VERSIONS: +# V1.3 2026-06-07 +# - Added quiet time start and stop entity action lists. +# - Turns the LED matrix display OFF when quiet time starts. +# - Turns the LED matrix display ON when quiet time ends. +# # V1.2 2026-05-21 # - Added MQTT publishing when input_boolean.quiet_time changes. # - Publishes quiet_time state to viewroad-status/homeassistant/quiet-time. @@ -28,6 +33,20 @@ # will automatically be turned OFF. # - Default reset time is 07:00. # - The quiet_time state is published to MQTT whenever it changes. +# - When quiet_time changes, editable entity lists can turn things on or off. +# +# QUIET TIME ACTION LISTS: +# - quiet_time_start_turn_off_entities: +# Entities to turn OFF when quiet time starts. +# +# - quiet_time_start_turn_on_entities: +# Entities to turn ON when quiet time starts. +# +# - quiet_time_stop_turn_off_entities: +# Entities to turn OFF when quiet time ends. +# +# - quiet_time_stop_turn_on_entities: +# Entities to turn ON when quiet time ends. # # MQTT STATUS: # - Topic: @@ -107,17 +126,71 @@ automation: target: entity_id: input_boolean.quiet_time - - id: quiet_time_settings_to_mqtt - alias: "Publish quiet time value to MQTT" - description: "Publishes the Quiet Time boolean state to MQTT whenever it changes." + - id: quiet_time_state_change_actions_and_mqtt + alias: "Quiet Time - State Change Actions and MQTT" + description: "Publishes the Quiet Time state to MQTT and runs the configured start/stop entity actions." mode: single + variables: + quiet_time_start_turn_off_entities: + - light.led_matrix_display_led_matrix_display_display + + quiet_time_start_turn_on_entities: [] + + quiet_time_stop_turn_off_entities: [] + + quiet_time_stop_turn_on_entities: + - light.led_matrix_display_led_matrix_display_display + triggers: - trigger: state entity_id: input_boolean.quiet_time + from: + - "on" + - "off" + to: + - "on" + - "off" actions: - action: mqtt.publish data: topic: viewroad-status/homeassistant/quiet-time payload: "{{ trigger.to_state.state }}" + + - choose: + - conditions: + - condition: template + value_template: "{{ trigger.to_state.state == 'on' }}" + sequence: + - repeat: + for_each: "{{ quiet_time_start_turn_off_entities }}" + sequence: + - action: homeassistant.turn_off + target: + entity_id: "{{ repeat.item }}" + + - repeat: + for_each: "{{ quiet_time_start_turn_on_entities }}" + sequence: + - action: homeassistant.turn_on + target: + entity_id: "{{ repeat.item }}" + + - conditions: + - condition: template + value_template: "{{ trigger.to_state.state == 'off' }}" + sequence: + - repeat: + for_each: "{{ quiet_time_stop_turn_off_entities }}" + sequence: + - action: homeassistant.turn_off + target: + entity_id: "{{ repeat.item }}" + + - repeat: + for_each: "{{ quiet_time_stop_turn_on_entities }}" + sequence: + - action: homeassistant.turn_on + target: + entity_id: "{{ repeat.item }}" diff --git a/packages/view_road_announcement_router.yaml b/packages/view_road_announcement_router.yaml index 691816a..eaa1390 100644 --- a/packages/view_road_announcement_router.yaml +++ b/packages/view_road_announcement_router.yaml @@ -1,9 +1,14 @@ ################################################################################ # PACKAGE: View Road Announcement Router ################################################################################ -# -# Version: 1.4 -# Date: 2026-06-02 +# 1.7: +# - Updated Lounge Google Home Voice to speak short_announcement only. +# - This allows long_announcement to remain available for detailed channels +# such as Pushover without making voice announcements too long. +# 1.6: +# - Updated Sony TV Lounge channel to use short_announcement only. +# - Removed Sony TV Lounge payload suffix from message formatting. +# 1.5: Date: 2026-06-04 # # Purpose: # Central announcement router for general Home Assistant announcements. @@ -20,7 +25,7 @@ # short_announcement: "Washing complete" # long_announcement: "The washing machine has finished." # payload: "" -# indicator: "dry,1,15,10,2,1" +# indicator: "wash,1,15,10,6,5,1,0" # # Available channels: # @@ -38,17 +43,16 @@ # Uses: # title # short_announcement -# payload # Message format: -# " is " +# "" # # lounge_google_home_voice: # Also accepts alias: # google_home_voice # Uses: -# long_announcement -# Fallback: -# If long_announcement is blank, uses short_announcement and payload. +# short_announcement +# Notes: +# /s prefixes are stripped before being sent to voice. # Quiet time: # Blocked by default when input_boolean.quiet_time is on. # @@ -69,7 +73,7 @@ # Message format: # " []" # Example: -# "Washing complete [dry,1,15,10,2,1]" +# "Washing complete [wash,1,15,10,6,5,1,0]" # # led_matrix_2: # Future channel. @@ -79,7 +83,7 @@ # # LED matrix announcement format: # -# Message text [identifier,transition_mode,speed,repeat_seconds,repeat_times,sounder_quantity] +# Message text [identifier,transition_mode,speed,repeat_seconds,repeat_times,static_wait,sounder_quantity,sound_id] # # Example script call: # @@ -87,11 +91,11 @@ # data: # channels: "led_matrix_1" # short_announcement: "Washing complete" -# indicator: "dry,1,15,10,2,1" +# indicator: "wash,1,15,10,6,5,1,0" # # Result sent to MQTT: # -# Washing complete [dry,1,15,10,2,1] +# Washing complete [wash,1,15,10,6,5,1,0] # # Indicator fields: # @@ -104,6 +108,8 @@ # 0 = Slide up # 1 = Slide down # 2 = Pixel fall +# 3 = Static Up, Down +# 4 = Static Down, Up # # speed: # Per-message scroll delay in ms. @@ -118,16 +124,36 @@ # Clamped by ESPHome from 0 to 99. # 0 is treated as a one-shot announcement. # +# static_wait: +# Per-message static wait time in seconds. +# Clamped by ESPHome from 0 to 30. +# Only affects transition modes 3 and 4. +# Other transition modes ignore it. +# # sounder_quantity: # Number of announcement displays that should beep first. # 0 means no sounder beep. # +# sound_id: +# Stored by the LED matrix ESPHome logic for future sounder logic. +# It is not currently used by the display logic. +# # Notes: # The announcement router does not parse, clean, or clamp the indicator # fields. It passes the indicator through to the LED matrix in square # brackets. The LED matrix ESPHome YAML handles validation and behaviour. # +# The router does not intentionally trim leading spaces from +# short_announcement for LED matrix messages. The previous invisible leading +# space guard workaround has been removed. +# # Changes: +# 1.5: +# - Removed LED matrix invisible leading-space guard workaround. +# - Updated LED matrix announcement comments for the current 8-field format. +# - Updated LED matrix transition comments for modes 0-4. +# - Added static_wait and sound_id documentation to router comments. +# # 1.4: # - Documented LED matrix indicator format. # - Clarified that LED matrix indicator validation is handled by ESPHome. @@ -254,8 +280,8 @@ script: indicator: name: Indicator - description: LED matrix indicator data in the format identifier,transition_mode,speed,repeat_seconds,repeat_times,sounder_quantity. - example: "dry,1,15,10,2,1" + description: LED matrix indicator data in the format identifier,transition_mode,speed,repeat_seconds,repeat_times,static_wait,sounder_quantity,sound_id. + example: "wash,1,15,10,6,5,1,0" selector: text: @@ -295,7 +321,6 @@ script: led_matrix_2_mqtt_topic: "viewroad-commands/ledmatrix2/announce" led_matrix_mqtt_qos: 0 led_matrix_mqtt_retain: false - led_matrix_leading_space_guard: "" ########################################################################## # RESOLVE PASSED VALUES @@ -381,41 +406,33 @@ script: ann_quiet_time_blocked_channels_normalised: >- {{ ',' ~ (quiet_time_blocked_channels | join(',') | lower | replace(' ', '') | replace('\n', '') | trim(',')) ~ ',' }} - ann_sony_tv_message: >- - {% set short_text = ann_short_announcement | string | trim %} - {% set payload_text = ann_payload | string | trim %} - {% if short_text | length > 0 and payload_text | length > 0 %} - {{ short_text }} is {{ payload_text }} - {% elif short_text | length > 0 %} - {{ short_text }} + ann_short_announcement_raw: >- + {% if short_announcement is defined %} + {{ short_announcement }} + {% elif Short_Announcement is defined %} + {{ Short_Announcement }} {% else %} - {{ payload_text }} + {{ default_short_announcement }} {% endif %} + ann_short_announcement_clean: >- + {{ ann_short_announcement_raw | string | regex_replace('^(?:/s)+', '') | trim }} + + ann_sony_tv_message: >- + {{ ann_short_announcement_clean }} + ann_voice_message: >- - {% set long_text = ann_long_announcement | string | trim %} - {% set short_text = ann_short_announcement | string | trim %} - {% set payload_text = ann_payload | string | trim %} - {% if long_text | length > 0 %} - {{ long_text }} - {% elif short_text | length > 0 and payload_text | length > 0 %} - {{ short_text }} is {{ payload_text }} - {% elif short_text | length > 0 %} - {{ short_text }} - {% else %} - {{ payload_text }} - {% endif %} + {{ ann_short_announcement_clean }} - ann_led_matrix_message: >- - {% set short_text = short_announcement if short_announcement is defined - else Short_Announcement if Short_Announcement is defined - else default_short_announcement %} - {% set short_text = short_text | string %} - {% set indicator_text = ann_indicator | string | trim %} - {{ (led_matrix_leading_space_guard if short_text[0:1] == ' ' else '') ~ short_text ~ - (' [' ~ indicator_text ~ ']' - if indicator_text | length > 0 - else '') }} + ann_led_matrix_1_message: >- + {%- set short_text = ann_short_announcement_raw -%} + {%- set indicator_text = ann_indicator | string | trim -%} + {{- short_text | string -}}{{ ' [' ~ indicator_text ~ ']' if indicator_text | length > 0 else '' }} + + ann_led_matrix_2_message: >- + {%- set short_text = ann_short_announcement_clean -%} + {%- set indicator_text = ann_indicator | string | trim -%} + {{- short_text | string -}}{{ ' [' ~ indicator_text ~ ']' if indicator_text | length > 0 else '' }} ########################################################################## # CHANNEL: PUSHOVER ZORRUNO @@ -459,6 +476,8 @@ script: - condition: state entity_id: input_boolean.announcement_channel_sony_tv_lounge state: "on" + - condition: template + value_template: "{{ ann_sony_tv_message | string | trim | length > 0 }}" then: - action: notify.sony_android_tv_lounge data: @@ -575,10 +594,10 @@ script: # [] # # Example payload: - # Washing complete [dry,1,15,10,2,1] + # Washing complete [wash,1,15,10,6,5,1,0] # # Indicator format: - # identifier,transition_mode,speed,repeat_seconds,repeat_times,sounder_quantity + # identifier,transition_mode,speed,repeat_seconds,repeat_times,static_wait,sounder_quantity,sound_id # ########################################################################## @@ -589,12 +608,12 @@ script: entity_id: input_boolean.announcement_channel_led_matrix_1 state: "on" - condition: template - value_template: "{{ ann_led_matrix_message | string | trim | length > 0 }}" + value_template: "{{ ann_led_matrix_1_message | string | trim | length > 0 }}" then: - action: mqtt.publish data: topic: "{{ led_matrix_1_mqtt_topic }}" - payload: "{{ ann_led_matrix_message }}" + payload: "{{ ann_led_matrix_1_message }}" qos: "{{ led_matrix_mqtt_qos | int(0) }}" retain: "{{ led_matrix_mqtt_retain | bool(false) }}" @@ -615,7 +634,7 @@ script: # [] # # Indicator format: - # identifier,transition_mode,speed,repeat_seconds,repeat_times,sounder_quantity + # identifier,transition_mode,speed,repeat_seconds,repeat_times,static_wait,sounder_quantity,sound_id # ########################################################################## @@ -626,11 +645,11 @@ script: entity_id: input_boolean.announcement_channel_led_matrix_2 state: "on" - condition: template - value_template: "{{ ann_led_matrix_message | string | trim | length > 0 }}" + value_template: "{{ ann_led_matrix_2_message | string | trim | length > 0 }}" then: - action: mqtt.publish data: topic: "{{ led_matrix_2_mqtt_topic }}" - payload: "{{ ann_led_matrix_message }}" + payload: "{{ ann_led_matrix_2_message }}" qos: "{{ led_matrix_mqtt_qos | int(0) }}" retain: "{{ led_matrix_mqtt_retain | bool(false) }}"