Edit esp-reterminal-e1001.yaml

This commit is contained in:
ESPHome Device Builder
2026-07-30 18:12:19 +12:00
parent b4bbde9fcd
commit 23c189c9a3
+62 -165
View File
@@ -831,8 +831,8 @@ display:
#:########################################################################################:#
# DISPLAY CHANGE DETECTION:
# Builds a signature from only the content that is currently visible. The display is not
# physically refreshed when the visible wording, style and eye indicator would remain unchanged.
# Builds a signature from the visible Jobs content. The display is not physically refreshed
# when the visible wording, style and eye indicator would remain unchanged.
# https://esphome.io/components/script.html
#:########################################################################################:#
script:
@@ -841,16 +841,14 @@ script:
parameters:
force: bool
then:
# Debounce bursts of Home Assistant state restoration and page changes.
# Debounce bursts of Home Assistant state restoration.
- delay: 750ms
- lambda: |-
const auto now = id(homeassistant_time).now();
const int64_t now_ts = now.is_valid() ? now.timestamp : 0;
const int hour_limit = ${job_hours_display_limit};
const int finished_seconds = ${finished_highlight_seconds};
std::string signature = id(current_page) == 0 ? "jobs" : "appliances";
std::string signature = "jobs-v0.8.0";
auto append_text = [&](const std::string &value) {
signature += "|";
@@ -873,186 +871,85 @@ script:
append_text("no_time");
}
if (id(current_page) == 0) {
auto append_job = [&](const std::string &state, float due_ts,
const std::string &completed_time) {
append_text(state);
auto append_job = [&](const std::string &state, float due_ts,
const std::string &completed_time) {
append_text(state);
if (state == "Complete") {
append_text(completed_time);
} else if (state == "Not Due" && now_ts > 0 && !isnan(due_ts) && due_ts > now_ts) {
const int64_t remaining = static_cast<int64_t>(due_ts) - now_ts;
const int hours = static_cast<int>((remaining + 3599) / 3600);
if (hours <= hour_limit) {
append_text("hours");
append_number(hours);
} else {
const int days = static_cast<int>((remaining + 86399) / 86400);
append_text("days");
append_number(days);
}
if (state == "Complete") {
append_text(completed_time);
} else if (state == "Not Due" && now_ts > 0 && !isnan(due_ts) && due_ts > now_ts) {
const int64_t remaining = static_cast<int64_t>(due_ts) - now_ts;
const int hours = static_cast<int>((remaining + 3599) / 3600);
if (hours <= hour_limit) {
append_text("hours");
append_number(hours);
} else {
const int days = static_cast<int>((remaining + 86399) / 86400);
append_text("days");
append_number(days);
}
};
}
};
append_job(
id(job_dog_feeding_morning_state).state,
id(job_dog_feeding_morning_due_ts).state,
id(job_dog_feeding_morning_completed_time).state
);
append_job(
id(job_dog_feeding_evening_state).state,
id(job_dog_feeding_evening_due_ts).state,
id(job_dog_feeding_evening_completed_time).state
);
append_job(
id(job_dog_depooping_state).state,
id(job_dog_depooping_due_ts).state,
id(job_dog_depooping_completed_time).state
);
append_job(
id(job_dishwasher_unpacked_state).state,
id(job_dishwasher_unpacked_due_ts).state,
id(job_dishwasher_unpacked_completed_time).state
);
append_job(
id(job_rubbish_removed_state).state,
id(job_rubbish_removed_due_ts).state,
id(job_rubbish_removed_completed_time).state
);
append_job(
id(job_water_tv_pot_plant_state).state,
id(job_water_tv_pot_plant_due_ts).state,
id(job_water_tv_pot_plant_completed_time).state
);
append_job(
id(job_water_table_pot_plant_state).state,
id(job_water_table_pot_plant_due_ts).state,
id(job_water_table_pot_plant_completed_time).state
);
} else {
auto append_appliance = [&](const std::string &state,
float stop_ts,
float duration_seconds,
const std::string &stop_local) {
const bool valid_cycle =
!isnan(stop_ts) && stop_ts > 0 &&
!isnan(duration_seconds) && duration_seconds > 0;
append_job(
id(job_dog_feeding_morning_state).state,
id(job_dog_feeding_morning_due_ts).state,
id(job_dog_feeding_morning_completed_time).state
);
append_job(
id(job_dog_feeding_evening_state).state,
id(job_dog_feeding_evening_due_ts).state,
id(job_dog_feeding_evening_completed_time).state
);
append_job(
id(job_dog_depooping_state).state,
id(job_dog_depooping_due_ts).state,
id(job_dog_depooping_completed_time).state
);
append_job(
id(job_dishwasher_unpacked_state).state,
id(job_dishwasher_unpacked_due_ts).state,
id(job_dishwasher_unpacked_completed_time).state
);
append_job(
id(job_rubbish_removed_state).state,
id(job_rubbish_removed_due_ts).state,
id(job_rubbish_removed_completed_time).state
);
append_job(
id(job_water_tv_pot_plant_state).state,
id(job_water_tv_pot_plant_due_ts).state,
id(job_water_tv_pot_plant_completed_time).state
);
append_job(
id(job_water_table_pot_plant_state).state,
id(job_water_table_pot_plant_due_ts).state,
id(job_water_table_pot_plant_completed_time).state
);
if (state == "Operating") {
append_text("OPERATING");
return;
}
if (valid_cycle) {
bool recent_finish = false;
if (now_ts > 0) {
const int64_t age = now_ts - static_cast<int64_t>(stop_ts);
recent_finish = age >= 0 && age < finished_seconds;
}
append_text(recent_finish ? "FINISHED" : "COMPLETED");
append_text(stop_local);
return;
}
append_text(state);
};
append_appliance(
id(appliance_washing_state).state,
id(appliance_washing_stop_ts).state,
id(appliance_washing_duration).state,
id(appliance_washing_stop_local).state
);
append_appliance(
id(appliance_dryer_state).state,
id(appliance_dryer_stop_ts).state,
id(appliance_dryer_duration).state,
id(appliance_dryer_stop_local).state
);
append_appliance(
id(appliance_main_dishwasher_state).state,
id(appliance_main_dishwasher_stop_ts).state,
id(appliance_main_dishwasher_duration).state,
id(appliance_main_dishwasher_stop_local).state
);
append_appliance(
id(appliance_downstairs_dishwasher_state).state,
id(appliance_downstairs_dishwasher_stop_ts).state,
id(appliance_downstairs_dishwasher_duration).state,
id(appliance_downstairs_dishwasher_stop_local).state
);
append_appliance(
id(appliance_evcharger_32a_state).state,
id(appliance_evcharger_32a_stop_ts).state,
id(appliance_evcharger_32a_duration).state,
id(appliance_evcharger_32a_stop_local).state
);
append_appliance(
id(appliance_evcharger_16a_state).state,
id(appliance_evcharger_16a_stop_ts).state,
id(appliance_evcharger_16a_duration).state,
id(appliance_evcharger_16a_stop_local).state
);
append_appliance(
id(appliance_ryobi_left_state).state,
id(appliance_ryobi_left_stop_ts).state,
id(appliance_ryobi_left_duration).state,
id(appliance_ryobi_left_stop_local).state
);
append_appliance(
id(appliance_ryobi_right_state).state,
id(appliance_ryobi_right_stop_ts).state,
id(appliance_ryobi_right_duration).state,
id(appliance_ryobi_right_stop_local).state
);
append_appliance(
id(appliance_pool_pump_state).state,
id(appliance_pool_pump_stop_ts).state,
id(appliance_pool_pump_duration).state,
id(appliance_pool_pump_stop_local).state
);
append_appliance(
id(appliance_3d_printer_state).state,
id(appliance_3d_printer_stop_ts).state,
id(appliance_3d_printer_duration).state,
id(appliance_3d_printer_stop_local).state
);
}
// Persistent 32-bit FNV-1a hash. A separate value is retained for each page.
// Persistent 32-bit FNV-1a hash for the Jobs page.
uint32_t signature_hash = 2166136261UL;
for (const unsigned char character : signature) {
signature_hash ^= static_cast<uint32_t>(character);
signature_hash *= 16777619UL;
}
const uint32_t previous_hash =
id(current_page) == 0
? id(last_jobs_signature_hash)
: id(last_appliances_signature_hash);
id(display_update_required) =
force || previous_hash == 0 || signature_hash != previous_hash;
force || id(last_jobs_signature_hash) == 0 ||
signature_hash != id(last_jobs_signature_hash);
if (id(display_update_required)) {
if (id(current_page) == 0) {
id(last_jobs_signature_hash) = signature_hash;
} else {
id(last_appliances_signature_hash) = signature_hash;
}
id(last_jobs_signature_hash) = signature_hash;
ESP_LOGI(
"display",
"Visible content changed or page selected; refreshing page %d (hash 0x%08lX)",
id(current_page) + 1,
"Visible Jobs content changed; refreshing display (hash 0x%08lX)",
static_cast<unsigned long>(signature_hash)
);
} else {
ESP_LOGI(
"display",
"Page %d content unchanged (hash 0x%08lX); e-paper refresh skipped",
id(current_page) + 1,
"Jobs content unchanged (hash 0x%08lX); e-paper refresh skipped",
static_cast<unsigned long>(signature_hash)
);
}