lubeda / EspHoMaTriXv2

A simple DIY status display with a 8x32 RGB LED matrix, implemented with esphome.io and Home Assistant.
MIT License
275 stars 25 forks source link

[BUG] on_empty_queue loop #245

Open popy2k14 opened 1 month ago

popy2k14 commented 1 month ago

Bug report

Describe the bug

I woke up in the middle of the night and the clock was empty (black). It seems

Additional information

To Reproduce

Use the config provided and activate night mode. Sadly, this happens really rare :-( As you can see, on_empty_queue() was called every 15 seconds, which called set_night_mode_on() which finally set an clock_screen with 1440 minutes.

Why this happens every 15 seonds!?

Expected behavior

No unexpected on_empty_queue loop.

Configuration

substitutions:
  # Pin definition from https://github.com/aptonline/PixelIt_Ulanzi 
  battery_pin: GPIO34 
  ldr_pin: GPIO35 
  matrix_pin: GPIO32 
  left_button_pin: GPIO26 
  mid_button_pin: GPIO27 
  right_button_pin: GPIO14 
  scl_pin: GPIO22 
  sda_pin: GPIO21

external_components:
  - source:
      type: git
      url: https://github.com/lubeda/EspHoMaTriXv2
      ref: 2024.5.1  #lief lange mit 2024.4.1
    refresh: 1min
    components: [ehmtxv2]    

esphome:
  comment: "Ulanzi TC001"
  project:
    name: "Ulanzi.EHMTXv2"
    version: "2.0.0"
  on_boot:
    then:
      - ds1307.read_time:

esp32:
  board: esp32dev

#include device_base yaml
packages:
  device_base: !include /config/esphome/common/device_base.yaml

font:
  # Font included in this folder
  # - file: mateine.ttf
  #   size: 16
  #   id: default_font
  #   glyphs:  |
  #     !?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/
  # Matrix Clock Fonts
  # Grab these from https://github.com/trip5/Matrix-Fonts
  # See https://github.com/lubeda/EspHoMaTriXv2#font
  # Store in a "fonts" subfolder of your ESPHome config folder or change paths below
  - file: fonts/MatrixLight8.bdf
    id: special_font
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz°
  #- file: fonts/MatrixChunky6.bdf
  #  id: special_font
  #  glyphs:  |
  #    ! "#$%&'()*+,-./0123456789:APMTapmt
  - file: fonts/Calcium.ttf
    id: default_font
    size: 16
    glyphs:  |
      !?"%‰()+*=,-_.:°µ²³0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz€$@<>/

globals:
  # aab = auto-adjustable brightness
  - id: aab_enabled
    type: "bool"
    restore_value: true
    initial_value: "true"
  - id: aab_add
    type: int
    initial_value: '10'
  - id: aab_max
    type: int
    initial_value: '220'
  - id: display_enabled
    type: "bool"
    restore_value: true
    initial_value: "true"
  - id: night_mode_enabled
    type: "bool"
    restore_value: true
    initial_value: "false"
  - id: is_running
    type: "bool"
    initial_value: "false"
  - id: queue_empty_count
    type: int
    initial_value: '0'    

ehmtxv2:
  id: rgb8x32
  icons2html: true
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  time_format: "%H:%M"
  date_format: "%d.%m"
  show_seconds: false
  brightness: 0  #0-255
  # Uncomment below if using the mateine font
  default_font_id: default_font
  special_font_id: special_font
  default_font_yoffset: 8
  special_font_yoffset: 8
  # Comment out below if using mateine font
  #default_font_id: default_font
  #default_font_yoffset: 8
  #special_font_id: special_font
  #special_font_yoffset: 6
  # until here

  # black boot logo with red dot
  boot_logo: "[32768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"

  clock_interval: 20      # show the clock at least each x seconds
  show_dow: false         # draw the day indicator on the bottom of the screen, defaults to true
  #show_date: true         # show the date for show_screen - show_clock seconds otherwise only shows the clock for show_screen seconds, defaults to true
  week_start_monday: true # default monday is first day of week, false = sunday
  night_mode_screens: [2,16]
  icons:
    - id: ha
      lameid: 7956
    - id: tempc
      lameid: 2422
    - id: plug
      lameid: 403
    - id: humidity
      lameid: 51764
    - id: co2
      lameid: 30662
    - id: weather_clear_night
      lameid: 53383
    - id: weather_cloudy
      lameid: 53384
    - id: weather_fog
      lameid: 12196  
    - id: weather_hail
      lameid: 53385  
    - id: weather_lightning
      lameid: 50231  
    - id: weather_lightning_rainy
      lameid: 49299  
    - id: weather_partlycloudy
      lameid: 53802  
    - id: weather_pouring
      lameid: 49300  
    - id: weather_rainy
      lameid: 2284  
    - id: weather_snowy
      lameid: 2289  
    - id: weather_snowy_rainy
      lameid: 49301  
    - id: weather_sunny
      lameid: 1246
    - id: weather_windy
      lameid: 17076  
    - id: weather_windy_variant
      lameid: 15618  
    - id: weather_exceptional
      lameid: 5464    
    - id: washing_machine_ready
      lameid: 26673
    - id: dryer_ready
      lameid: 48497
    - id: dishwasher_ready
      lameid: 47488
    - id: door_ringing
      lameid: 24800
    - id: fire
      lameid: 24873
    - id: water
      lameid: 24116
    - id: speaker
      lameid: 59332
    - id: mute
      lameid: 31722
  on_empty_queue:
    then:
      lambda: |-
        //set flag that we are running and from now on the switch changes lambda take effect
        id(is_running) = true;
        id(queue_empty_count) = id(queue_empty_count) + 1;

        //restore display state
        if (id(display_enabled)) {
            ESP_LOGI("on_empty_queue", "set display on!");
            //id(displaycontrol).turn_on();
            id(rgb8x32)->set_display_on();
        } else {
            ESP_LOGI("on_empty_queue", "set display off!");
            //id(displaycontrol).turn_off();
            id(rgb8x32)->set_display_off();
        }

        //restore night mode (this adds the clock_screen)
        if (id(night_mode_enabled)) {
            ESP_LOGI("on_empty_queue", "set night mode on!");        
            id(rgb8x32)->set_night_mode_on();
        } else {
            ESP_LOGI("on_empty_queue", "set night mode off!");        
            id(rgb8x32)->set_night_mode_off();
        }

        //add date screen
        id(rgb8x32)->date_screen(1440,5);
  on_start_running:
     then:
       lambda: |-
        //set flag that we are running and from now on the switch changes lambda take effect
        id(is_running) = true;

        //restore display state
        if (id(display_enabled)) {
            ESP_LOGI("on_empty_queue", "set display on!");
            //id(displaycontrol).turn_on();
            id(rgb8x32)->set_display_on();
        } else {
            ESP_LOGI("on_empty_queue", "set display off!");
            //id(displaycontrol).turn_off();
            id(rgb8x32)->set_display_off();
        }

        //restore night mode (this adds the clock_screen)
        if (id(night_mode_enabled)) {
            ESP_LOGI("on_empty_queue", "set night mode on!");        
            id(rgb8x32)->set_night_mode_on();
        } else {
            ESP_LOGI("on_empty_queue", "set night mode off!");        
            id(rgb8x32)->set_night_mode_off();
        }

        //add date screen
        id(rgb8x32)->date_screen(1440,5);
  on_next_screen:
    - homeassistant.event:
        event: esphome.new_screen
        data_template:
          iconname: !lambda "return icon.c_str();"
          text: !lambda "return text.c_str();"
  on_night_mode:
    then:
      lambda: |-
        if (state) {
            id(aab_enabled) = false;
            id(rgb8x32)->clock_screen(1440,10,true,$night_mode_r,0,0);
            id(rgb8x32)->set_brightness($night_mode_brightness);

        } else {
            id(aab_enabled) = true;
            id(rgb8x32)->clock_screen(1440,10,true,255,255,255);
        }

interval:
    #workaround that clock doesnt disappear after lifetime
  - interval: 720min
    then:
      lambda: |-
        //restore night mode (this adds the clock_screen)
        if (id(night_mode_enabled)) {
            ESP_LOGI("interval", "set night mode on!");        
            id(rgb8x32)->set_night_mode_on();
        } else {
            ESP_LOGI("interval", "set night mode off!");        
            id(rgb8x32)->set_night_mode_off();
        }

        //add date screen
        id(rgb8x32)->date_screen(1440,5);

    #workaround that clock reboot when it loops
  - interval: 1min
    then:
      lambda: |-
        //check on empty queue count
        //ESP_LOGI("interval", "empty queue counter is: %i", id(queue_empty_count));
        if (id(queue_empty_count) > 10000) {
            ESP_LOGI("interval", "empty queue is looping -> reboot");
            id(reboot).press();
        }
        id(queue_empty_count) = 0;

# workaround for compiling errors on esphome 2023.07: https://github.com/lubeda/EspHoMaTriXv2/issues/62#issuecomment-1643052894
animation:
  - id: animation_black
    file: icons/black_1x1_EspHoMaTriX.gif

binary_sensor:
  - platform: status
    name: "Status"
  - platform: gpio
    pin:
      number: $left_button_pin
      inverted: true
    name: "Left button"
    on_press:
      then:
        - number.decrement: screen_brightness
  - platform: gpio
    pin: 
      inverted: true
      number: $mid_button_pin
      mode: INPUT_PULLUP
    name: "Middle button"
    on_press:
      then:
        - switch.toggle: displaycontrol
  - platform: gpio
    pin: 
      number: $right_button_pin
      inverted: true
    name: "Right button"
    on_press:
      then:
        - number.increment: screen_brightness
# example to switch to next screen
#        lambda: |-
#          id(rgb8x32)->skip_screen();

# Enable Home Assistant API
api:
  services:
    - service: brightness_set
      variables:
        brightness: int
      then:
        lambda: |-
          id(rgb8x32)->set_brightness(brightness);
    - service: skip_screen
      then:
        lambda: |-
          id(rgb8x32)->skip_screen();
#disabled, we dont need the buzzer
#    - service: tuneplay
#      variables:
#        tune: string
#      then:
#        - rtttl.play:
#            rtttl: !lambda 'return tune;'

number:
  - platform: template
    name: "Brightness"
    id: screen_brightness
    min_value: 0
    max_value: 255
    update_interval: 10s
    step: 1
    lambda: |-
      return id(rgb8x32)->get_brightness();
    set_action:
      lambda: |-
        id(rgb8x32)->set_brightness(x);

switch:
  - platform: template
    name: "Display"
    id: displaycontrol
    icon: "mdi:power"
    restore_mode: ALWAYS_ON
    lambda: |-
      return id(rgb8x32)->show_display;
    turn_on_action:
      lambda: |-
        //just execute when is_running, otherwise we would manipulate display_enabled on an not so good point in time
        if(id(is_running) == true)
        {
            id(rgb8x32)->set_display_on();
            id(display_enabled) = true;
        }
    turn_off_action:
      lambda: |-
        //just execute when is_running, otherwise we would manipulate display_enabled on an not so good point in time
        if(id(is_running) == true)
        {
            id(rgb8x32)->set_display_off();
            id(display_enabled) = false;
        }
  - platform: template
    name: "Auto-Adjust Brightness"
    id: switch_autobrightness
    icon: mdi:brightness-auto
    restore_mode: ALWAYS_ON
    lambda: |-
      return(id(aab_enabled));
    turn_on_action:
      lambda: |-
        id(aab_enabled) = true;
    turn_off_action:
      lambda: |-
        id(aab_enabled) = false;
  - platform: template
    name: "Night mode"
    id: switch_night_mode
    icon: mdi:sleep
    restore_mode: ALWAYS_ON
    lambda: |-
        return id(rgb8x32)->night_mode;
    turn_on_action:
      lambda: |-
        //just execute when is_running, otherwise we would manipulate night_mode_enabled on an not so good point in time
        if(id(is_running) == true)
        {      
            id(rgb8x32)->set_night_mode_on();
            id(night_mode_enabled) = true;
        }
    turn_off_action:
      lambda: |-
        //just execute when is_running, otherwise we would manipulate night_mode_enabled on an not so good point in time
        if(id(is_running) == true)
        {      
            id(rgb8x32)->set_night_mode_off();
            id(night_mode_enabled) = false;
        }

sensor:
  - platform: sht3xd
    temperature:
      name: "Temperature"
    humidity:
      name: "Humidity"
    update_interval: 60s
  - platform: adc
    id: light_sensor
    name: "Illuminance"
    pin: $ldr_pin
    device_class: illuminance    
    update_interval: 10s
    attenuation: auto
    unit_of_measurement: lx
    accuracy_decimals: 0
    filters:
      - lambda: |-
          return (x / 10000.0) * 2000000.0 - 15 ;
    on_value:
      then:
        - lambda: |-
            if ( id(aab_enabled) ) {
              int n = x / 4 + id(aab_add); // new_value
              if (n > id(aab_max)) n = id(aab_max);
              if (n < $aab_min) n = $aab_min;
              int c = id(rgb8x32)->get_brightness(); // current value
              c = c>0?c:1 ; 
              int d = (n - c) * 100 / c; // diff in %
              if ( abs(d) > 2 ) id(rgb8x32)->set_brightness(n);
            }

#disabled, we dont need the buzzer     
#output:
#  - platform: ledc
#    pin: $buzzer_pin
#    id: rtttl_out

#rtttl:
#  output: rtttl_out

#The hardware design of the ulanzi isn't perfect. If your ulanzi makes a crazy beeping noise after removinf the rtttl-component you may use this setting to make it silent again.
output:
  - platform: gpio
    pin: GPIO15
    id: crazy_hardware_workaround

i2c:
  sda: $sda_pin
  scl: $scl_pin
  scan: true
  id: i2cbus

light:
  - platform: neopixelbus
    id: ehmtx_light
    type: GRB
    internal: true
    variant: WS2812
    pin: $matrix_pin
    num_leds: 256
    color_correct: [30%, 30%, 30%]
    gamma_correct: 2.0
    name: "Light"
    restore_mode: ALWAYS_OFF

time:
  - platform: homeassistant
    on_time_sync:
      then:
        ds1307.write_time:
  - platform: ds1307
    update_interval: never
    id: ehmtx_time

display:
  - platform: addressable_light
    id: ehmtx_display
    addressable_light_id: ehmtx_light
    width: 32
    height: 8
    pixel_mapper: |-
      if (y % 2 == 0) {
        return (y * 32) + x;
      }
      return (y * 32) + (31 - x);
    rotation: 0°
    update_interval: 16ms
    auto_clear_enabled: true
    lambda: |-
      id(rgb8x32)->tick();
      id(rgb8x32)->draw();

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

INFO ESPHome 2024.7.0
INFO Reading configuration /config/esphome/pixel-clock-sz.yaml...
INFO Updating https://github.com/lubeda/EspHoMaTriXv2@2024.5.1
WARNING
 WARNING Please check the documentation and wiki https://github.com/lubeda/EspHoMaTriXv2
WARNING This will only work with esphome >= 2023.7.0
WARNING
 INFO Detected timezone 'Europe/Vienna'
INFO Detected timezone 'Europe/Vienna'
INFO Detected timezone 'Europe/Vienna'
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.0.147 using esphome API
INFO Successfully connected to pixel-clock-sz @ 192.168.0.147 in 0.028s
INFO Successful handshake with pixel-clock-sz @ 192.168.0.147 in 0.084s
[05:23:00][I][app:100]: ESPHome version 2024.6.1 compiled on Jun 23 2024, 09:43:27
[05:23:00][I][app:102]: Project Ulanzi.EHMTXv2 version 2.0.0
[05:23:00][C][wifi:599]: WiFi:
[05:23:00][C][wifi:427]:   Local MAC: XXXXXXXXXXXX
[05:23:00][C][wifi:432]:   SSID: 'WLANMEDIA'[redacted]
[05:23:00][C][wifi:435]:   IP Address: 192.168.0.147
[05:23:00][C][wifi:439]:   BSSID: XXXXXXXXXXXXX[redacted]
[05:23:00][C][wifi:440]:   Hostname: 'pixel-clock-sz'
[05:23:00][C][wifi:442]:   Signal strength: -22 dB ▂▄▆█
[05:23:00][C][wifi:446]:   Channel: 6
[05:23:00][C][wifi:447]:   Subnet: 255.255.255.0
[05:23:00][C][wifi:448]:   Gateway: 192.168.0.254
[05:23:00][C][wifi:449]:   DNS1: 192.168.0.254
[05:23:00][C][wifi:450]:   DNS2: 0.0.0.0
[05:23:00][C][logger:185]: Logger:
[05:23:00][C][logger:186]:   Level: DEBUG
[05:23:00][C][logger:188]:   Log Baud Rate: 115200
[05:23:00][C][logger:189]:   Hardware UART: UART0
[05:23:00][C][i2c.arduino:071]: I2C Bus:
[05:23:00][C][i2c.arduino:072]:   SDA Pin: GPIO21
[05:23:00][C][i2c.arduino:073]:   SCL Pin: GPIO22
[05:23:00][C][i2c.arduino:074]:   Frequency: 50000 Hz
[05:23:00][C][i2c.arduino:086]:   Recovery: bus successfully recovered
[05:23:00][I][i2c.arduino:096]: Results from i2c bus scan:
[05:23:00][I][i2c.arduino:102]: Found i2c device at address 0x44
[05:23:00][I][i2c.arduino:102]: Found i2c device at address 0x68
[05:23:00][C][uptime.sensor:031]: Uptime Sensor 'Uptime'
[05:23:00][C][uptime.sensor:031]:   Device Class: 'duration'
[05:23:00][C][uptime.sensor:031]:   State Class: 'total_increasing'
[05:23:00][C][uptime.sensor:031]:   Unit of Measurement: 's'
[05:23:00][C][uptime.sensor:031]:   Accuracy Decimals: 0
[05:23:00][C][uptime.sensor:031]:   Icon: 'mdi:timer-outline'
[05:23:00][C][template.number:050]: Template Number 'Brightness'
[05:23:00][C][template.number:051]:   Optimistic: NO
[05:23:00][C][template.number:052]:   Update Interval: 10.0s
[05:23:00][C][gpio.output:010]: GPIO Binary Output:
[05:23:00][C][gpio.output:011]:   Pin: GPIO15
[05:23:00][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Left button'
[05:23:00][C][gpio.binary_sensor:016]:   Pin: GPIO26
[05:23:00][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Middle button'
[05:23:00][C][gpio.binary_sensor:016]:   Pin: GPIO27
[05:23:00][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Right button'
[05:23:00][C][gpio.binary_sensor:016]:   Pin: GPIO14
[05:23:00][C][light:103]: Light 'Light'
[05:23:00][C][light:105]:   Default Transition Length: 1.0s
[05:23:00][C][light:106]:   Gamma Correct: 2.00
[05:23:00][D][EHMTXv2:1356]: on_empty_queue trigger
[05:23:00][I][on_empty_queue:184]: set display on!
[05:23:00][D][EHMTXv2:156]: display on
[05:23:00][I][on_empty_queue:195]: set night mode on!
[05:23:00][D][EHMTXv2:178]: night mode on
[05:23:00][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:23:00][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:23:00][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:23:00][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:23:00][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:23:00][W][component:237]: Component display took a long time for an operation (62 ms).
[05:23:00][W][component:238]: Components should block for at most 30 ms.
[05:23:00][C][template.switch:068]: Template Switch 'Display'
[05:23:00][C][template.switch:070]:   Icon: 'mdi:power'
[05:23:00][C][template.switch:091]:   Restore Mode: always ON
[05:23:00][C][template.switch:057]:   Optimistic: NO
[05:23:00][C][template.switch:068]: Template Switch 'Auto-Adjust Brightness'
[05:23:00][C][template.switch:070]:   Icon: 'mdi:brightness-auto'
[05:23:00][C][template.switch:091]:   Restore Mode: always ON
[05:23:00][C][template.switch:057]:   Optimistic: NO
[05:23:00][C][template.switch:068]: Template Switch 'Night mode'
[05:23:00][C][template.switch:070]:   Icon: 'mdi:sleep'
[05:23:00][C][template.switch:091]:   Restore Mode: always ON
[05:23:00][C][template.switch:057]:   Optimistic: NO
[05:23:00][C][homeassistant.time:010]: Home Assistant Time:
[05:23:00][C][homeassistant.time:011]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[05:23:00][C][ds1307:022]: DS1307:
[05:23:00][C][ds1307:023]:   Address: 0x68
[05:23:00][C][ds1307:027]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[05:23:00][C][sht3xd:049]: SHT3xD:
[05:23:00][D][sht3xd:064]:   Setup successful
[05:23:00][D][sht3xd:065]:   Serial Number: 0x19E68417
[05:23:00][D][sht3xd:066]:   Heater Enabled: false
[05:23:00][C][sht3xd:068]:   Address: 0x44
[05:23:00][C][sht3xd:069]:   Update Interval: 60.0s
[05:23:00][C][sht3xd:071]:   Temperature 'Temperature'
[05:23:00][C][sht3xd:071]:     Device Class: 'temperature'
[05:23:00][C][sht3xd:071]:     State Class: 'measurement'
[05:23:00][C][sht3xd:071]:     Unit of Measurement: '°C'
[05:23:00][C][sht3xd:071]:     Accuracy Decimals: 1
[05:23:00][C][sht3xd:072]:   Humidity 'Humidity'
[05:23:00][C][sht3xd:072]:     Device Class: 'humidity'
[05:23:00][C][sht3xd:072]:     State Class: 'measurement'
[05:23:00][C][sht3xd:072]:     Unit of Measurement: '%'
[05:23:00][C][sht3xd:072]:     Accuracy Decimals: 1
[05:23:00][C][adc:097]: ADC Sensor 'Illuminance'
[05:23:00][C][adc:097]:   Device Class: 'illuminance'
[05:23:00][C][adc:097]:   State Class: 'measurement'
[05:23:00][C][adc:097]:   Unit of Measurement: 'lx'
[05:23:00][C][adc:097]:   Accuracy Decimals: 0
[05:23:00][C][adc:107]:   Pin: GPIO35
[05:23:00][C][adc:109]:   Attenuation: auto
[05:23:00][C][adc:141]:   Samples: 1
[05:23:00][C][adc:142]:   Update Interval: 10.0s
[05:23:00][C][version.text_sensor:021]: Version Text Sensor 'Version'
[05:23:00][C][version.text_sensor:021]:   Icon: 'mdi:new-box'
[05:23:00][C][restart.button:017]: Restart Button 'Reboot'
[05:23:00][C][status:034]: Status Binary Sensor 'Status'
[05:23:00][C][status:034]:   Device Class: 'connectivity'
[05:23:00][C][homeassistant.time:010]: Home Assistant Time:
[05:23:00][C][homeassistant.time:011]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[05:23:00][C][captive_portal:088]: Captive Portal:
[05:23:00][C][web_server:173]: Web Server:
[05:23:00][C][web_server:174]:   Address: pixel-clock-sz.local:80
[05:23:00][C][mdns:115]: mDNS:
[05:23:00][C][mdns:116]:   Hostname: pixel-clock-sz
[05:23:00][C][esphome.ota:073]: Over-The-Air updates:
[05:23:00][C][esphome.ota:074]:   Address: pixel-clock-sz.local:3232
[05:23:00][C][esphome.ota:075]:   Version: 2
[05:23:00][C][esphome.ota:078]:   Password configured
[05:23:00][C][safe_mode:018]: Safe Mode:
[05:23:00][C][safe_mode:020]:   Boot considered successful after 60 seconds
[05:23:00][C][safe_mode:021]:   Invoke after 10 boot attempts
[05:23:00][C][safe_mode:023]:   Remain in safe mode for 300 seconds
[05:23:00][C][api:139]: API Server:
[05:23:00][C][api:140]:   Address: pixel-clock-sz.local:6053
[05:23:00][C][api:142]:   Using noise encryption: YES
[05:23:00][C][wifi_signal.sensor:009]: WiFi Signal 'Wifi Signal'
[05:23:00][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[05:23:00][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[05:23:00][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[05:23:00][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[05:23:00][C][wifi_info:009]: WifiInfo IPAddress 'IP Address'
[05:23:00][C][EHMTXv2:2951]: EspHoMatriXv2 version: 2024.5.0
[05:23:00][C][EHMTXv2:2952]: Icons: 28 of 90
[05:23:00][C][EHMTXv2:2953]: Clock interval: 20 s
[05:23:00][C][EHMTXv2:2954]: Date format: %d.%m
[05:23:00][C][EHMTXv2:2955]: Time format: %H:%M
[05:23:00][C][EHMTXv2:2956]: Interval (ms) scroll: 80
[05:23:00][C][EHMTXv2:2967]: Weekstart: Monday
[05:23:00][C][EHMTXv2:2968]: Weekdays: SOMODIMIDOFRSA Count: 14
[05:23:00][C][EHMTXv2:2969]: Display: On
[05:23:00][C][EHMTXv2:2970]: Night mode: On
[05:23:00][C][EHMTXv2:2971]: Weekday accent: Off
[05:23:00][C][EHMTXv2:2972]: Replace Time and Date: Off
[05:23:04][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:23:05][D][number:012]: 'Brightness': Sending state 20.000000
[05:23:07][D][sensor:094]: 'Uptime': Sending state 2230661.25000 s with 0 decimals of accuracy
[05:23:14][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:23:15][D][EHMTXv2:1356]: on_empty_queue trigger
[05:23:15][I][on_empty_queue:184]: set display on!
[05:23:15][D][EHMTXv2:156]: display on
[05:23:15][I][on_empty_queue:195]: set night mode on!
[05:23:15][D][EHMTXv2:178]: night mode on
[05:23:15][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:23:15][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:23:15][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:23:15][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:23:15][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:23:15][W][component:237]: Component display took a long time for an operation (51 ms).
[05:23:15][W][component:238]: Components should block for at most 30 ms.
[05:23:15][D][number:012]: 'Brightness': Sending state 20.000000
[05:23:24][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:23:24][D][sht3xd:097]: Got temperature=35.70°C humidity=42.13%
[05:23:24][D][sensor:094]: 'Temperature': Sending state 35.70000 °C with 1 decimals of accuracy
[05:23:24][D][sensor:094]: 'Humidity': Sending state 42.13169 % with 1 decimals of accuracy
[05:23:25][D][number:012]: 'Brightness': Sending state 20.000000
[05:23:30][D][EHMTXv2:1356]: on_empty_queue trigger
[05:23:30][I][on_empty_queue:184]: set display on!
[05:23:30][D][EHMTXv2:156]: display on
[05:23:30][I][on_empty_queue:195]: set night mode on!
[05:23:30][D][EHMTXv2:178]: night mode on
[05:23:30][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:23:30][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:23:30][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:23:30][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:23:30][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:23:30][W][component:237]: Component display took a long time for an operation (53 ms).
[05:23:30][W][component:238]: Components should block for at most 30 ms.
[05:23:32][D][sensor:094]: 'Wifi Signal': Sending state -21.00000 dBm with 0 decimals of accuracy
[05:23:34][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:23:35][D][number:012]: 'Brightness': Sending state 20.000000
[05:23:44][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:23:45][D][EHMTXv2:1356]: on_empty_queue trigger
[05:23:45][I][on_empty_queue:184]: set display on!
[05:23:45][D][EHMTXv2:156]: display on
[05:23:45][I][on_empty_queue:195]: set night mode on!
[05:23:45][D][EHMTXv2:178]: night mode on
[05:23:45][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:23:45][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:23:45][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:23:45][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:23:45][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:23:45][W][component:237]: Component display took a long time for an operation (59 ms).
[05:23:45][W][component:238]: Components should block for at most 30 ms.
[05:23:45][D][number:012]: 'Brightness': Sending state 20.000000
[05:23:54][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:23:55][D][number:012]: 'Brightness': Sending state 20.000000
[05:24:00][D][EHMTXv2:1356]: on_empty_queue trigger
[05:24:00][I][on_empty_queue:184]: set display on!
[05:24:00][D][EHMTXv2:156]: display on
[05:24:00][I][on_empty_queue:195]: set night mode on!
[05:24:00][D][EHMTXv2:178]: night mode on
[05:24:00][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:24:00][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:24:00][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:24:00][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:24:00][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:24:00][W][component:237]: Component display took a long time for an operation (53 ms).
[05:24:00][W][component:238]: Components should block for at most 30 ms.
[05:24:04][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:24:05][D][number:012]: 'Brightness': Sending state 20.000000
[05:24:07][D][sensor:094]: 'Uptime': Sending state 2230721.25000 s with 0 decimals of accuracy
[05:24:14][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:24:15][D][number:012]: 'Brightness': Sending state 20.000000
[05:24:15][D][EHMTXv2:1356]: on_empty_queue trigger
[05:24:15][I][on_empty_queue:184]: set display on!
[05:24:15][D][EHMTXv2:156]: display on
[05:24:15][I][on_empty_queue:195]: set night mode on!
[05:24:15][D][EHMTXv2:178]: night mode on
[05:24:15][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:24:15][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:24:15][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:24:15][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:24:15][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:24:15][W][component:237]: Component display took a long time for an operation (56 ms).
[05:24:15][W][component:238]: Components should block for at most 30 ms.
[05:24:24][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:24:24][D][sht3xd:097]: Got temperature=35.74°C humidity=42.05%
[05:24:24][D][sensor:094]: 'Temperature': Sending state 35.74273 °C with 1 decimals of accuracy
[05:24:24][D][sensor:094]: 'Humidity': Sending state 42.05386 % with 1 decimals of accuracy
[05:24:25][D][number:012]: 'Brightness': Sending state 20.000000
[05:24:30][D][EHMTXv2:1356]: on_empty_queue trigger
[05:24:30][I][on_empty_queue:184]: set display on!
[05:24:30][D][EHMTXv2:156]: display on
[05:24:30][I][on_empty_queue:195]: set night mode on!
[05:24:30][D][EHMTXv2:178]: night mode on
[05:24:30][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:24:30][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:24:30][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:24:30][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:24:30][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:24:30][W][component:237]: Component display took a long time for an operation (51 ms).
[05:24:30][W][component:238]: Components should block for at most 30 ms.
[05:24:32][D][sensor:094]: 'Wifi Signal': Sending state -21.00000 dBm with 0 decimals of accuracy
[05:24:34][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:24:35][D][number:012]: 'Brightness': Sending state 20.000000
[05:24:44][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:24:45][D][number:012]: 'Brightness': Sending state 20.000000
[05:24:46][D][EHMTXv2:1356]: on_empty_queue trigger
[05:24:46][I][on_empty_queue:184]: set display on!
[05:24:46][D][EHMTXv2:156]: display on
[05:24:46][I][on_empty_queue:195]: set night mode on!
[05:24:46][D][EHMTXv2:178]: night mode on
[05:24:46][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:24:46][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:24:46][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:24:46][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:24:46][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:24:54][D][sensor:094]: 'Illuminance': Sending state 0.00000 lx with 0 decimals of accuracy
[05:24:55][D][number:012]: 'Brightness': Sending state 20.000000
[05:25:01][D][EHMTXv2:1356]: on_empty_queue trigger
[05:25:01][I][on_empty_queue:184]: set display on!
[05:25:01][D][EHMTXv2:156]: display on
[05:25:01][I][on_empty_queue:195]: set night mode on!
[05:25:01][D][EHMTXv2:178]: night mode on
[05:25:01][D][EHMTXv2:2082]: clock_screen_color lifetime: 1440 screen_time: 10 red: 235 green: 0 blue: 0
[05:25:01][D][EHMTXv2:104]: queue: clock for: 10.0 sec
[05:25:01][I][EHMTXv2:2335]: set_brightness 20 => 7.84 %
[05:25:01][D][EHMTXv2:2096]: date_screen lifetime: 1440 screen_time: 5 red: 240 green: 240 blue: 240
[05:25:01][D][EHMTXv2:107]: queue: date for: 5.0 sec
[05:25:01][W][component:237]: Component display took a long time for an operation (57 ms).
[05:25:01][W][component:238]: Components should block for at most 30 ms.
trip5 commented 1 month ago

I'm just going to interject. Sorry if I can't analyze your problem more deeply (and I'm certainly on an older version of EHMTXv2 than you)...

Is it possible your Home Assistant automation triggered the blank screen instead?

I encountered hours of black screens simply because my weather service was down and the HA Yaml had no error-checking so the script never got past the step it was crashing at.

See the end of this wiki page for an example: https://github.com/lubeda/EspHoMaTriXv2/blob/2024.6.pre/wiki/weather-display.md

popy2k14 commented 1 month ago

@trip5 thx for trying to help, appreciate that. No i think not that my HA instance is ever sending clear/blank screen. Checked my scripts for that. Also in this case there is no issue with the weather sensor. My clock was in "night mode" and it's configured to not show weather in night mode. It was not home assistant which was crashing, it was maybe an bug in the clock firmware. It should just show the clock which does my "on_empty_queue" yaml.