diff --git a/automations/02_alerts_and_notifications.yaml b/automations/02_alerts_and_notifications.yaml index 06e7cf3..3f60cff 100644 --- a/automations/02_alerts_and_notifications.yaml +++ b/automations/02_alerts_and_notifications.yaml @@ -8,7 +8,7 @@ to: 'on' conditions: [] actions: - - action: script.notify_events_alerts + - action: notify.notify_events_alerts metadata: {} data: message: Garage floodlight batteries low diff --git a/automations/02_alerts_and_notifications.yaml.bak.20260808120900 b/automations/02_alerts_and_notifications.yaml.bak.20260808120900 new file mode 100644 index 0000000..06e7cf3 --- /dev/null +++ b/automations/02_alerts_and_notifications.yaml.bak.20260808120900 @@ -0,0 +1,213 @@ +# Safety, device, and household alert automations. +- id: '1742155540986' + alias: 'Garage Floodlight Low Battery Notification ' + description: '' + triggers: + - trigger: state + entity_id: binary_sensor.garage_floodlight_battery + to: 'on' + conditions: [] + actions: + - action: script.notify_events_alerts + metadata: {} + data: + message: Garage floodlight batteries low + title: Garage floodlight batteries low + mode: single + +- id: '1742841280696' + alias: Triple Threat Anti-Stink Juice Empty + description: '' + triggers: + - trigger: state + entity_id: + - sensor.triple_threat_spray_deodorant_liquid + enabled: true + to: '0' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Triple Threat's Anti-Stinky Juice is Empty + title: Triple Threat's Anti-Stinky Juice is Empty + mode: single + +- id: '1742841650033' + alias: The Deuce Litter Level + description: '' + triggers: + - trigger: state + entity_id: + - sensor.the_deuce_litter_level + enabled: true + to: '65' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: The Deuce's Litter is Low + title: The Deuce's Litter is Low + mode: single + +- id: '1742841709247' + alias: Triple Threat Litter Level Notification + description: '' + triggers: + - trigger: state + entity_id: + - sensor.triple_threat_litter_level + enabled: true + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Triple Threat's Litter is Low + title: Triple Threat's Litter is Low + mode: single + +- id: '1742841764585' + alias: Cat Crapper 3000 Low Litter Level Notification + description: '' + triggers: + - trigger: state + entity_id: + - sensor.cat_crapper_3000_litter_level + enabled: true + to: '65' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Cat Crapper 3000's Litter is Low + title: Cat Crapper 3000's Litter is Low + mode: single + +- id: '1742841838536' + alias: Poop Box Low Litter Level Notification + description: '' + triggers: + - trigger: state + entity_id: + - sensor.poop_box_litter_level + enabled: true + to: '65' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Poop Box's Litter is Low + title: Poop Box's Litter is Low + mode: single + +- id: '1742842192548' + alias: Cat Crapper 3000 is full of crap notification + description: '' + triggers: + - trigger: state + entity_id: + - binary_sensor.cat_crapper_3000_wastebin_filled + enabled: true + to: 'on' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Cat Crapper 3000 is full of crap + title: CLEAN Cat Crapper 3000 - it's full of crap + mode: single + +- id: '1742842261527' + alias: The Deuce is full of deuces notification + description: '' + triggers: + - trigger: state + entity_id: + - binary_sensor.the_deuce_wastebin_filled + enabled: true + to: 'on' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: The Deuce is full of deuces (laundry room) + title: Too many dueces have been dropped! + mode: single + +- id: '1742842372471' + alias: The Poop Box has runneth over Notification + description: '' + triggers: + - trigger: state + entity_id: + - binary_sensor.poop_box_wastebin_filled + enabled: true + to: 'on' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: The Poop Box has runneth over (basement, left side) + title: The poop box is bursting!! + mode: single + +- id: '1742842458817' + alias: Triple Threat Full Notification + description: '' + triggers: + - trigger: state + entity_id: + - binary_sensor.triple_threat_wastebin_filled + enabled: true + to: 'on' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Triple Threat can't take no more! (Basement, right side) + title: Triple Threat can't take no more! + mode: single + +- id: '1782932601001' + alias: Luma Smart Litter Box Waste Bin Full Notification + description: Notify when the Petlibro Luma Smart Litter Box waste bin is full. + triggers: + - trigger: state + entity_id: + - binary_sensor.luma_smart_litter_box_waste_bin_full + enabled: true + to: 'on' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Luma Smart Litter Box is full of crap + title: CLEAN Luma Smart Litter Box - it's full of crap + mode: single + +- id: '1782932601004' + alias: Luma Smart Litter Box Door Error Notification + description: Notify when the Petlibro Luma Smart Litter Box reports a door error. + triggers: + - trigger: state + entity_id: + - binary_sensor.luma_smart_litter_box_door_error + enabled: true + to: 'on' + conditions: [] + actions: + - action: notify.notify_events_cats + metadata: {} + data: + message: Luma Smart Litter Box has a door error + title: Luma Smart Litter Box door error + mode: single diff --git a/automations/07_climate_and_plugs.yaml b/automations/07_climate_and_plugs.yaml index e227ef3..9ac8e09 100644 --- a/automations/07_climate_and_plugs.yaml +++ b/automations/07_climate_and_plugs.yaml @@ -56,7 +56,22 @@ - action: switch.turn_off target: entity_id: switch.parents_window_fan - - action: script.notify_events_alerts + - action: notify.notify_events_alerts data: title: Dehumidifier tank is full message: Dehumidifier tank is full — Parents Window Fan outlet has been turned off. + +- id: dehumidifier_tank_sensor_low_battery + alias: Dehumidifier Tank Sensor Low Battery + description: Alert when the dehumidifier tank level sensor battery is at 10% or lower. + mode: single + triggers: + - trigger: numeric_state + entity_id: sensor.water_leak_sensor_battery + below: 10.1 + conditions: [] + actions: + - action: notify.notify_events_alerts + data: + title: Dehumidifier tank sensor battery low + message: Dehumidifier tank level sensor battery is at {{ states('sensor.water_leak_sensor_battery') }}%. Replace soon. diff --git a/automations/07_climate_and_plugs.yaml.bak.20260808120620 b/automations/07_climate_and_plugs.yaml.bak.20260808120620 new file mode 100644 index 0000000..e227ef3 --- /dev/null +++ b/automations/07_climate_and_plugs.yaml.bak.20260808120620 @@ -0,0 +1,62 @@ +# Climate and plug automations. + +- id: hermes_ac_controls_matter_plugs + alias: AC controls Matter plugs + description: Turn the four Tapo Matter plugs on while the Ecobee is actively cooling, and off when cooling stops. + mode: restart + triggers: + - trigger: state + entity_id: climate.meat_heater + attribute: hvac_action + to: cooling + id: ac_on + - trigger: state + entity_id: climate.meat_heater + attribute: hvac_action + from: cooling + id: ac_off + conditions: [] + actions: + - choose: + - conditions: + - condition: trigger + id: ac_on + sequence: + - action: switch.turn_on + continue_on_error: true + target: + entity_id: + - switch.smart_wi_fi_plug + - switch.smart_wi_fi_plug_2 + - switch.smart_wi_fi_plug_3 + - switch.smart_wi_fi_plug_4 + - conditions: + - condition: trigger + id: ac_off + sequence: + - action: switch.turn_off + continue_on_error: true + target: + entity_id: + - switch.smart_wi_fi_plug + - switch.smart_wi_fi_plug_2 + - switch.smart_wi_fi_plug_3 + - switch.smart_wi_fi_plug_4 + +- id: dehumidifier_tank_full_shutoff + alias: Dehumidifier Tank Full - Shut Off Parents Window Fan + description: When the dehumidifier tank level sensor detects water, turn off the Parents Window Fan outlet and send an alerts-channel notification. + mode: single + triggers: + - trigger: state + entity_id: binary_sensor.water_leak_sensor_moisture + to: 'on' + conditions: [] + actions: + - action: switch.turn_off + target: + entity_id: switch.parents_window_fan + - action: script.notify_events_alerts + data: + title: Dehumidifier tank is full + message: Dehumidifier tank is full — Parents Window Fan outlet has been turned off. diff --git a/automations/07_climate_and_plugs.yaml.bak.20260808120900 b/automations/07_climate_and_plugs.yaml.bak.20260808120900 new file mode 100644 index 0000000..39622b7 --- /dev/null +++ b/automations/07_climate_and_plugs.yaml.bak.20260808120900 @@ -0,0 +1,62 @@ +# Climate and plug automations. + +- id: hermes_ac_controls_matter_plugs + alias: AC controls Matter plugs + description: Turn the four Tapo Matter plugs on while the Ecobee is actively cooling, and off when cooling stops. + mode: restart + triggers: + - trigger: state + entity_id: climate.meat_heater + attribute: hvac_action + to: cooling + id: ac_on + - trigger: state + entity_id: climate.meat_heater + attribute: hvac_action + from: cooling + id: ac_off + conditions: [] + actions: + - choose: + - conditions: + - condition: trigger + id: ac_on + sequence: + - action: switch.turn_on + continue_on_error: true + target: + entity_id: + - switch.smart_wi_fi_plug + - switch.smart_wi_fi_plug_2 + - switch.smart_wi_fi_plug_3 + - switch.smart_wi_fi_plug_4 + - conditions: + - condition: trigger + id: ac_off + sequence: + - action: switch.turn_off + continue_on_error: true + target: + entity_id: + - switch.smart_wi_fi_plug + - switch.smart_wi_fi_plug_2 + - switch.smart_wi_fi_plug_3 + - switch.smart_wi_fi_plug_4 + +- id: dehumidifier_tank_full_shutoff + alias: Dehumidifier Tank Full - Shut Off Parents Window Fan + description: When the dehumidifier tank level sensor detects water, turn off the Parents Window Fan outlet and send an alerts-channel notification. + mode: single + triggers: + - trigger: state + entity_id: binary_sensor.water_leak_sensor_moisture + to: 'on' + conditions: [] + actions: + - action: switch.turn_off + target: + entity_id: switch.parents_window_fan + - action: notify.notify_events_alerts + data: + title: Dehumidifier tank is full + message: Dehumidifier tank is full — Parents Window Fan outlet has been turned off. diff --git a/esphome/.device-builder.json b/esphome/.device-builder.json index e27d67f..34f3080 100644 --- a/esphome/.device-builder.json +++ b/esphome/.device-builder.json @@ -14,24 +14,24 @@ }, "_firmware_jobs": [ { - "job_id": "fb0d0b7ff0d2", - "configuration": "airqualitysensor-1.yaml", - "job_type": "compile", - "status": "failed", - "created_at": "2026-07-27T07:21:36.611284+00:00", - "started_at": "2026-07-27T07:21:36.611485+00:00", - "completed_at": "2026-07-27T07:21:41.771383+00:00", - "compile_started_at": "2026-07-27T07:21:39.348059+00:00", - "compile_ended_at": "2026-07-27T07:21:41.398372+00:00", - "exit_code": 2, + "job_id": "e8cba46416aa", + "configuration": "cat-medication-tracker.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-25T17:13:07.335170+00:00", + "started_at": "2026-08-25T17:13:07.335378+00:00", + "completed_at": "2026-08-25T17:13:17.915981+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, "error": null, - "port": "", + "port": "OTA", "flash_bootloader": false, "is_deferred_install": false, "new_name": "", "depends_on": "", "dependency_released": false, - "progress": 36, + "progress": 100, "remote_peer": "", "remote_job_id": "", "remote_peer_label": "", @@ -45,24 +45,24 @@ "failure_reason": "" }, { - "job_id": "955fff8a799a", - "configuration": "airqualitysensor-3.yaml", - "job_type": "compile", - "status": "failed", - "created_at": "2026-07-27T07:14:31.460949+00:00", - "started_at": "2026-07-27T07:14:31.461165+00:00", - "completed_at": "2026-07-27T07:14:36.603337+00:00", - "compile_started_at": "2026-07-27T07:14:34.168802+00:00", - "compile_ended_at": "2026-07-27T07:14:36.220883+00:00", - "exit_code": 2, + "job_id": "72de2710f09c", + "configuration": "esphome-web-0fdcf4.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-25T17:12:14.058447+00:00", + "started_at": "2026-08-25T17:12:14.058680+00:00", + "completed_at": "2026-08-25T17:12:24.831617+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, "error": null, - "port": "", + "port": "OTA", "flash_bootloader": false, "is_deferred_install": false, "new_name": "", "depends_on": "", "dependency_released": false, - "progress": 36, + "progress": 100, "remote_peer": "", "remote_job_id": "", "remote_peer_label": "", @@ -76,24 +76,24 @@ "failure_reason": "" }, { - "job_id": "829fda33d7de", - "configuration": "airqualitysensor-2.yaml", - "job_type": "compile", - "status": "failed", - "created_at": "2026-07-27T07:07:26.370814+00:00", - "started_at": "2026-07-27T07:07:26.371019+00:00", - "completed_at": "2026-07-27T07:07:31.452971+00:00", - "compile_started_at": "2026-07-27T07:07:29.038276+00:00", - "compile_ended_at": "2026-07-27T07:07:31.083126+00:00", - "exit_code": 2, + "job_id": "21e98ab4e8c7", + "configuration": "master_bedroom_remote.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-25T17:10:52.606697+00:00", + "started_at": "2026-08-25T17:10:52.606868+00:00", + "completed_at": "2026-08-25T17:11:03.872155+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, "error": null, - "port": "", + "port": "OTA", "flash_bootloader": false, "is_deferred_install": false, "new_name": "", "depends_on": "", "dependency_released": false, - "progress": 36, + "progress": 100, "remote_peer": "", "remote_job_id": "", "remote_peer_label": "", @@ -107,13 +107,44 @@ "failure_reason": "" }, { - "job_id": "ad43a991a18a", + "job_id": "82953f10840f", + "configuration": "esp32-h2c-camera.yaml", + "job_type": "upload", + "status": "completed", + "created_at": "2026-08-25T17:10:03.118076+00:00", + "started_at": "2026-08-25T17:10:03.118394+00:00", + "completed_at": "2026-08-25T17:10:14.503522+00:00", + "compile_started_at": null, + "compile_ended_at": null, + "exit_code": 0, + "error": null, + "port": "OTA", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "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": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "ed5f7aab455a", "configuration": "home-energy-monitor.yaml", "job_type": "upload", "status": "failed", - "created_at": "2026-07-27T07:00:23.008762+00:00", - "started_at": "2026-07-27T07:00:23.008990+00:00", - "completed_at": "2026-07-27T07:00:26.359238+00:00", + "created_at": "2026-08-25T17:09:19.699824+00:00", + "started_at": "2026-08-25T17:09:19.700048+00:00", + "completed_at": "2026-08-25T17:09:39.124703+00:00", "compile_started_at": null, "compile_ended_at": null, "exit_code": 1, @@ -138,15 +169,46 @@ "failure_reason": "" }, { - "job_id": "e5b771bb970a", - "configuration": "home-energy-monitor.yaml", + "job_id": "d2c7207212ee", + "configuration": "airqualitysensor-1.yaml", + "job_type": "compile", + "status": "failed", + "created_at": "2026-08-25T17:08:34.612670+00:00", + "started_at": "2026-08-25T17:13:07.344216+00:00", + "completed_at": "2026-08-25T17:13:36.415421+00:00", + "compile_started_at": "2026-08-25T17:13:10.099364+00:00", + "compile_ended_at": "2026-08-25T17:13:36.015606+00:00", + "exit_code": 2, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": 36, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "c5628c6fe3f9", + "configuration": "cat-medication-tracker.yaml", "job_type": "compile", "status": "completed", - "created_at": "2026-07-27T07:00:00.371453+00:00", - "started_at": "2026-07-27T07:00:00.371688+00:00", - "completed_at": "2026-07-27T07:00:23.000274+00:00", - "compile_started_at": "2026-07-27T07:00:04.213437+00:00", - "compile_ended_at": "2026-07-27T07:00:22.847591+00:00", + "created_at": "2026-08-25T17:08:34.612589+00:00", + "started_at": "2026-08-25T17:12:14.060061+00:00", + "completed_at": "2026-08-25T17:13:07.332159+00:00", + "compile_started_at": "2026-08-25T17:12:17.324534+00:00", + "compile_ended_at": "2026-08-25T17:13:07.038881+00:00", "exit_code": 0, "error": null, "port": "", @@ -155,7 +217,7 @@ "new_name": "", "depends_on": "", "dependency_released": false, - "progress": 51, + "progress": 46, "remote_peer": "", "remote_job_id": "", "remote_peer_label": "", @@ -169,24 +231,24 @@ "failure_reason": "" }, { - "job_id": "2da5cdb4e646", - "configuration": "esp32-h2c-camera.yaml", - "job_type": "upload", + "job_id": "9b51425bc5fd", + "configuration": "esphome-web-0fdcf4.yaml", + "job_type": "compile", "status": "completed", - "created_at": "2026-07-24T07:39:25.274500+00:00", - "started_at": "2026-07-24T07:39:25.274671+00:00", - "completed_at": "2026-07-24T07:39:35.278237+00:00", - "compile_started_at": null, - "compile_ended_at": null, + "created_at": "2026-08-25T17:08:34.611953+00:00", + "started_at": "2026-08-25T17:11:31.525760+00:00", + "completed_at": "2026-08-25T17:12:14.055080+00:00", + "compile_started_at": "2026-08-25T17:11:33.943583+00:00", + "compile_ended_at": "2026-08-25T17:12:13.903587+00:00", "exit_code": 0, "error": null, - "port": "OTA", + "port": "", "flash_bootloader": false, "is_deferred_install": false, "new_name": "", "depends_on": "", "dependency_released": false, - "progress": 100, + "progress": 45, "remote_peer": "", "remote_job_id": "", "remote_peer_label": "", @@ -200,15 +262,108 @@ "failure_reason": "" }, { - "job_id": "997825760366", + "job_id": "c17bc9735983", + "configuration": "airqualitysensor-2.yaml", + "job_type": "compile", + "status": "failed", + "created_at": "2026-08-25T17:08:34.611689+00:00", + "started_at": "2026-08-25T17:11:20.773213+00:00", + "completed_at": "2026-08-25T17:11:31.523569+00:00", + "compile_started_at": "2026-08-25T17:11:23.438058+00:00", + "compile_ended_at": "2026-08-25T17:11:31.129798+00:00", + "exit_code": 2, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": 36, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "53688a31ab7e", + "configuration": "airqualitysensor-3.yaml", + "job_type": "compile", + "status": "failed", + "created_at": "2026-08-25T17:08:34.611262+00:00", + "started_at": "2026-08-25T17:10:52.607651+00:00", + "completed_at": "2026-08-25T17:11:20.770778+00:00", + "compile_started_at": "2026-08-25T17:10:55.391985+00:00", + "compile_ended_at": "2026-08-25T17:11:20.369024+00:00", + "exit_code": 2, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": 36, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "468e9a36ec00", + "configuration": "master_bedroom_remote.yaml", + "job_type": "compile", + "status": "completed", + "created_at": "2026-08-25T17:08:34.610981+00:00", + "started_at": "2026-08-25T17:10:03.119630+00:00", + "completed_at": "2026-08-25T17:10:52.603155+00:00", + "compile_started_at": "2026-08-25T17:10:06.055959+00:00", + "compile_ended_at": "2026-08-25T17:10:52.447504+00:00", + "exit_code": 0, + "error": null, + "port": "", + "flash_bootloader": false, + "is_deferred_install": false, + "new_name": "", + "depends_on": "", + "dependency_released": false, + "progress": 45, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "", + "target_esphome_version": "", + "failure_reason": "" + }, + { + "job_id": "65e32da12565", "configuration": "esp32-h2c-camera.yaml", "job_type": "compile", "status": "completed", - "created_at": "2026-07-24T07:38:45.083121+00:00", - "started_at": "2026-07-24T07:38:45.083333+00:00", - "completed_at": "2026-07-24T07:39:25.271318+00:00", - "compile_started_at": "2026-07-24T07:38:47.313931+00:00", - "compile_ended_at": "2026-07-24T07:39:25.141355+00:00", + "created_at": "2026-08-25T17:08:34.610892+00:00", + "started_at": "2026-08-25T17:09:19.703968+00:00", + "completed_at": "2026-08-25T17:10:03.113846+00:00", + "compile_started_at": "2026-08-25T17:09:22.036209+00:00", + "compile_ended_at": "2026-08-25T17:10:02.973350+00:00", "exit_code": 0, "error": null, "port": "", @@ -231,46 +386,15 @@ "failure_reason": "" }, { - "job_id": "c93f8e91e771", - "configuration": "esphome-web-0fdcf4.yaml", - "job_type": "upload", - "status": "completed", - "created_at": "2026-07-24T07:36:30.667449+00:00", - "started_at": "2026-07-24T07:36:30.667628+00:00", - "completed_at": "2026-07-24T07:36:40.818508+00:00", - "compile_started_at": null, - "compile_ended_at": null, - "exit_code": 0, - "error": null, - "port": "OTA", - "flash_bootloader": false, - "is_deferred_install": false, - "new_name": "", - "depends_on": "", - "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": "", - "target_esphome_version": "", - "failure_reason": "" - }, - { - "job_id": "5fd4eb50ae57", - "configuration": "esphome-web-0fdcf4.yaml", + "job_id": "9dd090fbbefe", + "configuration": "home-energy-monitor.yaml", "job_type": "compile", "status": "completed", - "created_at": "2026-07-24T07:35:51.309141+00:00", - "started_at": "2026-07-24T07:35:51.309336+00:00", - "completed_at": "2026-07-24T07:36:30.664302+00:00", - "compile_started_at": "2026-07-24T07:35:53.650249+00:00", - "compile_ended_at": "2026-07-24T07:36:30.519983+00:00", + "created_at": "2026-08-25T17:08:34.610253+00:00", + "started_at": "2026-08-25T17:08:34.611171+00:00", + "completed_at": "2026-08-25T17:09:19.696372+00:00", + "compile_started_at": "2026-08-25T17:08:39.364612+00:00", + "compile_ended_at": "2026-08-25T17:09:19.527944+00:00", "exit_code": 0, "error": null, "port": "", @@ -279,131 +403,7 @@ "new_name": "", "depends_on": "", "dependency_released": false, - "progress": 45, - "remote_peer": "", - "remote_job_id": "", - "remote_peer_label": "", - "device_name": "", - "device_friendly_name": "", - "source": "local", - "source_pin_sha256": "", - "source_label": "", - "source_esphome_version": "", - "target_esphome_version": "", - "failure_reason": "" - }, - { - "job_id": "ecf0e3c53743", - "configuration": "master_bedroom_remote.yaml", - "job_type": "upload", - "status": "completed", - "created_at": "2026-07-24T07:33:36.404139+00:00", - "started_at": "2026-07-24T07:33:36.404306+00:00", - "completed_at": "2026-07-24T07:33:47.000214+00:00", - "compile_started_at": null, - "compile_ended_at": null, - "exit_code": 0, - "error": null, - "port": "OTA", - "flash_bootloader": false, - "is_deferred_install": false, - "new_name": "", - "depends_on": "", - "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": "", - "target_esphome_version": "", - "failure_reason": "" - }, - { - "job_id": "d03d1ddb7de6", - "configuration": "master_bedroom_remote.yaml", - "job_type": "compile", - "status": "completed", - "created_at": "2026-07-24T07:32:49.402383+00:00", - "started_at": "2026-07-24T07:32:49.402577+00:00", - "completed_at": "2026-07-24T07:33:36.400215+00:00", - "compile_started_at": "2026-07-24T07:32:52.052074+00:00", - "compile_ended_at": "2026-07-24T07:33:36.247226+00:00", - "exit_code": 0, - "error": null, - "port": "", - "flash_bootloader": false, - "is_deferred_install": false, - "new_name": "", - "depends_on": "", - "dependency_released": false, - "progress": 45, - "remote_peer": "", - "remote_job_id": "", - "remote_peer_label": "", - "device_name": "", - "device_friendly_name": "", - "source": "local", - "source_pin_sha256": "", - "source_label": "", - "source_esphome_version": "", - "target_esphome_version": "", - "failure_reason": "" - }, - { - "job_id": "6e0a02e631d2", - "configuration": "cat-medication-tracker.yaml", - "job_type": "upload", - "status": "completed", - "created_at": "2026-07-24T07:08:15.605119+00:00", - "started_at": "2026-07-24T07:08:15.605287+00:00", - "completed_at": "2026-07-24T07:08:24.773603+00:00", - "compile_started_at": null, - "compile_ended_at": null, - "exit_code": 0, - "error": null, - "port": "OTA", - "flash_bootloader": false, - "is_deferred_install": false, - "new_name": "", - "depends_on": "", - "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": "", - "target_esphome_version": "", - "failure_reason": "" - }, - { - "job_id": "1a449f54a633", - "configuration": "cat-medication-tracker.yaml", - "job_type": "compile", - "status": "completed", - "created_at": "2026-07-24T07:07:27.593306+00:00", - "started_at": "2026-07-24T07:07:27.593633+00:00", - "completed_at": "2026-07-24T07:08:15.601210+00:00", - "compile_started_at": "2026-07-24T07:07:31.024600+00:00", - "compile_ended_at": "2026-07-24T07:08:15.335977+00:00", - "exit_code": 0, - "error": null, - "port": "", - "flash_bootloader": false, - "is_deferred_install": false, - "new_name": "", - "depends_on": "", - "dependency_released": false, - "progress": 46, + "progress": 51, "remote_peer": "", "remote_job_id": "", "remote_peer_label": "",