diff --git a/weatherman.yaml b/weatherman.yaml index aa947b7..dd4b265 100644 --- a/weatherman.yaml +++ b/weatherman.yaml @@ -9,6 +9,14 @@ esphome: priority: 200.0 then: - component.update: eink_display + - wait_until: + condition: + lambda: 'return id(data_updated) == true;' + # Wait a bit longer so all the items are received + - delay: 5s + - logger.log: "Initial sensor data received: Refreshing display..." + - lambda: 'id(initial_data_received) = true;' + - script.execute: update_screen esp32: board: esp32dev @@ -23,6 +31,19 @@ api: ota: + +button: + - platform: shutdown + name: "weatherman: Shutdown" + - platform: restart + name: "weatherman: Restart" + - platform: template + name: "weatherman: Refresh Screen" + entity_category: config + on_press: + - script.execute: update_screen + + # Global variables for detecting if the display needs to be refreshed. (Thanks @paviro!) globals: - id: data_updated @@ -33,7 +54,21 @@ globals: type: bool restore_value: no initial_value: 'false' + - id: recorded_display_refresh + type: int + restore_value: yes + initial_value: '0' + + +script: + - id: update_screen + then: + - lambda: 'id(data_updated) = false;' + - component.update: eink_display + - lambda: 'id(recorded_display_refresh) += 1;' + - lambda: 'id(display_last_update).publish_state(id(homeassistant_time).now().timestamp);' + # Check whether the display needs to be refreshed every minute, # based on whether new data is received or motion is detected. (Thanks @paviro!) @@ -48,14 +83,12 @@ time: condition: lambda: 'return id(data_updated) == true;' then: - - lambda: 'id(initial_data_received) = true;' - if: condition: binary_sensor.is_on: motion_detected then: - logger.log: "Sensor data updated and activity in home detected: Refreshing display..." - - component.update: eink_display - - lambda: 'id(data_updated) = false;' + - script.execute: update_screen else: - logger.log: "Sensor data updated but no activity in home - skipping display refresh." else: @@ -155,8 +188,23 @@ binary_sensor: id: motion_detected -# Call Subway and Weather sensors from HA. + sensor: + - platform: template + name: "Weatherman - Display Last Update" + device_class: timestamp + entity_category: "diagnostic" + id: display_last_update + + - platform: template + name: "Weatherman - Recorded Display Refresh" + accuracy_decimals: 0 + unit_of_measurement: "Refreshs" + state_class: "total_increasing" + entity_category: "diagnostic" + lambda: 'return id(recorded_display_refresh);' + + # Call Subway and Weather sensors from HA. - platform: homeassistant entity_id: sensor.gtfs_mta_subway_manhattan id: train_manhattan_due_in @@ -230,6 +278,7 @@ sensor: - platform: wifi_signal name: "WiFi Signal Sensor" id: wifisignal + entity_category: "diagnostic" update_interval: 60s