GithubHelp home page GithubHelp logo

lubeda / esphomatrixv2 Goto Github PK

View Code? Open in Web Editor NEW
255.0 12.0 24.0 1.55 MB

A simple DIY status display with a 8x32 RGB LED matrix, implemented with esphome.io and Home Assistant.

License: MIT License

C++ 77.26% Python 22.74%
esphome esphome-component esphome-devices homeassistant

esphomatrixv2's People

Contributors

andrew-codechimp avatar bogdanr avatar dbuezas avatar firewolf1337 avatar frittes avatar geekofweek avatar hco avatar joncar avatar lubeda avatar lukasleitsch avatar n3rdix avatar tbratfisch avatar thegroundzero avatar trip5 avatar trvrnrth avatar vorlon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esphomatrixv2's Issues

service set_clock_color don't change clock color

Bug report

Describe the bug

when calling service set_clock_color from ha clock color don't change on display

Additional information

  • used Hardware:
    • ESP8266
    • EspHoMaTriXv2 version: [last main branch]

To Reproduce

fire a esphomatrix_set_clock_color with 3 values from homeassistant developer tools service

Expected behavior

a change for clock color, but only got a log entry says "[D][EHMTXv2:086]: default clock color r: 255 g: 127 b: 0
" but no color change

Configuration

substitutions:
  devicename: esphomatrix

esphome:
  name: $devicename
  friendly_name: EspHoMaTriX

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "********************************************"

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphomatrix Fallback Hotspot"

captive_portal:

external_components:
  - source:
      type: git
      url: https://github.com/lubeda/EspHoMaTriXv2
      ref: main 

time:
  - platform: homeassistant
    id: ehmtx_time

binary_sensor:
  - platform: status
    name: "$devicename Status"

button:
  - platform: restart
    name : "restart $devicename"

light:
  - platform: neopixelbus
    pin: GPIO2
    num_leds: 256
    type: GRB
    variant: WS2812
    name: "led_matrix"
    id: matrix_component
    method:
      type: esp8266_uart
      bus: 1
      async: false
    default_transition_length: 0s

font:
  - file: EHMTXv2.ttf
    id: default_font
    size: 16
    glyphs:  |
      !?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/

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

ehmtxv2:
  id: rgb8x32
  show_seconds: false
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  icons2html: true
  default_font_id: default_font
  default_font_yoffset: 6
  special_font_id: default_font
  special_font_yoffset: 7
  brightness: 80 # percent
  time_format: "%H:%M"
  date_format: "%d.%m."
  week_start_monday: true # false equals sunday
  scroll_count: 2 # scroll long text at least two times
  scroll_interval: 80 # milliseconds
  rainbow_interval: 32 # milliseconds
  frame_interval: 192 # milliseconds
  icons:
    - id: error
      lameid: 40530
    - id: home_assistant
      lameid: 47693
    - id: temperature
      lameid: 2056
    - id: lightbulb
      lameid: 1762
    - id: music
      lameid: 45625
    - id: phone
      lameid: 1232
    - id: car
      lameid: 2819
    - id: sleep8x32
      url: https://user-images.githubusercontent.com/16407309/224850723-634c9b2d-55d9-44f2-9f93-765c0485b090.gif
  on_next_screen:
    - homeassistant.event:
        event: esphome.new_screen
        data_template:
          iconname: !lambda "return icon.c_str();"
          text: !lambda "return text.c_str();"

number:
  - platform: template
    name: "$devicename LED brightness"
    min_value: 0
    max_value: 255
    step: 1
    lambda: |-
      return id(rgb8x32)->get_brightness();
    set_action:
      lambda: |-
        id(rgb8x32)->set_brightness(x);

switch:
  - platform: template
    name: "$devicename Display"
    icon: "mdi:power"
    lambda: |-
      return id(rgb8x32)->show_display;
    turn_on_action:
      lambda: |-
        id(rgb8x32)->set_display_on();
    turn_off_action:
      lambda: |-
        id(rgb8x32)->set_display_off();

Logs

[15:41:38][D][EHMTXv2:032]: queue: clock for 10 sec
[15:41:49][D][EHMTXv2:035]: queue: date for 5 sec
[15:41:54][D][EHMTXv2:086]: default clock color r: 255 g: 127 b: 0
[15:41:55][D][EHMTXv2:032]: queue: clock for 10 sec

Services calls

service: esphome.esphomatrix_set_clock_color
data:
  r: 255
  g: 127
  b: 0

Issues with HA 2023.08.1

Automation triggers an error for 'unknown service' after update to 2023.08.1

"Error executing script. Service not found for call_service at pos 1: Unable to find service esphome.ulanzi_eg_icon_screen"

Edit: Hold it, I am having general ESPHome issues since the update. Doesn't seem to be related directly to EspHoMaTriXv2

[BUG] Cann´t compile

Bug report

Describe the bug

Add a description of the bug. Detail the expected behavior in contrast with the behavior you're observing.

Additional information

  • used Hardware:
    • ESP32 or ESP8266
    • EspHoMaTriXv2 version: [e.g. 2023.7.0]
    • Ulanzi TC001

To Reproduce

Just try to compile the ulanzi-easy.yaml

Expected behavior

no error message :)

Configuration

plain unchanged ulanzi-easy.yaml

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

INFO Reading configuration /config/esphome/ulanzi-easy.yaml...
WARNING 
WARNING Please check the documentation and wiki https://github.com/lubeda/EspHoMaTriXv2
WARNING This will only work with esphome >= 2023.7.0
WARNING 
WARNING GPIO15 is a Strapping PIN and should be avoided.
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 Detected timezone 'Europe/Berlin'
INFO Detected timezone 'Europe/Berlin'
INFO Generating C++ source...
INFO Preparing icons, this may take some seconds.
INFO EsphoMaTrix: wrote html-file with icon preview: /config/esphome/ulanzi-easy.html
INFO List of icons for e.g. blueprint:

["error","home_assistant","temperature","lightbulb","music","phone","car","sleep8x32",]

INFO Compiling app...
Processing ulanzi (board: esp32dev; framework: arduino; platform: platformio/[email protected])
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 1.2.2
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 2.1.0
|-- ESPmDNS @ 2.0.0
|-- Wire @ 2.0.0
|-- ArduinoJson @ 6.18.5
|-- NeoPixelBus @ 2.7.3
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_icons.cpp.o
In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:6:10: fatal error: esphome/components/animation/animation.h: No such file or directory
 #include "esphome/components/animation/animation.h"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX.cpp.o] Error 1
In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX_icons.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:6:10: fatal error: esphome/components/animation/animation.h: No such file or directory
 #include "esphome/components/animation/animation.h"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_icons.cpp.o] Error 1
========================== [FAILED] Took 1.49 seconds ==========================```

## Services calls

```text
(optional) The YAML of your service calls

Hyphen in device name an issue?

Just dealt with an issue with a device that had a hyphen/dash in the device name.

Was not calling correct service in HA services due to conflict

[BUG] del_screen with wildcard not working

Bug report

Describe the bug

When calling the del_screen service through home assistant with a icon_name wildcard (i.e. weather_*) it doesn't actually delete any screens. When calling the same service with a fully specified icon_name, screen (i.e. weather_partlycloudy is deleted as expected.

Additional information

  • Ulanzi TC001
  • 2023.6.4
  • ESPHome 2023.5.5

To Reproduce

Configure an icon such as weather_partlycloudy. Add an icon_screen to the queue with with esphome.<DEVICENAME>_icon_screen service. Attempt to delete it via the esphome.<DEVICENAME>_del_screen service using a wildcard that should match such as weather_*.

  - service: esphome.ulanzi_icon_screen
    data:
      icon_name: weather_partlycloudy
      text: some text
      default_font: true
      lifetime: 180
      screen_time: 2
      r: 255
      g: 255
      b: 255
    enabled: true
  - service: esphome.ulanzi_del_screen
    data:
      icon_name: weather_*
      mode: 5

Expected behavior

Screen should be removed from queue.

Configuration

Full esphome.yaml
---
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 10.0.0.227
    gateway: !secret gateway
    subnet: !secret subnet
  ap:
    ssid: "$devicename Fallback Hotspot"
    password: !secret ap_password

captive_portal:
logger:
ota:
  password: !secret ota_password

substitutions:
  devicename: ulanzi
  matrix_pin: GPIO32
  buzzer_pin: GPIO15
  battery_pin: GPIO34
  ldr_pin: GPIO35
  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: "2023.6.4"
    components: [ehmtxv2]

esphome:
  comment: "EHMTXv2 from LuBeDa"
  name: $devicename
  on_boot:
    then:
      - ds1307.read_time:

switch:
  - platform: template
    name: "Auto-Adjust Brightness"
    id: switch_autobrightness
    icon: mdi:brightness-auto
    restore_mode: RESTORE_DEFAULT_ON
    lambda: |-
      if (id(aab_enable)) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      lambda: |-
        id(aab_enable) = true;
    turn_off_action:
      lambda: |-
        id(aab_enable) = false;
  - platform: template
    name: "$devicename Display"
    icon: "mdi:power"
    restore_mode: ALWAYS_ON
    lambda: |-
      return id(rgb8x32)->show_display;
    turn_on_action:
      lambda: |-
        id(rgb8x32)->set_display_on();
    turn_off_action:
      lambda: |-
        id(rgb8x32)->set_display_off();

globals:
  # aab = auto-adjustable brightness
  - id: aab_enable
    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: aab_min
    type: int
    initial_value: '20'

output:
  - platform: ledc
    pin: $buzzer_pin
    id: rtttl_out

rtttl:
  output: rtttl_out

esp32:
  board: esp32dev

font:
  - file: fonts/EHMTXv2.ttf
    size: 16
    id: default_font
    glyphs: |
      !?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/

binary_sensor:
  - platform: status
    name: "$devicename Status"
  - platform: gpio
    pin:
      number: $left_button_pin
      inverted: true
    name: "Left button"
  - platform: gpio
    pin:
      inverted: true
      number: $mid_button_pin
      mode: INPUT_PULLUP
    name: "Middle button"
  - platform: gpio
    pin:
      number: $right_button_pin
      inverted: true
    name: "Right button"

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

api:
  encryption:
    key: !secret encryption_key
  services:
    - service: tune
      variables:
        tune: string
      then:
        - rtttl.play:
            rtttl: !lambda 'return tune;'

sensor:
  - platform: sht3xd
    temperature:
      name: "$devicename Temperature"
    humidity:
      name: "$devicename Relative Humidity"
    update_interval: 60s
  - platform: adc
    pin: $battery_pin
    name: "$devicename Battery"
    id: battery_voltage
    update_interval: 10s
    device_class: battery
    accuracy_decimals: 0
    attenuation: auto
    filters:
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15
          send_first_at: 1
      - multiply: 1.6
      - lambda: |-
          auto r = ((x - 3) / 0.69 * 100.00);
          if (r >= 100) return 100;
          if (r > 0) return r;
          if (r <= 0) return 1;
          return 0;
    unit_of_measurement: '%'
  - platform: adc
    id: light_sensor
    name: "$devicename Illuminance"
    pin: $ldr_pin
    update_interval: 10s
    attenuation: auto
    unit_of_measurement: lx
    device_class: illuminance
    accuracy_decimals: 0
    filters:
      - lambda: |-
          return (x / 10000.0) * 2000000.0 - 15 ;
    on_value:
      then:
        - lambda: |-
            if ( id(aab_enable) ) {
              int n = x / 4 + id(aab_add); // new_value
              if (n > id(aab_max)) n = id(aab_max);
              if (n < id(aab_min)) n = id(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);
            }

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: "$devicename Light"
    restore_mode: ALWAYS_OFF

time:
  - platform: homeassistant
    timezone: !secret timezone
    on_time_sync:
      then:
        ds1307.write_time:
  - platform: ds1307
    timezone: !secret timezone
    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: 
    update_interval: 16ms
    auto_clear_enabled: true
    lambda: |-
      id(rgb8x32)->tick();
      id(rgb8x32)->draw();

ehmtxv2:
  id: rgb8x32
  icons2html: true
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  time_format: "%I:%M"
  date_format: "%m.%d"
  show_seconds: false
  default_font_id: default_font
  special_font_id: default_font
  icons:
    - id: home_assistant
      file: icons/47693_home_assistant.gif
    - id: error
      file: icons/40530_error.gif
    - id: temperature
      file: icons/2056_temp.png

    # https://developers.home-assistant.io/docs/core/entity/weather/#recommended-values-for-state-and-condition
    - id: weather_cloudy
      file: icons/52159_cloudy.png
    - id: weather_partlycloudy
      file: icons/52173_partly_cloudy.png
    - id: weather_fog
      file: icons/52167_fog.png
    - id: weather_sunny
      file: icons/52156_sunny.png
    - id: weather_rainy
      file: icons/52160_rainy.png
    - id: weather_snowy
      file: icons/52168_snowy.png
    - id: weather_hail
      file: icons/52158_hail.png
    - id: weather_clear_night
      file: icons/52163_clear_night.png
    - id: weather_pouring
      file: icons/52161_pouring.png
    - id: weather_snowy_rainy
      file: icons/52166_snowy_rainy.png
    - id: weather_windy
      file: icons/52169_windy.png
    - id: weather_windy_variant
      file: icons/52169_windy.png
    - id: weather_lightning
      file: icons/52170_lightning.png
    - id: weather_lightning_rainy
      file: icons/52171_lightning_rainy.png
    - id: weather_exceptional
      file: icons/52172_weather_warning.png
  on_next_screen:
    - homeassistant.event:
        event: esphome.new_screen
        data_template:
          iconname: !lambda "return icon.c_str();"
          text: !lambda "return text.c_str();"
Full Home Assistant Automation yaml
alias: Ulanzi Weather
description: Ulanzi clock weather
trigger:
  - platform: state
    entity_id:
      - sensor.openweathermap_condition
  - platform: state
    entity_id:
      - sensor.openweathermap_temperature
condition: []
action:
  - service: esphome.ulanzi_del_screen
    data:
      icon_name: weather_*
      mode: 5
  - service: esphome.ulanzi_icon_screen
    data:
      icon_name: >-
        weather_{{ states('sensor.openweathermap_condition') | replace('-',
        '_')}}
      text: >-
        {{ states('sensor.openweathermap_temperature', rounded=True,
        with_unit=True) }}
      default_font: true
      lifetime: 180
      screen_time: 2
      r: 255
      g: 255
      b: 255
    enabled: true
mode: single

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

Esphome Logs
INFO ESPHome 2023.5.5
INFO Reading configuration ulanzi.yaml...
WARNING 
WARNING Please check the documentation and wiki https://github.com/lubeda/EspHoMaTriXv2
WARNING 
WARNING GPIO15 is a Strapping PIN and should be avoided.
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 10.0.0.227 using esphome API
INFO Successfully connected to 10.0.0.227
[02:44:45][I][app:102]: ESPHome version 2023.5.5 compiled on Jun 14 2023, 02:36:05
[02:44:45][C][wifi:505]: WiFi:
[02:44:45][C][wifi:363]:   Local MAC: XX
[02:44:45][C][wifi:364]:   SSID: 'iot'
[02:44:45][C][wifi:365]:   IP Address: 10.0.0.227
[02:44:45][C][wifi:367]:   BSSID: XXX
[02:44:45][C][wifi:368]:   Hostname: 'ulanzi'
[02:44:45][C][wifi:370]:   Signal strength: -65 dB ▂▄▆█
[02:44:45][C][wifi:374]:   Channel: 11
[02:44:45][C][wifi:375]:   Subnet: 255.255.255.0
[02:44:45][C][wifi:376]:   Gateway: 10.0.0.1
[02:44:45][C][wifi:377]:   DNS1: 0.0.0.0
[02:44:45][C][wifi:378]:   DNS2: 0.0.0.0
[02:44:45][C][logger:301]: Logger:
[02:44:45][C][logger:302]:   Level: DEBUG
[02:44:45][C][logger:303]:   Log Baud Rate: 115200
[02:44:45][C][logger:305]:   Hardware UART: UART0
[02:44:45][C][i2c.arduino:053]: I2C Bus:
[02:44:45][C][i2c.arduino:054]:   SDA Pin: GPIO21
[02:44:45][C][i2c.arduino:055]:   SCL Pin: GPIO22
[02:44:45][C][i2c.arduino:056]:   Frequency: 50000 Hz
[02:44:45][C][i2c.arduino:059]:   Recovery: bus successfully recovered
[02:44:45][I][i2c.arduino:069]: Results from i2c bus scan:
[02:44:45][I][i2c.arduino:075]: Found i2c device at address 0x44
[02:44:45][I][i2c.arduino:075]: Found i2c device at address 0x68
[02:44:45][C][template.switch:068]: Template Switch 'Auto-Adjust Brightness'
[02:44:45][C][template.switch:070]:   Icon: 'mdi:brightness-auto'
[02:44:45][C][template.switch:091]:   Restore Mode: restore defaults to ON
[02:44:45][C][template.switch:060]:   Restore State: NO
[02:44:45][C][template.switch:061]:   Optimistic: NO
[02:44:45][C][template.switch:068]: Template Switch 'ulanzi Display'
[02:44:45][C][template.switch:070]:   Icon: 'mdi:power'
[02:44:45][C][template.switch:091]:   Restore Mode: always ON
[02:44:45][C][template.switch:060]:   Restore State: NO
[02:44:45][C][template.switch:061]:   Optimistic: NO
[02:44:45][C][ledc.output:160]: LEDC Output:
[02:44:45][C][ledc.output:161]:   Pin GPIO15
[02:44:45][C][ledc.output:162]:   LEDC Channel: 0
[02:44:45][C][ledc.output:163]:   PWM Frequency: 1000.0 Hz
[02:44:45][C][ledc.output:164]:   Bit depth: 16
[02:44:45][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Left button'
[02:44:45][C][gpio.binary_sensor:016]:   Pin: GPIO26
[02:44:45][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Middle button'
[02:44:45][C][gpio.binary_sensor:016]:   Pin: GPIO27
[02:44:45][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Right button'
[02:44:45][C][gpio.binary_sensor:016]:   Pin: GPIO14
[02:44:45][C][template.number:050]: Template Number 'ulanzi Brightness'
[02:44:45][C][template.number:051]:   Optimistic: NO
[02:44:45][C][template.number:052]:   Update Interval: 60.0s
[02:44:46][C][light:103]: Light 'ulanzi Light'
[02:44:46][C][light:105]:   Default Transition Length: 1.0s
[02:44:46][C][light:106]:   Gamma Correct: 2.00
[02:44:46][C][rtttl:018]: Rtttl
[02:44:46][C][status:034]: Status Binary Sensor 'ulanzi Status'
[02:44:46][C][status:034]:   Device Class: 'connectivity'
[02:44:46][C][sht3xd:029]: SHT3xD:
[02:44:46][C][sht3xd:030]:   Address: 0x44
[02:44:46][C][sht3xd:034]:   Update Interval: 60.0s
[02:44:46][C][sht3xd:036]:   Temperature 'ulanzi Temperature'
[02:44:46][C][sht3xd:036]:     Device Class: 'temperature'
[02:44:46][C][sht3xd:036]:     State Class: 'measurement'
[02:44:46][C][sht3xd:036]:     Unit of Measurement: '°C'
[02:44:46][C][sht3xd:036]:     Accuracy Decimals: 1
[02:44:46][C][sht3xd:037]:   Humidity 'ulanzi Relative Humidity'
[02:44:46][C][sht3xd:037]:     Device Class: 'humidity'
[02:44:46][C][sht3xd:037]:     State Class: 'measurement'
[02:44:46][C][sht3xd:037]:     Unit of Measurement: '%'
[02:44:46][C][sht3xd:037]:     Accuracy Decimals: 1
[02:44:46][C][adc:087]: ADC Sensor 'ulanzi Battery'
[02:44:46][C][adc:087]:   Device Class: 'battery'
[02:44:46][C][adc:087]:   State Class: 'measurement'
[02:44:46][C][adc:087]:   Unit of Measurement: '%'
[02:44:46][C][adc:087]:   Accuracy Decimals: 0
[02:44:46][C][adc:097]:   Pin: GPIO34
[02:44:46][C][adc:099]:  Attenuation: auto
[02:44:46][C][adc:126]:   Update Interval: 10.0s
[02:44:46][C][adc:087]: ADC Sensor 'ulanzi Illuminance'
[02:44:46][C][adc:087]:   Device Class: 'illuminance'
[02:44:46][C][adc:087]:   State Class: 'measurement'
[02:44:46][C][adc:087]:   Unit of Measurement: 'lx'
[02:44:46][C][adc:087]:   Accuracy Decimals: 0
[02:44:46][C][adc:097]:   Pin: GPIO35
[02:44:46][C][adc:099]:  Attenuation: auto
[02:44:46][C][adc:126]:   Update Interval: 10.0s
[02:44:46][C][ds1307:022]: DS1307:
[02:44:46][C][ds1307:023]:   Address: 0x68
[02:44:46][C][ds1307:027]:   Timezone: 'CST6CDT,M3.2.0,M11.1.0'
[02:44:46][C][homeassistant.time:010]: Home Assistant Time:
[02:44:46][C][homeassistant.time:011]:   Timezone: 'CST6CDT,M3.2.0,M11.1.0'
[02:44:46][C][captive_portal:088]: Captive Portal:
[02:44:46][C][mdns:108]: mDNS:
[02:44:46][C][mdns:109]:   Hostname: ulanzi
[02:44:46][C][ota:093]: Over-The-Air Updates:
[02:44:46][C][ota:094]:   Address: 10.0.0.227:3232
[02:44:46][C][ota:097]:   Using Password.
[02:44:46][C][api:138]: API Server:
[02:44:46][C][api:139]:   Address: 10.0.0.227:6053
[02:44:46][C][api:141]:   Using noise encryption: YES
[02:44:46][C][EHMTXv2:953]: EspHoMatriXv2 version: 2023.6.4
[02:44:46][C][EHMTXv2:954]: Icons: 18 of 90
[02:44:46][C][EHMTXv2:955]: Clock interval: 0 s
[02:44:46][C][EHMTXv2:956]: Date format: %m.%d
[02:44:46][C][EHMTXv2:957]: Time format: %I:%M
[02:44:46][C][EHMTXv2:958]: Interval (ms) scroll: 80
[02:44:46][C][EHMTXv2:961]: show day of week
[02:44:46][C][EHMTXv2:965]: show date
[02:44:46][C][EHMTXv2:972]: weekstart: monday
[02:44:54][D][EHMTXv2:033]: queue: date for: 5 sec
[02:44:55][D][sensor:094]: 'ulanzi Illuminance': Sending state 231.68910 lx with 0 decimals of accuracy
[02:45:00][D][EHMTXv2:030]: queue: clock for: 10 sec
[02:45:05][D][sensor:094]: 'ulanzi Illuminance': Sending state 231.90056 lx with 0 decimals of accuracy
[02:45:11][D][EHMTXv2:033]: queue: date for: 5 sec
[02:45:14][D][number:012]: 'ulanzi Brightness': Sending state 67.000000
[02:45:15][D][sensor:094]: 'ulanzi Illuminance': Sending state 231.72728 lx with 0 decimals of accuracy
[02:45:15][D][sht3xd:060]: Got temperature=29.88°C humidity=33.18%
[02:45:15][D][sensor:094]: 'ulanzi Temperature': Sending state 29.88136 °C with 1 decimals of accuracy
[02:45:15][D][sensor:094]: 'ulanzi Relative Humidity': Sending state 33.17922 % with 1 decimals of accuracy
[02:45:17][D][EHMTXv2:030]: queue: clock for: 10 sec
[02:45:19][D][EHMTXv2:206]: icon: weather_partlycloudy found id: 4
[02:45:19][D][EHMTXv2:851]: free_screen: found by endtime 0
[02:45:19][D][EHMTXv2:378]: calc_scroll_time: mode: 5 text: "some text" pixels 32 calculated: 10 defined: 2 max_steps: 56
[02:45:19][D][EHMTXv2:672]: icon screen icon: 4 iconname: weather_partlycloudy text: some text lifetime: 180 screen_time: 2
[02:45:19][D][EHMTXv2:039]: queue: icon screen: "weather_partlycloudy" text: some text for: 10 sec
[02:45:25][D][sensor:094]: 'ulanzi Illuminance': Sending state 231.98325 lx with 0 decimals of accuracy
[02:45:28][D][EHMTXv2:039]: queue: icon screen: "weather_partlycloudy" text: some text for: 10 sec
[02:45:35][D][sensor:094]: 'ulanzi Illuminance': Sending state 232.50621 lx with 0 decimals of accuracy
[02:45:39][D][EHMTXv2:033]: queue: date for: 5 sec
[02:45:40][W][EHMTXv2:623]: del_screen: icon weather_* in position: 0 mode 5
[02:45:45][D][sensor:094]: 'ulanzi Illuminance': Sending state 231.39478 lx with 0 decimals of accuracy
[02:45:45][D][EHMTXv2:030]: queue: clock for: 10 sec
[02:45:55][D][sensor:094]: 'ulanzi Illuminance': Sending state 234.53830 lx with 0 decimals of accuracy
[02:45:56][D][EHMTXv2:039]: queue: icon screen: "weather_partlycloudy" text: some text for: 10 sec
[02:46:05][D][sensor:094]: 'ulanzi Illuminance': Sending state 232.25241 lx with 0 decimals of accuracy
[02:46:07][D][EHMTXv2:033]: queue: date for: 5 sec
[02:46:08][W][EHMTXv2:623]: del_screen: icon weather_partlycloudy in position: 0 mode 5
[02:46:08][W][EHMTXv2:633]: del_screen: force
[02:46:13][D][EHMTXv2:030]: queue: clock for: 10 sec
[02:46:14][D][number:012]: 'ulanzi Brightness': Sending state 67.000000
[02:46:15][D][sensor:094]: 'ulanzi Illuminance': Sending state 232.16005 lx with 0 decimals of accuracy
[02:46:15][D][sht3xd:060]: Got temperature=29.94°C humidity=33.07%
[02:46:15][D][sensor:094]: 'ulanzi Temperature': Sending state 29.93744 °C with 1 decimals of accuracy
[02:46:15][D][sensor:094]: 'ulanzi Relative Humidity': Sending state 33.06630 % with 1 decimals of accuracy
[02:46:24][D][EHMTXv2:033]: queue: date for: 5 sec
[02:46:25][D][sensor:094]: 'ulanzi Illuminance': Sending state 231.83841 lx with 0 decimals of accuracy

Services calls

These correspond to the logs above:

- service: esphome.ulanzi_icon_screen
  data:
    icon_name: weather_partlycloudy
    text: some text
    default_font: true
    lifetime: 180
    screen_time: 2
    r: 255
    g: 255
    b: 255

# observe "weather_partlycloudy" screen has been added

- service: esphome.ulanzi_del_screen
  data:
    icon_name: weather_*
    mode: 5 

# observe "weather_partlycloudy" screen has not been deleted

- service: esphome.ulanzi_del_screen
  data:
    icon_name: weather_partlycloudy
    mode: 5

# observe "weather_partlycloudy" screen has finally been deleted

rainbow_icon_screen service shows wrong icon

I'm calling the service as follows and it is showing the first icon that I have configured (ha) and not the calendar one:

service: esphome.pixel_clock_rainbow_icon_screen
data:
  default_font: false
  icon_name: calendar
  text: test
  lifetime: 1
  screen_time: 1

However icon_screen service works correctly:

service: esphome.pixel_clock_icon_screen
data:
  default_font: false
  icon_name: calendar
  text: test
  lifetime: 1
  screen_time: 1
  r: 200
  g: 200
  b: 200

My icons:

  icons:
    - id: ha
      lameid: 7956
    - id: tempc
      lameid: 2422
    - id: plug
      lameid: 403
    - id: humidity
      lameid: 51764
    - id: co2
      lameid: 30662
    - id: calendar
      lameid: 12345

Show date

Please return back the function that support not showing the date card as defualt (show_date: false).

[FEATURE REQUEST] Add alert_screen to display instant messages

Feature Request

Describe the solution / feature you'd like

Add alert_screen to display instant messages:
alert_screen or info_screen with parameters ("icon_name", "text", "screen_time", "default_font", "r", "g", "b")

screen_time - how long is this screen display in the loop (seconds), also lifetime is set automatically to screen_time. And immediately force_screen is called for this screen.
Each next call to alert_screen or info_screen replaces the previous one (while the previous one lives on), and sets the new passed values for screen_time and lifetime.
This will be convenient for displaying instant messages, especially if they need to be displayed once, say within 15sec, and will replace the inconvenient co in the form:

  • del_screen
  • icon_screen (You can't set the lifetime less than a minute, so you'll have to wait and delete it, if you want to show a message, like 15 seconds)
  • force_screen
  • delay
  • del_screen

Describe alternatives you've considered

  • del_screen
  • icon_screen (You can't set the lifetime less than a minute, so you'll have to wait and delete it, if you want to show a message, like 15 seconds)
  • force_screen
  • delay
  • del_screen

[BUG] The on_empty_queue event did not work

Bug report

Describe the bug

Yesterday started preparatory work to modify the source code to create Pull Request, flashed for the correct config 2023.9, specified as in the documentation:

  on_empty_queue:
    then:
      lambda: |-
        id(rgb8x32)->clock_screen(10,10);
        id(rgb8x32)->date_screen(10,5);

  on_start_running:
     then:
       lambda: |-
          id(rgb8x32)->clock_screen(10,10);
          id(rgb8x32)->date_screen(10,5);

Also from HA, the weather is constantly displayed on the screen. I.e. constant 3 screens, clock, date, weather (updated often because it is tied not only to the weather, but also to the temperature).
But this morning, there was only weather on the screen, no clock or date. It seems that the on_empty_queue event did not happen.

Additional information

  • used Hardware:
    • ESP32
    • EspHoMaTriXv2 version: 2023.9.0

[BUG] infinite reboot

Bug report

Describe the bug

Altleast since the introduction of bitmap_screen there are some unwanted reboots. Especially on a planed reboot the display stays in a boot loop.

There is no clear cause visible. Possible this is related to the network interface.

Additional information

  • used Hardware:
    • ESP32 or ESP8266
    • EspHoMaTriXv2 version: [e.g. 2023.5.0]

To Reproduce

Steps to reproduce the behavior:

Expected behavior

A clear and concise description of what you expected to happen.

Configuration

(optional) The YAML you used in epshome without any password

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

(optional) Add relevant logs which could help tackle the problem.

Services calls

(optional) The YAML of your service calls

[BUG] YAML-Files not loaded in Blueprint

The EHMTX_easy*.yaml are not loaded as Blueprints. All generate the same error.

Failed to load blueprint: mapping values are not allowed here in "/config/blueprints/automation/ehmtxv2/EHMTX_easy_color_gauge.yaml", line 198, column 74

In Home Assistant, the File Editor states:
"end of the stream or a document separator is expected (198:74)"

YAML files uploaded in /config/blueprints/automation/ehmtxv2/

Home Assistant 2023.7.1
Supervisor 2023.07.1
Operating System 10.3

To Reproduce

Upload YAML-files in folder and restart Home Assistant

Thanks!

[BUG] Time Jump in %H:%M:%S format

Bug report

Describe the bug

If I output the time in %H:%M:%S format, when 1 occurs in seconds, it jumps constantly, this was not the case on the original firmware Ulanzi TC001.
How can this be solved? Changing the font? Or an additional parameter in the settings?

Additional information

  • used Hardware:
    • ESP32
    • EspHoMaTriXv2 version: 2.0.0
    • Ulanzi TC001

To Reproduce

Steps to reproduce the behavior:

Output the time in %H:%M:%S format with the font MatrixClock-Chunky6.bdf.

Expected behavior

So that when outputting in %H:%M:%S format, the starting position is the same and does not change during output. The font is monospaced, so stable output is expected.

Configuration

font:
  - file: fonts/MatrixClock-Chunky8.bdf
    id: default_font
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz°
  - file: fonts/MatrixClock-Chunky6.bdf
    id: special_font
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:APMTapmt

ehmtxv2:
  id: rgb8x32
  icons2html: true
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  time_format: "%H:%M:%S"
  date_format: "%d/%m"
  default_clock_font: false
  show_seconds: false
  default_font_id: default_font
  default_font_yoffset: 8
  special_font_id: special_font
  special_font_yoffset: 7

[BUG] Example code font too big, text chopped off

Bug report

Describe the bug

The top of the time and date is chopped off on the Ulanzi TC001.
Either the font is too big or the font size is set too big in the example yaml. Or there's an error in the pixel mapper.

Additional information

  • used Hardware:
    • Ulanzi TC001
    • EspHoMaTriXv2 version 2023.7.0

To Reproduce

Steps to reproduce the behavior:

  • Copy example code and flash it to the Ulanzi TC001 pixel clock

Expected behavior

All text should be readable

Configuration

# ...
font:
  - file: fonts/mateine.ttf
    size: 16
    id: default_font
    glyphs:  |
      !?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/
# ...

Screenshots

image
image

[FEATURE REQUEST] Add a graph display screen

Feature Request

Describe the solution / feature you'd like

Add a graph display screen, in the configuration we specify the graph, pass the graph ID to the EspHoMaTriXv2 component, and when needed, the user will call the graph screen display service, indicating its lifecycle and indicating the rebound time, perhaps another color.
The graph will be displayed on the screen from time to time.

Additional context

graph:
  - id: single_temperature_graph
    sensor: temp_outside
    duration: 64h
    border: false
    width: 32
    height: 8
    line_thickness: 1
ehmtxv2:
  id: rgb8x32
  graph_component: single_temperature_graph
  ...

API:

show_graph => => {"lifetime", "screen_time"}
show_graph_color => => {"lifetime", "screen_time", "rgb"}

Service

void show_graph (int =D_LIFETIME, int screen_time=D_SCREEN_TIME);
void show_graph_color (int =D_LIFETIME, int screen_time=D_SCREEN_TIME, RGB);

image

Installation with ESPHome 2023.8.2 and default fonts from ulanzi-easy.xaml not possible

Bug report

Describe the bug

When I try to install the config from the current ulanzi-easy.yaml file with ESPHome 2023.8.2, the installations aborts with the following error message when trying to convert the MatrixClock-Light8.bdf and MatrixClock-Chunky6.bdf fonts to Pillow format

INFO Generating C++ source...
Traceback (most recent call last):
  File "/usr/local/bin/esphome", line 33, in <module>
    sys.exit(load_entry_point('esphome', 'console_scripts', 'esphome')())
  File "/esphome/esphome/__main__.py", line 1023, in main
    return run_esphome(sys.argv)
  File "/esphome/esphome/__main__.py", line 1010, in run_esphome
    rc = POST_CONFIG_ACTIONS[args.command](args, config)
  File "/esphome/esphome/__main__.py", line 441, in command_run
    exit_code = write_cpp(config)
  File "/esphome/esphome/__main__.py", line 185, in write_cpp
    generate_cpp_contents(config)
  File "/esphome/esphome/__main__.py", line 197, in generate_cpp_contents
    CORE.flush_tasks()
  File "/esphome/esphome/core/__init__.py", line 626, in flush_tasks
    self.event_loop.flush_tasks()
  File "/esphome/esphome/coroutine.py", line 246, in flush_tasks
    next(task.iterator)
  File "/esphome/esphome/__main__.py", line 177, in wrapped
    await coro(conf)
  File "/esphome/esphome/components/font/__init__.py", line 360, in to_code
    font = load_bitmap_font(CORE.relative_config_path(conf[CONF_PATH]))
  File "/esphome/esphome/components/font/__init__.py", line 334, in load_bitmap_font
    pil_font_path = convert_bitmap_to_pillow_font(filepath)
  File "/esphome/esphome/components/font/__init__.py", line 327, in convert_bitmap_to_pillow_font
    return cv.file_(local_pil_font_file)
  File "/esphome/esphome/config_validation.py", line 1397, in file_
    raise Invalid(
voluptuous.error.Invalid: Could not find file 'config/config/.esphome/font/31010cf8/MatrixClock-Light8.pil'. Please make sure it exists (full path: /config/config/config/.esphome/font/31010cf8/MatrixClock-Light8.pil).

Additional information

  • used Hardware:
    • Ulanz LED Clock

To Reproduce

Steps to reproduce the behavior:
Try to install current ulanzi-easy.yaml Config with ESPHome 2023.8.2

Expected behavior

ESPHome sould install without any error

Configuration

# https://github.com/lubeda/EspHoMaTriXv2
substitutions:
  devicename: "ulanzi-led-matrix"
  friendly_name: "Ulanzi LED Matrix"
  # Pin definition from https://github.com/aptonline/PixelIt_Ulanzi 
  battery_pin: GPIO34 
  buzzer_pin: GPIO15 
  ldr_pin: GPIO35 
  matrix_pin: GPIO32 
  left_button_pin: GPIO26 
  mid_button_pin: GPIO27 
  right_button_pin: GPIO14 
  scl_pin: GPIO22 
  sda_pin: GPIO21 

esphome:
  name: ${devicename}
  platform: ESP32
  board: esp32dev
  comment: "Ulanzi LED Matrix"
  project:
    name: "Ulanzi.EHMTXv2"
    version: "2.0.0"
  on_boot:
    then:
      - ds1307.read_time:
      
logger:
  level: WARN

api:
  encryption:
    key: !secret api_key
  reboot_timeout: 8hours
  services:
    - service: tune
      variables:
        tune: string
      then:
        - rtttl.play:
            rtttl: !lambda 'return tune;'

ota:
  password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  reboot_timeout: 8hours
  ap:
    ssid: "${devicename}"
    password: !secret fallback_password
  manual_ip:
    static_ip: 192.168.178.209
    gateway: 192.168.178.1
    subnet: 255.255.255.0
  use_address: 192.168.178.209

web_server:
  port: 80
  auth:
    username: admin
    password: !secret web_server_password

time:
  - platform: homeassistant
    timezone: "Europe/Berlin"
    id: homeassistant_time
    on_time_sync:
      then:
        ds1307.write_time:
  - platform: ds1307
    update_interval: never
    id: ehmtx_time

captive_portal:

output:
  - platform: ledc
    pin: $buzzer_pin
    id: rtttl_out

rtttl:
  output: rtttl_out

switch:
  - platform: template
    name: "Auto-Adjust Brightness"
    id: switch_autobrightness
    icon: mdi:brightness-auto
    restore_mode: RESTORE_DEFAULT_ON
    lambda: |-
      if (id(aab_enable)) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      lambda: |-
        id(aab_enable) = true;
    turn_off_action:
      lambda: |-
        id(aab_enable) = false;

globals:
  # aab = auto-adjustable brightness
  - id: aab_enable
    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: aab_min
    type: int
    initial_value: '20'

external_components:
  - source:
      type: git
      url: https://github.com/lubeda/EspHoMaTriXv2
      ref: main
    refresh: 60s 
    components: [ ehmtxv2 ]  

font:
  # Matrix Clock Fonts
  # Grab these from https://github.com/trip5/MatrixClockFonts
  # See https://github.com/lubeda/EspHoMaTriXv2#font
  # Store in a "fonts" subfolder of your ESPHome config folder or change paths below
  - file: fonts/MatrixClock-Light8.bdf
    id: default_font
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz°
  - file: fonts/MatrixClock-Chunky6.bdf
    id: special_font
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:APMTapmt

#animation:
#  - id: animation_black
#    file: "1pixel.gif"

#image:
#  - id: image_black
#    file: "1pixel.gif"
  
binary_sensor:
  - platform: status
    name: "$devicename Status"
  - platform: gpio
    pin:
      number: $left_button_pin
      inverted: true
    name: "Left button"
  - platform: gpio
    pin: 
      inverted: true
      number: $mid_button_pin
      mode: INPUT_PULLUP
    name: "Middle button"
  - platform: gpio
    pin: 
      number: $right_button_pin
      inverted: true
    name: "Right button"

sensor:
  - platform: wifi_signal
    name: "${devicename} WiFi Signal"
    device_class: signal_strength
    update_interval: 60s
  - platform: uptime
    name: "${devicename} Uptime"
    device_class: duration

  - platform: sht3xd
    temperature:
      name: "${devicename} Temperature"
      filters:
        - offset: -10.0
    humidity:
      name: "$devicename Relative Humidity"
    update_interval: 60s

  - platform: adc
    pin: $battery_pin
    name: "$devicename Battery"
    id: battery_voltage
    update_interval: 10s
    device_class: battery
    accuracy_decimals: 0
    attenuation: auto
    filters:
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15
          send_first_at: 1
      - multiply: 1.6
      - lambda: |-
          auto r = ((x - 3) / 0.69 * 100.00);
          if (r >= 100) return 100;
          if (r > 0) return r;
          if (r <= 0) return 1;
          return 0;
    unit_of_measurement: '%'
  - platform: adc
    id: light_sensor
    name: "$devicename Illuminance"
    pin: $ldr_pin
    update_interval: 10s
    attenuation: auto
    unit_of_measurement: lx
    device_class: illuminance
    accuracy_decimals: 0
    filters:
      - lambda: |-
          return (x / 10000.0) * 2000000.0 - 15 ;
    on_value:
      then:
        - lambda: |-
            if ( id(aab_enable) ) {
              int n = x / 4 + id(aab_add); // new_value
              if (n > id(aab_max)) n = id(aab_max);
              if (n < id(aab_min)) n = id(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);
            }

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: "$devicename Light"
    restore_mode: ALWAYS_OFF

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: 
    update_interval: 16ms
    auto_clear_enabled: true
    lambda: |-
      id(rgb8x32)->tick();
      id(rgb8x32)->draw();
      
ehmtxv2:
  id: rgb8x32
  icons2html: true
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  time_format: "%H:%M"
  date_format: "%d.%m."
  show_seconds: false
  show_dow: false
  # Uncomment below if using the mateine font
  # default_font_id: default_font
  # special_font_id: default_font
  # 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
  boot_logo: "[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,63519,63519,63519,63519,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,63519,0,0,0,0,2016,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,63488,0,63488,0,0,0,63519,0,0,0,0,2016,2016,0,0,0,65514,0,65514,0,0,0,31,0,0,0,64512,0,0,64512,0,63488,63488,0,63488,63488,0,0,63519,63519,63519,0,0,2016,0,2016,0,65514,0,65514,0,65514,0,31,31,31,0,0,0,64512,64512,0,0,63488,63488,63488,63488,63488,0,0,63519,0,0,0,0,2016,0,2016,0,65514,0,65514,0,65514,0,0,31,0,0,0,0,64512,64512,0,0,0,63488,63488,63488,0,0,0,63519,63519,63519,63519,0,2016,0,2016,0,65514,0,65514,0,65514,0,0,0,31,31,0,64512,0,0,64512,0,0,0,63488,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]"
  icons: 
    - id: error
      lameid: 40530
    - id: home_assistant
      lameid: 47693
    - id: temperature
      lameid: 2355
    - id: lightbulb
      lameid: 1762
    - id: music
      lameid: 45625
    - id: phone
      lameid: 1232
    - id: car
      lameid: 2819
    - id: weather_clear_night
      lameid: 52163
    - id: weather_cloudy
      lameid: 25991
    - id: weather_fog
      lameid: 52167
    - id: weather_sunny
      lameid: 52156
    - id: sleep8x32
      url: https://user-images.githubusercontent.com/16407309/224850723-634c9b2d-55d9-44f2-9f93-765c0485b090.gif 
  on_next_screen:
    - homeassistant.event:
        event: esphome.new_screen
        data_template:
          iconname: !lambda "return icon.c_str();"
          text: !lambda "return text.c_str();"

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "${devicename} IP Address"
    ssid:
      name: "${devicename} SSID"
    bssid:
      name: "${devicename} BSSID"
    mac_address:
      name: "${devicename} Mac Address"

Cannot install [BUG]

Bug report

Describe the bug

Attempted to install on new Ulanzi clock today.

Additional information

Ulanzi TC001

To Reproduce

Followed documentation attempting to install ulanzi-easy.yaml onto TC001.

Expected behavior

A clear and concise description of what you expected to happen. Could not get it to compile with following error.

Compiling /data/ulanzi/.pioenvs/ulanzi/src/main.cpp.o
/config/esphome/ulanzi-easy.yaml: In lambda function:
/config/esphome/ulanzi-easy.yaml:256:14: error: 'x' was not declared in this scope
iconname: !lambda "return x.c_str();"
^
/config/esphome/ulanzi-easy.yaml: In lambda function:
/config/esphome/ulanzi-easy.yaml:257:14: error: 'y' was not declared in this scope
text: !lambda "return y.c_str();"
logs_ulanzi-easy_compile.txt

          ^

/config/esphome/ulanzi-easy.yaml:257:14: note: suggested alternative: 'yn'
text: !lambda "return y.c_str();"

Log file attached

[QUESTION] What are the required dependencies and versions of those dependencies

Question

Hey fist of all thank you very much for this project!

Could you add some documentation on what versions are required for this to run?

I have the feeling that I'm running with the wrong version of one of the dependencies.

Additional information

  • used Hardware:
    • ESP8266

    • EspHoMaTriXv2 version: main / develop (both versions have this problem)

    • esphome(dev)

Logs

 Reading configuration /config/esphome/led-display.yaml...
WARNING 
WARNING This is a beta version of https://github.com/lubeda/EspHoMaTriXv2
WARNING 
INFO Detected timezone 'Europe/Amsterdam'
INFO Generating C++ source...
INFO Preparing icons, this may take some seconds.
INFO EsphoMaTrix: wrote html-file with icon preview: /config/esphome/led-display.html
INFO List of icons for e.g. blueprint:

["xani","xsta","pipo","d180","d080","fullscreen","samplegif",]

INFO Compiling app...
Processing led-display (board: d1_mini; framework: arduino; platform: platformio/[email protected])
--------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
Dependency Graph
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS @ 1.2
|-- NeoPixelBus @ 2.7.3
Compiling /data/led-display/.pioenvs/led-display/src/esphome/components/ehmtxv2/EHMTX.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/component.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/component_iterator.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/controller.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/entity_base.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/helpers.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/log.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/scheduler.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/string_ref.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/esphome/core/util.cpp.o
Compiling /data/led-display/.pioenvs/led-display/src/main.cpp.o
Generating LD script /data/led-display/.pioenvs/led-display/ld/local.eagle.app.v6.common.ld
Compiling /data/led-display/.pioenvs/led-display/lib67b/ESP8266WiFi/BearSSLHelpers.cpp.o
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::bitmap_screen(std::string, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:109:29: error: 'JSON_ARRAY_SIZE' was not declared in this scope; did you mean 'LWIP_ARRAYSIZE'?
  109 |     const size_t CAPACITY = JSON_ARRAY_SIZE(256);
      |                             ^~~~~~~~~~~~~~~
      |                             LWIP_ARRAYSIZE
src/esphome/components/ehmtxv2/EHMTX.cpp:110:5: error: 'StaticJsonDocument' was not declared in this scope
  110 |     StaticJsonDocument<CAPACITY> doc;
      |     ^~~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:110:34: error: 'doc' was not declared in this scope
  110 |     StaticJsonDocument<CAPACITY> doc;
      |                                  ^~~
src/esphome/components/ehmtxv2/EHMTX.cpp:111:5: error: 'deserializeJson' was not declared in this scope
  111 |     deserializeJson(doc, text);
      |     ^~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:112:5: error: 'JsonArray' was not declared in this scope
  112 |     JsonArray array = doc.as<JsonArray>();
      |     ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:115:10: error: 'JsonVariant' was not declared in this scope
  115 |     for (JsonVariant v : array)
      |          ^~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:129:22: error: expected ')' before ';' token
  129 |     screen->text = "";
      |                      ^
      |                      )
src/esphome/components/ehmtxv2/EHMTX.cpp:115:9: note: to match this '('
  115 |     for (JsonVariant v : array)
      |         ^
src/esphome/components/ehmtxv2/EHMTX.cpp:130:5: error: 'screen' was not declared in this scope; did you mean 'strlen'?
  130 |     screen->endtime = this->clock->now().timestamp + lifetime * 60;
      |     ^~~~~~
      |     strlen
Compiling /data/led-display/.pioenvs/led-display/lib67b/ESP8266WiFi/CertStoreBearSSL.cpp.o
Compiling /data/led-display/.pioenvs/led-display/lib67b/ESP8266WiFi/ESP8266WiFi.cpp.o
Compiling /data/led-display/.pioenvs/led-display/lib67b/ESP8266WiFi/ESP8266WiFiAP.cpp.o
Compiling /data/led-display/.pioenvs/led-display/lib67b/ESP8266WiFi/ESP8266WiFiGeneric.cpp.o
*** [/data/led-display/.pioenvs/led-display/src/esphome/components/ehmtxv2/EHMTX.cpp.o] Error 1

This is my yaml config, i changed the time component and removed the wifi section

api:


# esphome config file with all features
substitutions:
  devicename: led-display
  ledpin: D3
  loglevel: DEBUG

external_components:
  - source:
      type: git
      url: https://github.com/lubeda/EspHoMaTriXv2
      ref: develop # optional select a special branch or tag

esphome:
  name: $devicename
  comment: 8x32 RGB Display in kitchen
      
binary_sensor:
  - platform: status
    name: "$devicename Status"

esp8266:
  board: d1_mini

font: 
  - file: _fonts/EHMTXv2.ttf
    id: default_font
    size: 16
    glyphs:  |
       !"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz€@üöäÜÖÄß
  
logger:
  level: WARN


light:
  - platform: neopixelbus
    id: ehmtx_light
    type: GRB
    variant: WS2812
    pin: $ledpin
    num_leds: 256
    color_correct: [30%, 30%, 30%]
    name: "$devicename Light"
    restore_mode: ALWAYS_OFF
    effects:
      - e131:
          universe: 1
          channels: RGB
    on_turn_on:
      lambda: |-
         id(ehmtx_display)->set_enabled(false);
    on_turn_off:
       lambda: |-
         id(ehmtx_display)->set_enabled(true);

e131:
  method: multicast # default: register E1.31 to Multicast group

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

ehmtxv2:
  id: rgb8x32
  show_seconds: true
  rainbow_interval: 32
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  icons2html: true
  default_font_id: default_font
  special_font_id: default_font
  special_font_yoffset: 6
  default_font_yoffset: 6
  icons: 
    - id: xani
      lameid: 6075
    - id: xsta
      lameid: 11236
    - url: https://developer.lametric.com/content/apps/icon_thumbs/48720.gif
      pingpong: true
      id: pipo
      frame_duration: 300
    - lameid: 5965
      frame_duration: 180
      id: d180
    - lameid: 5965
      frame_duration: 80
      id: d080
    - id: fullscreen
      file: icons/sample8x32.gif
    - id: samplegif
      file: icons/sample8x8.gif

Additional context

Add any other context about the problem here.

[BUG] no longer building with 2023.7.0-dev

Bug report

Describe the bug

esphome no longer building ulanzi-easy

Additional information

  • used Hardware:
    • ulanzi

To Reproduce

Steps to reproduce the behavior: compile on esphome 2023.7.0-dev

Expected behavior

A clear and concise description of what you expected to happen.

Configuration

(optional) The YAML you used in epshome without any password

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

INFO ESPHome 2023.7.0-dev
INFO Reading configuration /config/esphome/ulanzi-easy.yaml...
WARNING 
WARNING Please check the documentation and wiki https://github.com/lubeda/EspHoMaTriXv2
WARNING 
WARNING GPIO15 is a Strapping PIN and should be avoided.
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 Detected timezone 'Pacific/Auckland'
INFO Detected timezone 'Pacific/Auckland'
INFO Generating C++ source...
INFO Preparing icons, this may take some seconds.
INFO EsphoMaTrix: wrote html-file with icon preview: /config/esphome/ulanzi-easy.html
INFO List of icons for e.g. blueprint:

["error","home_assistant","temperature","lightbulb","music","phone","car","sleep8x32",]

INFO Compiling app...
Processing ulanzi (board: esp32dev; framework: arduino; platform: platformio/[email protected])
--------------------------------------------------------------------------------
Library Manager: Installing esphome/AsyncTCP-esphome @ 1.2.2
INFO Installing esphome/AsyncTCP-esphome @ 1.2.2
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
INFO [email protected] has been installed!
Library Manager: Installing esphome/ESPAsyncWebServer-esphome @ 2.1.0
INFO Installing esphome/ESPAsyncWebServer-esphome @ 2.1.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
INFO [email protected] has been installed!
Library Manager: Resolving dependencies...
INFO Resolving dependencies...
Library Manager: Installing bblanchon/ArduinoJson @ 6.18.5
INFO Installing bblanchon/ArduinoJson @ 6.18.5
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
INFO [email protected] has been installed!
Library Manager: Installing makuna/NeoPixelBus @ 2.7.3
INFO Installing makuna/NeoPixelBus @ 2.7.3
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
INFO [email protected] has been installed!
Library Manager: Resolving dependencies...
INFO Resolving dependencies...
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 1.2.2
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 2.1.0
|-- ESPmDNS @ 2.0.0
|-- Wire @ 2.0.0
|-- ArduinoJson @ 6.18.5
|-- NeoPixelBus @ 2.7.3
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/adc/adc_sensor.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/addressable_light/addressable_light_display.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/api_connection.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/api_server.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/list_entities.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/proto.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/api/user_services.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/binary_sensor/automation.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/binary_sensor/binary_sensor.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/binary_sensor/filter.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/display/display.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/display/display_buffer.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/display/rect.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ds1307/ds1307.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_icons.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_queue.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/esp32/core.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/esp32/gpio.cpp.o
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/esp32/preferences.cpp.o
In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:95:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *default_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:96:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *special_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:150:36: error: 'esphome::display::Font' has not been declared
     void set_default_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:151:36: error: 'esphome::display::Font' has not been declared
     void set_special_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:267:3: error: expected class-name before '{' token
   {
   ^
src/esphome/components/ehmtxv2/EHMTX.h:272:107: error: 'esphome::display::ImageType' has not been declared
     EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration);
                                                                                                           ^~~~~~~~~
In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX_queue.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:95:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *default_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:96:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *special_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:150:36: error: 'esphome::display::Font' has not been declared
     void set_default_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:151:36: error: 'esphome::display::Font' has not been declared
     void set_special_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:267:3: error: expected class-name before '{' token
   {
   ^
src/esphome/components/ehmtxv2/EHMTX.h:272:107: error: 'esphome::display::ImageType' has not been declared
     EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration);
                                                                                                           ^~~~~~~~~
In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX_icons.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:95:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *default_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:96:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *special_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:150:36: error: 'esphome::display::Font' has not been declared
     void set_default_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:151:36: error: 'esphome::display::Font' has not been declared
     void set_special_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:267:3: error: expected class-name before '{' token
   {
   ^
src/esphome/components/ehmtxv2/EHMTX.h:272:107: error: 'esphome::display::ImageType' has not been declared
     EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration);
                                                                                                           ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp: In member function 'void esphome::EHMTX_queue::draw()':
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:148:14: error: 'Font' is not a member of 'esphome::display'
     display::Font *font = this->default_font ? this->config_->default_font : this->config_->special_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:148:14: note: suggested alternative:
In file included from src/esphome.h:28,
                 from src/esphome/components/ehmtxv2/EHMTX_queue.cpp:1:
src/esphome/components/font/font.h:41:7: note:   'esphome::font::Font'
 class Font : public display::BaseFont {
       ^~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:148:25: error: expected primary-expression before '=' token
     display::Font *font = this->default_font ? this->config_->default_font : this->config_->special_font;
                         ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:148:63: error: 'class esphome::EHMTX' has no member named 'default_font'; did you mean 'set_default_font'?
     display::Font *font = this->default_font ? this->config_->default_font : this->config_->special_font;
                                                               ^~~~~~~~~~~~
                                                               set_default_font
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:148:93: error: 'class esphome::EHMTX' has no member named 'special_font'; did you mean 'set_special_font'?
     display::Font *font = this->default_font ? this->config_->default_font : this->config_->special_font;
                                                                                             ^~~~~~~~~~~~
                                                                                             set_special_font
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:177:76: error: expected primary-expression before ',' token
         this->config_->display->print(this->xpos() + xoffset, yoffset, font, color_, esphome::display::TextAlign::BASELINE_LEFT,
                                                                            ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:211:71: error: expected primary-expression before ',' token
           this->config_->display->strftime(xoffset + 15, yoffset, font, color_, display::TextAlign::BASELINE_CENTER, EHMTXv2_TIME_FORMAT,
                                                                       ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:224:68: error: expected primary-expression before ',' token
           this->config_->display->print(15 + xoffset, yoffset, font, this->config_->alarm_color, display::TextAlign::BASELINE_CENTER, "!t!");
                                                                    ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:233:71: error: expected primary-expression before ',' token
           this->config_->display->strftime(xoffset + 15, yoffset, font, color_, display::TextAlign::BASELINE_CENTER, EHMTXv2_DATE_FORMAT,
                                                                       ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:246:68: error: expected primary-expression before ',' token
           this->config_->display->print(xoffset + 15, yoffset, font, this->config_->alarm_color, display::TextAlign::BASELINE_CENTER, "!d!");
                                                                    ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:250:77: error: no matching function for call to 'esphome::addressable_light::AddressableLightDisplay::image(int, int, esphome::EHMTX_Icon*&)'
         this->config_->display->image(0, 0, this->config_->icons[this->icon]);
                                                                             ^
In file included from src/esphome/components/display/display_buffer.h:6,
                 from src/esphome/components/addressable_light/addressable_light_display.h:5,
                 from src/esphome.h:4,
                 from src/esphome/components/ehmtxv2/EHMTX_queue.cpp:1:
src/esphome/components/display/display.h:349:8: note: candidate: 'void esphome::display::Display::image(int, int, esphome::display::BaseImage*, esphome::Color, esphome::Color)'
   void image(int x, int y, BaseImage *image, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
        ^~~~~
src/esphome/components/display/display.h:349:8: note:   no known conversion for argument 3 from 'esphome::EHMTX_Icon*' to 'esphome::display::BaseImage*'
src/esphome/components/display/display.h:360:8: note: candidate: 'void esphome::display::Display::image(int, int, esphome::display::BaseImage*, esphome::display::ImageAlign, esphome::Color, esphome::Color)'
   void image(int x, int y, BaseImage *image, ImageAlign align, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
        ^~~~~
src/esphome/components/display/display.h:360:8: note:   candidate expects 6 arguments, 3 provided
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:260:76: error: expected primary-expression before ',' token
         this->config_->display->print(this->xpos() + xoffset, yoffset, font, color_, esphome::display::TextAlign::BASELINE_LEFT,
                                                                            ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:265:79: error: no matching function for call to 'esphome::addressable_light::AddressableLightDisplay::image(int, int, esphome::EHMTX_Icon*&)'
           this->config_->display->image(2, 0, this->config_->icons[this->icon]);
                                                                               ^
In file included from src/esphome/components/display/display_buffer.h:6,
                 from src/esphome/components/addressable_light/addressable_light_display.h:5,
                 from src/esphome.h:4,
                 from src/esphome/components/ehmtxv2/EHMTX_queue.cpp:1:
src/esphome/components/display/display.h:349:8: note: candidate: 'void esphome::display::Display::image(int, int, esphome::display::BaseImage*, esphome::Color, esphome::Color)'
   void image(int x, int y, BaseImage *image, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
        ^~~~~
src/esphome/components/display/display.h:349:8: note:   no known conversion for argument 3 from 'esphome::EHMTX_Icon*' to 'esphome::display::BaseImage*'
src/esphome/components/display/display.h:360:8: note: candidate: 'void esphome::display::Display::image(int, int, esphome::display::BaseImage*, esphome::display::ImageAlign, esphome::Color, esphome::Color)'
   void image(int x, int y, BaseImage *image, ImageAlign align, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
        ^~~~~
src/esphome/components/display/display.h:360:8: note:   candidate expects 6 arguments, 3 provided
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:271:79: error: no matching function for call to 'esphome::addressable_light::AddressableLightDisplay::image(int, int, esphome::EHMTX_Icon*&)'
           this->config_->display->image(0, 0, this->config_->icons[this->icon]);
                                                                               ^
In file included from src/esphome/components/display/display_buffer.h:6,
                 from src/esphome/components/addressable_light/addressable_light_display.h:5,
                 from src/esphome.h:4,
                 from src/esphome/components/ehmtxv2/EHMTX_queue.cpp:1:
src/esphome/components/display/display.h:349:8: note: candidate: 'void esphome::display::Display::image(int, int, esphome::display::BaseImage*, esphome::Color, esphome::Color)'
   void image(int x, int y, BaseImage *image, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
        ^~~~~
src/esphome/components/display/display.h:349:8: note:   no known conversion for argument 3 from 'esphome::EHMTX_Icon*' to 'esphome::display::BaseImage*'
src/esphome/components/display/display.h:360:8: note: candidate: 'void esphome::display::Display::image(int, int, esphome::display::BaseImage*, esphome::display::ImageAlign, esphome::Color, esphome::Color)'
   void image(int x, int y, BaseImage *image, ImageAlign align, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
        ^~~~~
src/esphome/components/display/display.h:360:8: note:   candidate expects 6 arguments, 3 provided
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:282:76: error: expected primary-expression before ',' token
         this->config_->display->print(this->xpos() + xoffset, yoffset, font, color_, esphome::display::TextAlign::BASELINE_LEFT,
                                                                            ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp: In member function 'void esphome::EHMTX_queue::calc_scroll_time(std::__cxx11::string, uint16_t)':
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:312:82: error: 'class esphome::EHMTX' has no member named 'default_font'; did you mean 'set_default_font'?
       this->config_->display->get_text_bounds(0, 0, text.c_str(), this->config_->default_font, display::TextAlign::LEFT, &x, &y, &w, &h);
                                                                                  ^~~~~~~~~~~~
                                                                                  set_default_font
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:316:82: error: 'class esphome::EHMTX' has no member named 'special_font'; did you mean 'set_special_font'?
       this->config_->display->get_text_bounds(0, 0, text.c_str(), this->config_->special_font, display::TextAlign::LEFT, &x, &y, &w, &h);
                                                                                  ^~~~~~~~~~~~
                                                                                  set_special_font
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::tick()':
src/esphome/components/ehmtxv2/EHMTX.cpp:581:67: error: 'class esphome::EHMTX_Icon' has no member named 'set_frame'; did you mean 'next_frame'?
             this->icons[this->queue[this->screen_pointer]->icon]->set_frame(0);
                                                                   ^~~~~~~~~
                                                                   next_frame
src/esphome/components/ehmtxv2/EHMTX.cpp: At global scope:
src/esphome/components/ehmtxv2/EHMTX.cpp:677:41: error: variable or field 'set_default_font' declared void
   void EHMTX::set_default_font(display::Font *font)
                                         ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:677:41: error: 'Font' is not a member of 'esphome::display'
src/esphome/components/ehmtxv2/EHMTX.cpp:677:41: note: suggested alternative:
In file included from src/esphome.h:28,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/font/font.h:41:7: note:   'esphome::font::Font'
 class Font : public display::BaseFont {
       ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:677:51: error: expected primary-expression before ')' token
   void EHMTX::set_default_font(display::Font *font)
                                                   ^
src/esphome/components/ehmtxv2/EHMTX.cpp:682:41: error: variable or field 'set_special_font' declared void
   void EHMTX::set_special_font(display::Font *font)
                                         ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:682:41: error: 'Font' is not a member of 'esphome::display'
src/esphome/components/ehmtxv2/EHMTX.cpp:682:41: note: suggested alternative:
In file included from src/esphome.h:28,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/font/font.h:41:7: note:   'esphome::font::Font'
 class Font : public display::BaseFont {
       ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:682:51: error: expected primary-expression before ')' token
   void EHMTX::set_special_font(display::Font *font)
                                                   ^
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:6:117: error: 'esphome::display::ImageType' has not been declared
   EHMTX_Icon::EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration)
                                                                                                                     ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp: In constructor 'esphome::EHMTX_Icon::EHMTX_Icon(const uint8_t*, int, int, uint32_t, int, std::__cxx11::string, bool, uint16_t)':
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:7:9: error: class 'esphome::EHMTX_Icon' does not have any field named 'Animation'
       : Animation(data_start, width, height, animation_frame_count, type)
         ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp: In member function 'void esphome::EHMTX_Icon::next_frame()':
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:17:15: error: 'class esphome::EHMTX_Icon' has no member named 'get_animation_frame_count'
     if (this->get_animation_frame_count() > 1)
               ^~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:21:37: error: 'class esphome::EHMTX_Icon' has no member named 'get_current_frame'
         if (this->reverse && (this->get_current_frame() == this->get_animation_frame_count() - 2))
                                     ^~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:21:66: error: 'class esphome::EHMTX_Icon' has no member named 'get_animation_frame_count'
         if (this->reverse && (this->get_current_frame() == this->get_animation_frame_count() - 2))
                                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:25:9: error: 'Animation' has not been declared
         Animation::next_frame();
         ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:29:19: error: 'class esphome::EHMTX_Icon' has no member named 'get_current_frame'
         if (this->get_current_frame() == 1) // this->get_animation_frame_count())
                   ^~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:33:9: error: 'Animation' has not been declared
         Animation::prev_frame();
         ^~~~~~~~~
Compiling /data/ulanzi/.pioenvs/ulanzi/src/esphome/components/font/font.cpp.o
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_icons.cpp.o] Error 1
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_queue.cpp.o] Error 1
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX.cpp.o] Error 1
========================= [FAILED] Took 47.84 seconds =========================

Services calls

[QUESTION] - Documentation Discussion

Question

This is more of a discussion topic than a question. I think the documentation so far is pretty good, I was able to work my way through going from v1 to v2 and figuring out the differences. I would like to contribute to getting the documentation a little more extensive.

The question part comes in to where should the documentation go? Is the README file the best place or would it be better to start porting a lot of it over to the wiki section?

Suggested additions:

  • Breaking changes going from v1 to v2
    • outline all of the changes required to do the upgrade
  • Detail services exposed to Home Assistant in a little more depth
  • Additional Home Assistant automation examples

[FEATURE REQUEST] - Transition between screens

Feature Request

Describe the solution / feature you'd like

As it currently stands, from what I can tell, there is no configuration option to do a scroll effect between the screens, it just jumps to the new screen. It would be nice to have either a default or configurable transition. Example when you add a screen it will scroll top down to the new screen from the old screen, or left to right, etc. Similar effects exist for other solutions so those can be used as another example.

[QUESTION] Configure display times for clock and date.

Question

I'm using EspHoMaTriXv2 on a Ulanzi TC001. I want to display the time for 55 seconds and the date for 5 seconds in a loop. I don't understand, how I can configure the display times. I tried clock_interval: 55 but it doesn't seem to help.

What's the corerct way?

Additional information

  • used Hardware:
    • Ulanzi TC001
    • EspHoMaTriXv2 version: latest

[FEATURE REQUEST] Localized abbreviated day of the week

Feature Request

Describe the solution / feature you'd like

This is rather a question for Wikipedia, whether it is possible to make the output of the date with localized abbreviated day of the week (ПО, ВТ or По, Вт), or at least in English but not 3 letters but 2, like MO, TU.... Or Mo, Tu... 3 letters take up a lot of space.

ehmtx.weekday.color and ehmtx.today.color actions fail

I tried doing the following in the esphome->on_boot->then:

esphome:
  # [...]
  on_boot:
    then:
      # [...]

      - ehmtx.weekday.color:
          id: rgb8x32
          red: !lambda return 100;
          green: !lambda return 100;
          blue: !lambda return 100;

      - ehmtx.today.color:
          id: rgb8x32
          red: !lambda return 199;
          green: !lambda return 90;
          blue: !lambda return 0;

Which looks like it should be valid according to this:

https://github.com/lubeda/EspHoMaTriXv2/blob/main/components/ehmtxv2/__init__.py#L211
https://github.com/lubeda/EspHoMaTriXv2/blob/main/components/ehmtxv2/__init__.py#L194

But I get the following error:

Compiling /data/pixel-clock/.pioenvs/pixel-clock/src/main.cpp.o
src/main.cpp:86:10: error: 'SetWeekdayColor' in namespace 'esphome' does not name a template type
 esphome::SetWeekdayColor<> *esphome_setweekdaycolor;
          ^~~~~~~~~~~~~~~
src/main.cpp:87:10: error: 'SetTodayColor' in namespace 'esphome' does not name a template type
 esphome::SetTodayColor<> *esphome_settodaycolor;
          ^~~~~~~~~~~~~
/config/esphome/pixel-clock.yaml: In function 'void setup()':
/config/esphome/pixel-clock.yaml:379:3: error: 'esphome_setweekdaycolor' was not declared in this scope
/config/esphome/pixel-clock.yaml:379:42: error: 'SetWeekdayColor' in namespace 'esphome' does not name a template type
/config/esphome/pixel-clock.yaml:379:58: error: expected primary-expression before '>' token
/config/esphome/pixel-clock.yaml:51:3: error: 'esphome_settodaycolor' was not declared in this scope
       - ehmtx.today.color:
   ^   ~~~~~~~~~~~~~~~~~
/config/esphome/pixel-clock.yaml:51:40: error: 'SetTodayColor' in namespace 'esphome' does not name a template type
       - ehmtx.today.color:
                                        ^            
/config/esphome/pixel-clock.yaml:51:54: error: expected primary-expression before '>' token
       - ehmtx.today.color:
                                                      ^
/config/esphome/pixel-clock.yaml:59:112: error: no matching function for call to 'esphome::Automation<>::add_actions(<brace-enclosed initializer list>)'
 
                                                                                                                ^
In file included from src/esphome/components/display/display_buffer.h:5,
                 from src/esphome/components/addressable_light/addressable_light_display.h:5,
                 from src/esphome.h:4,
                 from src/main.cpp:3:
src/esphome/core/automation.h:237:8: note: candidate: 'void esphome::Automation<Ts>::add_actions(const std::vector<esphome::Action<Ts ...>*>&) [with Ts = {}]'
   void add_actions(const std::vector<Action<Ts...> *> &actions) { this->actions_.add_actions(actions); }
        ^~~~~~~~~~~
src/esphome/core/automation.h:237:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const std::vector<esphome::Action<>*, std::allocator<esphome::Action<>*> >&'
*** [/data/pixel-clock/.pioenvs/pixel-clock/src/main.cpp.o] Error 1

I'm doing something wrong or it is a bug with this beta version?

[QUESTION] Automatic translation of characters

Ah, I was digging around the ehmtxv2 files and I saw what you meant when you said "automatic translation of characters" over at trip5/Matrix-Fonts#3

In the extended_state.yaml I see:

    darkpoet78_replace:
      name: Use special character provided by Trip5 fonts (default=false)
      description: If you are using the bdf fonts of https://github.com/trip5/Matrix-Fonts you have to translate some character e.g. the euro sign. This flag actives the translation.
      selector:
        boolean:
      default: false

The intention was to allow these characters be substituted "on the fly" by the firmware. So I checked the .h and .cpp files and the idea was never implemented, right?

Now I've figured out how to properly implement TTF bitmap files and I'm even working on a Cyrillic character set. How about just removing that section from the yaml completely? It's totally possible to use Unicode characters when using my Matrix-Fonts TTF files.

[QUESTION] Compilation errors

Question

Trying to compile and getting the errors. Log is below. Any idea on how to fix it?

Home Assistant 2023.5.4
Supervisor 2023.06.2
Operating System 10.3
Frontend 20230503.3 - latest

Additional information

  • used Hardware:
    • ESP32 or ESP8266 (tried both)

    • EspHoMaTriXv2 version: tried Develop and Main branches

Logs

In file included from src/esphome.h:26,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:109:5: error: 'time' does not name a type
     time::RealTimeClock *clock;
     ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:148:20: error: 'time' is not a class, namespace, or enumeration
     void set_clock(time::RealTimeClock *clock);
                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:148:40: error: expected ',' or '...' before '*' token
     void set_clock(time::RealTimeClock *clock);
                                        ^
In file included from src/esphome.h:26,
                 from src/esphome/components/ehmtxv2/EHMTX_queue.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:109:5: error: 'time' does not name a type
     time::RealTimeClock *clock;
     ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:148:20: error: 'time' is not a class, namespace, or enumeration
     void set_clock(time::RealTimeClock *clock);
                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:148:40: error: expected ',' or '...' before '*' token
     void set_clock(time::RealTimeClock *clock);
                                        ^
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::bitmap_screen(std::__cxx11::string, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:142:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::bitmap_small(std::__cxx11::string, std::__cxx11::string, int, int, bool, int, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:177:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::blank_screen(int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:390:26: error: 'class esphome::EHMTX' has no member named 'clock'
     scr->endtime = this->clock->now().timestamp + lifetime * 60;
                          ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'virtual void esphome::EHMTX::update()':
src/esphome/components/ehmtxv2/EHMTX.cpp:397:17: error: 'class esphome::EHMTX' has no member named 'clock'
       if (this->clock->now().is_valid())
                 ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::force_screen(std::__cxx11::string, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:432:44: error: 'class esphome::EHMTX' has no member named 'clock'
             this->next_action_time = this->clock->now().timestamp;
                                            ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'uint8_t esphome::EHMTX::find_oldest_queue_element()':
src/esphome/components/ehmtxv2/EHMTX.cpp:442:30: error: 'class esphome::EHMTX' has no member named 'clock'
     time_t last_time = this->clock->now().timestamp;
                              ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'uint8_t esphome::EHMTX::find_last_clock()':
src/esphome/components/ehmtxv2/EHMTX.cpp:463:25: error: 'class esphome::EHMTX' has no member named 'clock'
       time_t ts = this->clock->now().timestamp;
                         ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::remove_expired_queue_element()':
src/esphome/components/ehmtxv2/EHMTX.cpp:485:15: error: 'class esphome::EHMTX' has no member named 'clock'
     if (this->clock->now().is_valid())
               ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:488:25: error: 'class esphome::EHMTX' has no member named 'clock'
       time_t ts = this->clock->now().timestamp;
                         ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::tick()':
src/esphome/components/ehmtxv2/EHMTX.cpp:549:35: error: 'class esphome::EHMTX' has no member named 'clock'
     if (this->is_running && this->clock->now().is_valid())
                                   ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:551:25: error: 'class esphome::EHMTX' has no member named 'clock'
       time_t ts = this->clock->now().timestamp;
                         ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::skip_screen()':
src/esphome/components/ehmtxv2/EHMTX.cpp:632:36: error: 'class esphome::EHMTX' has no member named 'clock'
     this->next_action_time = this->clock->now().timestamp - 1;
                                    ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::get_status()':
src/esphome/components/ehmtxv2/EHMTX.cpp:643:23: error: 'class esphome::EHMTX' has no member named 'clock'
     time_t ts = this->clock->now().timestamp;
                       ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::del_screen(std::__cxx11::string, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:718:44: error: 'class esphome::EHMTX' has no member named 'clock'
             this->next_action_time = this->clock->now().timestamp;
                                            ^~~~~
Compiling /data/espmatrix01/.pioenvs/espmatrix01/src/esphome/components/esp32/preferences.cpp.o
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::icon_screen(std::__cxx11::string, std::__cxx11::string, int, int, bool, int, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:741:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::rainbow_icon_screen(std::__cxx11::string, std::__cxx11::string, int, int, bool)':
src/esphome/components/ehmtxv2/EHMTX.cpp:773:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::rainbow_clock_screen(int, int, bool)':
src/esphome/components/ehmtxv2/EHMTX.cpp:802:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::rainbow_date_screen(int, int, bool)':
src/esphome/components/ehmtxv2/EHMTX.cpp:816:31: error: 'class esphome::EHMTX' has no member named 'clock'
       screen->endtime = this->clock->now().timestamp + lifetime * 60;
                               ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::text_screen(std::__cxx11::string, int, int, bool, int, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:830:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::rainbow_text_screen(std::__cxx11::string, int, int, bool)':
src/esphome/components/ehmtxv2/EHMTX.cpp:842:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::full_screen(std::__cxx11::string, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:868:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::clock_screen(int, int, bool, int, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:886:29: error: 'class esphome::EHMTX' has no member named 'clock'
     screen->endtime = this->clock->now().timestamp + lifetime * 60;
                             ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::date_screen(int, int, bool, int, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:902:31: error: 'class esphome::EHMTX' has no member named 'clock'
       screen->endtime = this->clock->now().timestamp + lifetime * 60;
                               ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'esphome::EHMTX_queue* esphome::EHMTX::find_free_queue_element()':
src/esphome/components/ehmtxv2/EHMTX.cpp:926:23: error: 'class esphome::EHMTX' has no member named 'clock'
     time_t ts = this->clock->now().timestamp;
                       ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: At global scope:
src/esphome/components/ehmtxv2/EHMTX.cpp:1005:8: error: no declaration matches 'void esphome::EHMTX::set_clock(esphome::time::RealTimeClock*)'
   void EHMTX::set_clock(time::RealTimeClock *clock)
        ^~~~~
In file included from src/esphome.h:26,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:148:10: note: candidate is: 'void esphome::EHMTX::set_clock(int)'
     void set_clock(time::RealTimeClock *clock);
          ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.h:58:9: note: 'class esphome::EHMTX' defined here
   class EHMTX : public PollingComponent, public api::CustomAPIDevice
         ^~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::draw_day_of_week()':
src/esphome/components/ehmtxv2/EHMTX.cpp:1015:24: error: 'class esphome::EHMTX' has no member named 'clock'
       auto dow = this->clock->now().day_of_week - 1; // SUN = 0
                        ^~~~~
In file included from src/esphome.h:26,
                 from src/esphome/components/ehmtxv2/EHMTX_icons.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:109:5: error: 'time' does not name a type
     time::RealTimeClock *clock;
     ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:148:20: error: 'time' is not a class, namespace, or enumeration
     void set_clock(time::RealTimeClock *clock);
                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:148:40: error: expected ',' or '...' before '*' token
     void set_clock(time::RealTimeClock *clock);
                                        ^
src/esphome/components/ehmtxv2/EHMTX_queue.cpp: In member function 'void esphome::EHMTX_queue::draw()':
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:207:28: error: 'class esphome::EHMTX' has no member named 'clock'
         if (this->config_->clock->now().is_valid()) // valid time
                            ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:210:38: error: 'class esphome::EHMTX' has no member named 'clock'
           time_t ts = this->config_->clock->now().timestamp;
                                      ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:212:59: error: 'class esphome::EHMTX' has no member named 'clock'
                                            this->config_->clock->now());
                                                           ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:213:31: error: 'class esphome::EHMTX' has no member named 'clock'
           if ((this->config_->clock->now().second % 2 == 0) && this->config_->show_seconds)
                               ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:229:28: error: 'class esphome::EHMTX' has no member named 'clock'
         if (this->config_->clock->now().is_valid())
                            ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:232:38: error: 'class esphome::EHMTX' has no member named 'clock'
           time_t ts = this->config_->clock->now().timestamp;
                                      ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:234:59: error: 'class esphome::EHMTX' has no member named 'clock'
                                            this->config_->clock->now());
                                                           ^~~~~
src/esphome/components/ehmtxv2/EHMTX_queue.cpp:235:31: error: 'class esphome::EHMTX' has no member named 'clock'
           if ((this->config_->clock->now().second % 2 == 0) && this->config_->show_seconds)
                               ^~~~~
*** [/data/espmatrix01/.pioenvs/espmatrix01/src/esphome/components/ehmtxv2/EHMTX_queue.cpp.o] Error 1
*** [/data/espmatrix01/.pioenvs/espmatrix01/src/esphome/components/ehmtxv2/EHMTX_icons.cpp.o] Error 1
*** [/data/espmatrix01/.pioenvs/espmatrix01/src/esphome/components/ehmtxv2/EHMTX.cpp.o] Error 1

Additional context

[BUG] can't compile

Bug report

Describe the bug

can't compile the simple code exemple.
seem to be related to commit 1036509, at least part of code how generate error comme from this commit

here is the log

Compiling .pioenvs/esphomatrix/src/esphome/components/ehmtxv2/EHMTX.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/homeassistant/time/homeassistant_time.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/addressable_light.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/automation.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/esp_color_correction.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/esp_hsv_color.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/esp_range_view.cpp.o
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::bitmap_screen(std::string, int, int)':
src/esphome/components/ehmtxv2/EHMTX.cpp:109:29: error: 'JSON_ARRAY_SIZE' was not declared in this scope; did you mean 'LWIP_ARRAYSIZE'?
  109 |     const size_t CAPACITY = JSON_ARRAY_SIZE(256);
      |                             ^~~~~~~~~~~~~~~
      |                             LWIP_ARRAYSIZE
src/esphome/components/ehmtxv2/EHMTX.cpp:110:5: error: 'StaticJsonDocument' was not declared in this scope
  110 |     StaticJsonDocument<CAPACITY> doc;
      |     ^~~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:110:34: error: 'doc' was not declared in this scope
  110 |     StaticJsonDocument<CAPACITY> doc;
      |                                  ^~~
src/esphome/components/ehmtxv2/EHMTX.cpp:111:5: error: 'deserializeJson' was not declared in this scope
  111 |     deserializeJson(doc, text);
      |     ^~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:112:5: error: 'JsonArray' was not declared in this scope
  112 |     JsonArray array = doc.as<JsonArray>();
      |     ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:115:10: error: 'JsonVariant' was not declared in this scope
  115 |     for (JsonVariant v : array)
      |          ^~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:129:22: error: expected ')' before ';' token
  129 |     screen->text = "";
      |                      ^
      |                      )
src/esphome/components/ehmtxv2/EHMTX.cpp:115:9: note: to match this '('
  115 |     for (JsonVariant v : array)
      |         ^
src/esphome/components/ehmtxv2/EHMTX.cpp:130:5: error: 'screen' was not declared in this scope; did you mean 'strlen'?
  130 |     screen->endtime = this->clock->now().timestamp + lifetime * 60;
      |     ^~~~~~
      |     strlen
Compiling .pioenvs/esphomatrix/src/esphome/components/light/light_call.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/light_json_schema.cpp.o
Compiling .pioenvs/esphomatrix/src/esphome/components/light/light_output.cpp.o
*** [.pioenvs/esphomatrix/src/esphome/components/ehmtxv2/EHMTX.cpp.o] Error 1

[BUG]

Bug report

Describe the bug

When adding the light component, the provided code/lambdas to turn on/off are returning the 'set_enabled' function is not available. Incidentally, the sample code also has inconsistent indentations

Without this, the light flashes briefly and then turns off at next screen refresh

Additional information

  • used Hardware:
    • Ulanzi
    • EspHoMaTriXv2 version (current - just compiled on 22 May 2023)
    • ESPHome 2023.5.1

To Reproduce

Steps to reproduce the behavior:
Added sample code to YAML and corrected the indentations

Expected behavior

A clear and concise description of what you expected to happen.

Configuration

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: "$device_friendly_name Light"
    restore_mode: ALWAYS_OFF
    on_turn_on:
      lambda: |-
        id(rgb8x32)->set_enabled(false);
    on_turn_off:
      lambda: |-
        id(rgb8x32)->set_enabled(true);

Logs

/config/esphome/aw-clock.yaml: In lambda function:
/config/esphome/aw-clock.yaml:213:16: error: 'class esphome::EHMTX' has no member named 'set_enabled'
         id(rgb8x32)->set_enabled(false);
                ^~~~~~~~~~~
/config/esphome/aw-clock.yaml: In lambda function:
/config/esphome/aw-clock.yaml:216:16: error: 'class esphome::EHMTX' has no member named 'set_enabled'
         id(rgb8x32)->set_enabled(true);
                ^~~~~~~~~~~

[FEATURE REQUEST] Increase the number of icons

Feature Request

Is your feature request related to a problem?

There is no way to pass an icon to EspHoMaTriXv2 from HA, but want to have flexibility, variety of information displayed. 90 icons are not always enough.

Describe the solution / feature you'd like

Is it possible to increase the number of icons to at least 100?
What are these limitations associated with?

Describe alternatives you've considered

Or maybe could add transferring icons from HA to EspHoMaTriXv2 when adding a new screen.

My two custom fonts

I wanted to use the full height of the display and maximize the number of chars in the screen so I made these two fonts.

I am really happy with the result, so dropping them here in case they can help someone else too :)

Kapture 2023-07-20 at 10 54 13

CalciumSuperThinTall.ttf.zip
CalciumThinTall.ttf.zip

ehmtxv2:
   ...
  default_font_yoffset: 8
  default_font_id: default_font
  special_font_yoffset: 8
  special_font_id: special_font
font:
  - file: rgb-clock/CalciumThinTall.ttf
    size: 16
    id: default_font
    glyphs: |
      !?"%‰()+*=,-_.:°µ²³0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz€$@<>/
  - file: rgb-clock/CalciumSuperThinTall.ttf
    size: 16
    id: special_font
    glyphs: |
      !?"%‰()+*=,-_.:°µ²³0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz€$@<>/

[BUG] Icon Screens, Screen Time... not honored?

Bug report

Calling various icon screens from Home Assistant, it would appear that the screen times are not being honored. I'd like to keep my icon screens short but I can see in the code that the default is 5 seconds and shortening the time in Home Assistant doesn't change that...

      - service: esphome.pixelclock_yellow_icon_screen
        data:
          default_font: true
          icon_name: >-
            weather_{{ states('sensor.openweathermap_condition')|replace("-",
            "_") }}
          text: "{{ states('sensor.openweathermap_temperature')|round(1) }}°"
          lifetime: 5
          screen_time: 3
          r: 192
          g: 192
          b: 192

I also tried this in my YAML and it doesn't lengthen the default clock screen:

esphome:
  comment: "EHMTXv2 from LuBeDa"
  name: $devicename 
  on_boot:
    then:      
      - ds1307.read_time:
      - delay: 30s
      - lambda: |-
          id(rgb8x32)->set_clock_time(30);

So far, I fixed this by simply doing this in my Home Assistant (deleting the default clock screen and inserting my own):

  - service: esphome.pixelclock_yellow_del_screen
    data:
      icon_name: "*"
      mode: 2
  - service: esphome.pixelclock_yellow_clock_screen
    data:
      default_font: false
      lifetime: 5
      screen_time: 20
      r: 64
      g: 128
      b: 255

Sidenote that I miss one of the old features of clock intervals from v1... that the default clock screen would display a minimum of every x seconds (that was clock intervals)... this made it easier for me to force every 2nd screen to be the clock (ie. Clock, Weather, Clock, Inside Temperature, Clock, Humidity, etc.) You know what I mean? It easy enough just to change the clock interval to 5 seconds, info screens 5 seconds, forcing my preferred behavior... I can ignore losing that if I can speed through all my info screens...

[BUG] [Wiki] night-mode.md

Bug report

  [on_empty_queue] is an invalid option for [ehmtxv2]. Did you mean [allow_empty_screen]?
  on_empty_queue: 
    then: 
      lambda: |-
        if (id(night))
        {
          id(rgb8x32)->clock_screen(10,10,true,140,120,120);
          id(rgb8x32)->date_screen(10,5,true,120,200,150);
        }
        else 
        {
          id(rgb8x32)->blank_screen(1,15);
        }

Describe the bug

[on_empty_queue] is an invalid option for [ehmtxv2]. Did you mean [allow_empty_screen]?

Additional information

  • used Hardware:
    • ESP32 on Ulanzi TC001

To Reproduce

Steps to reproduce the behavior:
Add to config:

  on_empty_queue: 
    then: 
      lambda: |-

Issues with ESPHome 2023.07 update

Bug report

Describe the bug

Cannot update after ESPHome 2023.07. It seems that the new version brought changes that prevents updates (to Ulanzi). This seems to evolve around the font-handling.

Logs

In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX_icons.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:95:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *default_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:96:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *special_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:150:36: error: 'esphome::display::Font' has not been declared
     void set_default_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:151:36: error: 'esphome::display::Font' has not been declared
     void set_special_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:267:3: error: expected class-name before '{' token
   {
   ^
src/esphome/components/ehmtxv2/EHMTX.h:272:107: error: 'esphome::display::ImageType' has not been declared
     EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration);
                                                                                                           ^~~~~~~~~
In file included from src/esphome.h:25,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/ehmtxv2/EHMTX.h:95:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *default_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:96:14: error: 'Font' in namespace 'esphome::display' does not name a type
     display::Font *special_font;
              ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:150:36: error: 'esphome::display::Font' has not been declared
     void set_default_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:151:36: error: 'esphome::display::Font' has not been declared
     void set_special_font(display::Font *font);
                                    ^~~~
src/esphome/components/ehmtxv2/EHMTX.h:267:3: error: expected class-name before '{' token
   {
   ^
src/esphome/components/ehmtxv2/EHMTX.h:272:107: error: 'esphome::display::ImageType' has not been declared
     EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration);
                                                                                                           ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:6:117: error: 'esphome::display::ImageType' has not been declared
   EHMTX_Icon::EHMTX_Icon(const uint8_t *data_start, int width, int height, uint32_t animation_frame_count, display::ImageType type, std::string icon_name, bool revers, uint16_t frame_duration)
                                                                                                                     ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp: In constructor 'esphome::EHMTX_Icon::EHMTX_Icon(const uint8_t*, int, int, uint32_t, int, std::__cxx11::string, bool, uint16_t)':
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:7:9: error: class 'esphome::EHMTX_Icon' does not have any field named 'Animation'
       : Animation(data_start, width, height, animation_frame_count, type)
         ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp: In member function 'void esphome::EHMTX_Icon::next_frame()':
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:17:15: error: 'class esphome::EHMTX_Icon' has no member named 'get_animation_frame_count'
     if (this->get_animation_frame_count() > 1)
               ^~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:21:37: error: 'class esphome::EHMTX_Icon' has no member named 'get_current_frame'
         if (this->reverse && (this->get_current_frame() == this->get_animation_frame_count() - 2))
                                     ^~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:21:66: error: 'class esphome::EHMTX_Icon' has no member named 'get_animation_frame_count'
         if (this->reverse && (this->get_current_frame() == this->get_animation_frame_count() - 2))
                                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:25:9: error: 'Animation' has not been declared
         Animation::next_frame();
         ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:29:19: error: 'class esphome::EHMTX_Icon' has no member named 'get_current_frame'
         if (this->get_current_frame() == 1) // this->get_animation_frame_count())
                   ^~~~~~~~~~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX_icons.cpp:33:9: error: 'Animation' has not been declared
         Animation::prev_frame();
         ^~~~~~~~~
src/esphome/components/ehmtxv2/EHMTX.cpp: In member function 'void esphome::EHMTX::tick()':
src/esphome/components/ehmtxv2/EHMTX.cpp:581:67: error: 'class esphome::EHMTX_Icon' has no member named 'set_frame'; did you mean 'next_frame'?
             this->icons[this->queue[this->screen_pointer]->icon]->set_frame(0);
                                                                   ^~~~~~~~~
                                                                   next_frame
src/esphome/components/ehmtxv2/EHMTX.cpp: At global scope:
src/esphome/components/ehmtxv2/EHMTX.cpp:677:41: error: variable or field 'set_default_font' declared void
   void EHMTX::set_default_font(display::Font *font)
                                         ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:677:41: error: 'Font' is not a member of 'esphome::display'
src/esphome/components/ehmtxv2/EHMTX.cpp:677:41: note: suggested alternative:
In file included from src/esphome.h:28,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/font/font.h:41:7: note:   'esphome::font::Font'
 class Font : public display::BaseFont {
       ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:677:51: error: expected primary-expression before ')' token
   void EHMTX::set_default_font(display::Font *font)
                                                   ^
src/esphome/components/ehmtxv2/EHMTX.cpp:682:41: error: variable or field 'set_special_font' declared void
   void EHMTX::set_special_font(display::Font *font)
                                         ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:682:41: error: 'Font' is not a member of 'esphome::display'
src/esphome/components/ehmtxv2/EHMTX.cpp:682:41: note: suggested alternative:
In file included from src/esphome.h:28,
                 from src/esphome/components/ehmtxv2/EHMTX.cpp:1:
src/esphome/components/font/font.h:41:7: note:   'esphome::font::Font'
 class Font : public display::BaseFont {
       ^~~~
src/esphome/components/ehmtxv2/EHMTX.cpp:682:51: error: expected primary-expression before ')' token
   void EHMTX::set_special_font(display::Font *font)
                                                   ^
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX_icons.cpp.o] Error 1
*** [/data/ulanzi/.pioenvs/ulanzi/src/esphome/components/ehmtxv2/EHMTX.cpp.o] Error 1

Thanks!

[FEATURE REQUEST] Add display icon + text + status bar

Describe the solution / feature you'd like

The idea of a new version of the display is "icon_status_bar", an icon with text and a bar status bar at the bottom, which is set by the parameter "percent_status_bar" and is counted as 4% per 1 pixel, the brightness of the next pixel is done incrementally, or completely fill the remaining ones with dim, the parameter "fill_rem". The color of the status bar is also configurable, but if not specified, then we take the text color (rgb).

New parameters:

percent_status_bar - the bar under the text, % of 100
fill_rem - fill the remaining part with dim
r_sb, g_sb, b_sb - colors of the status bar

API:

icon_status_bar => {"icon_name", "text", "percent_status_bar", "lifetime", "screen_time", "default_font", "fill_rem", "r", "g", "b", "r_sb", "g_sb", "b_sb"}

Service:

void icon_status_bar(std::string icon, std::string text, int percent_status_bar, int lifetime=D_LIFETIME, int screen_time=D_SCREEN_TIME,bool default_font=true, bool fill_rem=false, int r=C_RED, int g=C_GREEN, int b=C_BLUE,int r_sb=?, int g_sb=?, int b_sb=?);

Additional context

As an example of use, you can display the status of printing with a 3d printer and in the status bar % completed, and the text of the remaining time. For a timer that would clearly show the time ratio. Show completed cases and % of cases from all.
Снимок экрана 2023-10-01 в 13 23 47
Снимок экрана 2023-10-01 в 13 25 06
Снимок экрана 2023-10-01 в 13 24 12
Снимок экрана 2023-10-01 в 13 24 21

[FEATURE REQUEST] Add a screen identifier (not by icon name, but unique)

Feature Request

Is your feature request related to a problem?

Failure to display two screens with different meanings but the same icons, for example current weather and weather forecast.
We have a limited number of icons, so sharing icons with different name is not feasible.

Describe the solution / feature you'd like

Add screen_name to icon_screen, rainbow_icon_screen services, if screen_name is specified it is used for screen identification, if not specified it takes the value of icon_name field.
In the services del_screen, force_screen replace the icon_name parameter with screen_name (or leave it as it is, but search for screen by the screen_name parameter), to accurately identification the screen.

If make these changes, then it will be possible to display different data with the same icons, for example, the current weather, and the weather forecast for tomorrow.

[FEATURE REQUEST] Add a screen with an icon and a time with the day of the week.

Feature Request

Describe the solution / feature you'd like

It would be great if you added an additional display option similar to icon_screen, but instead of text that would display the time and day of the week. The name of the new function could be selected icon_time,
parameters to run: "icon_name", "lifetime", "screen_time", "default_font", "r", "g", "b"

Additional context

As an example of a screens, displaying the weather and time icons with the day of the week.
Снимок экрана 2023-09-20 в 22 05 13

[BUG] Special font doesn't display.

Bug report

My clock screen only uses the default_font instead of the special_font.

Describe the bug

Worked as expected on develop branch right up to a few hours ago (just updated lol)... saw you push through an update so updated again... both on main and develop branches. Only shows the time with default_font.

Additional information

  • used Hardware:
    • Ulanzi TC-001

Configuration

font:
  - file: ehmtxv2/MatrixClock-Chunky8.bdf #
    id: special_font
    #size: 16
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:APMTapmt
  - file: ehmtxv2/MatrixClock-Light8.bdf #
    id: default_font
    #size: 16
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz°{|}~¡¢£¤¥¦§¨©ª«¬®¯±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

[BUG] Blueprints not working

Bug report

Thanks for this repo but the Blueprints I’ve tried all show me this error.

image

image

Additional information

  • used Hardware:
    • ESP32
    • EspHoMaTriXv2 version: latest master code from 7 May 2023

To Reproduce

Steps to reproduce the behavior:

Expected behavior

A clear and concise description of what you expected to happen.

Configuration

(optional) The YAML you used in epshome without any password

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

(optional) Add relevant logs which could help tackle the problem.

Services calls

(optional) The YAML of your service calls

Allow removing Ehmtx logo and version screens

Feature Request

Allow for removing those screens via yaml. Together they take ~1kb of flash and they are a bit intrusive.

e.g:

disable_logo_at_boot: true
disable_version_screen_at_boot: true

Workaround

For now, this seems to be working:

esphome:
  [...]
  on_boot:
    priority: -100
    then:
      - ds1307.read_time:
      - delay: 1ms
      - lambda: |-
          // delete all pre-defined screens
          id(rgb8x32)->del_screen("*", MODE_CLOCK);
          id(rgb8x32)->del_screen("*", MODE_DATE);
          id(rgb8x32)->del_screen("*", MODE_FULL_SCREEN);
          id(rgb8x32)->del_screen("*", MODE_ICON_SCREEN);
          id(rgb8x32)->del_screen("*", MODE_TEXT_SCREEN);
          id(rgb8x32)->del_screen("*", MODE_RAINBOW_ICON);
          id(rgb8x32)->del_screen("*", MODE_RAINBOW_TEXT);
          id(rgb8x32)->del_screen("*", MODE_RAINBOW_CLOCK);
          id(rgb8x32)->del_screen("*", MODE_RAINBOW_DATE);
          id(rgb8x32)->del_screen("*", MODE_BITMAP_SCREEN);
          id(rgb8x32)->del_screen("*", MODE_BITMAP_SMALL);
          
          // recreate clock screens with shorter screen_time
          int lifetime = 24*60*365*10; // 10 years should be enough
          int screen_time = 1;
          bool default_font = true;
          id(rgb8x32)->clock_screen(lifetime, screen_time, default_font, 240, 240, 240);
          id(rgb8x32)->date_screen(lifetime, screen_time, default_font, 240, 240, 240);

scroll_small_text: false does not work

Bug report

Describe the bug

The flag scroll_small_text does not work correctly. Setting it to false small text still scrolls

Additional information

I attempted to fix it as did @joncar, see links below but neither quite get's it right

andrew-codechimp@bdf69aa
https://github.com/joncar/EspHoMaTriXv2/tree/user/joncar/01-fix-scroll

  • used Hardware:
    • ESP32
    • EspHoMaTriXv2 version: [e.g. 2023.6.5]

To Reproduce

Steps to reproduce the behavior:
Set scroll_small_text: false and add a screen with small text

Expected behavior

A clear and concise description of what you expected to happen.
Small text will not scroll when set to false

Configuration

(optional) The YAML you used in epshome without any password

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

(optional) Add relevant logs which could help tackle the problem.

Services calls

(optional) The YAML of your service calls

[BUG] - Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled

Bug report

Describe the bug

Wanted to use my Awtrix with EspHoMaTriXv2, but the esp crashes on boot with or without the connected awtrix.
I've tried different settings in the yml file, but it keeps crashing.
Additional components have already been deactivated.

The esp is working with other firmwares.

[01:14:32][I][EHMTXv2:983]: set_brightness 80 => 31.37 %
[01:14:32]Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Add a description of the bug. Detail the expected behavior in contrast with the behavior you're observing.

Additional information

To Reproduce

Steps to reproduce the behavior:

Expected behavior

A clear and concise description of what you expected to happen.

Configuration

awtrix.yml

substitutions:
  devicename: awtrix
  friendly_name: Awtrix LED Matrix
  board: wemos_d1_mini32
#  ldr_pin: GPIO36
  matrix_pin: GPIO21
#  left_button_pin: GPIO26
#  mid_button_pin: GPIO16
#  right_button_pin: GPIO5
#  scl_pin: GPIO22 
#  sda_pin: GPIO17


esphome:
  name: $devicename
  friendly_name: $friendly_name

esp32:
  board: $board

logger:

api:

ota:
  password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Awtrix Fallback Hotspot"
    password: !secret wifi_fallback_pass

time:
  - platform: homeassistant
    id: homeassistant_time


external_components:
  - source:
      type: git
      url: https://github.com/lubeda/EspHoMaTriXv2
      ref: main

font: 
  - file: fonts/MatrixClock-Chunky6.bdf
    id: special_font
    #size: 16
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:APMTapmt
  - file: fonts/MatrixClock-Light8.bdf
    id: default_font
    #size: 16
    glyphs:  |
      ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz°
#  - file: 'fonts/EHMTXv2.ttf'
#    size: 16
#    id: default_font
#    glyphs:  |
#      !?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/

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

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: "Awtrix Light"
    restore_mode: ALWAYS_OFF
    on_turn_on:
      lambda: |-
         id(ehmtx_display)->set_enabled(false);
    on_turn_off:
       lambda: |-
         id(ehmtx_display)->set_enabled(true);

ehmtxv2:
  id: rgb8x32
  icons2html: true
  matrix_component: ehmtx_display
  time_component: homeassistant_time
  time_format: "%H:%M"
  date_format: "%d.%m.%Y"
  show_seconds: false
  default_font_id: default_font
  special_font_id: special_font
  icons: 
    - id: error
      lameid: 40530
#  on_next_screen:
#    - homeassistant.event:
#        event: esphome.new_screen
#        data_template:
#          iconname: !lambda "return icon.c_str();"
#          text: !lambda "return text.c_str();"

Screenshots

If applicable, add screenshots to help explain your problem.

Logs

...
[01:14:32]Rebooting...
[01:14:32]ets Jul 29 2019 12:21:46
[01:14:32]
[01:14:32]rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
[01:14:32]configsip: 0, SPIWP:0xee
[01:14:32]clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
[01:14:32]mode:DIO, clock div:2
[01:14:32]load:0x3fff0018,len:4
[01:14:32]load:0x3fff001c,len:1044
[01:14:32]load:0x40078000,len:8896
[01:14:32]load:0x40080400,len:5828
[01:14:32]entry 0x400806ac
[01:14:32][I][logger:262]: Log initialized
[01:14:32][C][ota:469]: There have been 7 suspected unsuccessful boot attempts.
[01:14:32][D][esp32.preferences:114]: Saving 1 preferences to flash...
[01:14:32][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[01:14:32][D][EHMTXv2:007]: Constructor start
[01:14:32][D][EHMTXv2:032]: Constructor finish
[01:14:32][D][EHMTXv2:1063]: add_icon no.: 0 name: error frame_duration: 500 ms
[01:14:32][D][EHMTXv2:1002]: set_display
[01:14:32][D][EHMTXv2:1008]: set_clock
[01:14:32][I][EHMTXv2:983]: set_brightness 80 => 31.37 %
[01:14:32]Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.
[01:14:32]
[01:14:32]Core  1 register dump:
[01:14:32]PC      : 0x400d8a6a  PS      : 0x00060c30  A0      : 0x800e8b16  A1      : 0x3ffb2700  
[01:14:32]A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x42c80000  A5      : 0x00000008  
[01:14:32]A6      : 0x00000002  A7      : 0x000001f4  A8      : 0x00000200  A9      : 0x3ffb26e0  
[01:14:32]A10     : 0x00000050  A11     : 0x3f400d48  A12     : 0x000003d7  A13     : 0x3f400f64  
[01:14:32]A14     : 0x00000050  A15     : 0x3ffb4efc  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
[01:14:32]EXCVADDR: 0x00000218  LBEG    : 0x4008ab2d  LEND    : 0x4008ab3d  LCOUNT  : 0xfffffff1  
[01:14:32]
[01:14:32]
[01:14:32]Backtrace:0x400d8a67:0x3ffb27000x400e8b13:0x3ffb2740 0x400ed46a:0x3ffb2820 
[01:14:32]
[01:14:32]
[01:14:32]
[01:14:32]
[01:14:32]ELF file SHA256: 0000000000000000
[01:14:32]
[01:14:32]Rebooting...
[01:14:32]ets Jul 29 2019 12:21:46
[01:14:32]
[01:14:32]rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
[01:14:32]configsip: 0, SPIWP:0xee
[01:14:32]clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
[01:14:32]mode:DIO, clock div:2
[01:14:32]load:0x3fff0018,len:4
[01:14:32]load:0x3fff001c,len:1044
[01:14:32]load:0x40078000,len:8896
[01:14:32]load:0x40080400,len:5828
[01:14:32]entry 0x400806ac
[01:14:33][I][logger:262]: Log initialized
[01:14:33][C][ota:469]: There have been 8 suspected unsuccessful boot attempts.
[01:14:33][D][esp32.preferences:114]: Saving 1 preferences to flash...
[01:14:33][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[01:14:33][D][EHMTXv2:007]: Constructor start
[01:14:33][D][EHMTXv2:032]: Constructor finish
[01:14:33][D][EHMTXv2:1063]: add_icon no.: 0 name: error frame_duration: 500 ms
[01:14:33][D][EHMTXv2:1002]: set_display
[01:14:33][D][EHMTXv2:1008]: set_clock
[01:14:33][I][EHMTXv2:983]: set_brightness 80 => 31.37 %
[01:14:33]Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.
[01:14:33]
[01:14:33]Core  1 register dump:
[01:14:33]PC      : 0x400d8a6a  PS      : 0x00060c30  A0      : 0x800e8b16  A1      : 0x3ffb2700  
[01:14:33]A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x42c80000  A5      : 0x00000008  
[01:14:33]A6      : 0x00000002  A7      : 0x000001f4  A8      : 0x00000200  A9      : 0x3ffb26e0  
[01:14:33]A10     : 0x00000050  A11     : 0x3f400d48  A12     : 0x000003d7  A13     : 0x3f400f64  
[01:14:33]A14     : 0x00000050  A15     : 0x3ffb4efc  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
[01:14:33]EXCVADDR: 0x00000218  LBEG    : 0x4008ab2d  LEND    : 0x4008ab3d  LCOUNT  : 0xfffffff1  
[01:14:33]
[01:14:33]
[01:14:33]Backtrace:0x400d8a67:0x3ffb27000x400e8b13:0x3ffb2740 0x400ed46a:0x3ffb2820
...

Services calls

(optional) The YAML of your service calls

[FEATURE REQUEST] A screen with an icon and data displayed on it.

Feature Request

Describe the solution / feature you'd like

I've already displayed the concept in another Issue, but I'll move it here.

Add a family of screens that could display some limited data like day of the week, day of the month, on an icon that works as a carpet pad.

For example:

  • icon_time - display: icon and time, like weather and time
  • icon_time_data - display: icon and time, like calendar icon, day or weekday on icon and time
  • icon_date - display: icon and date, like weather and time
  • icon_date_data - display: icon and date, like calendar icon, day or weekday on icon and time

Generate a window identifier for each screen, then you can have identical sets displaying different information, like:

  • weather - time
  • day - time
  • weekday - data
  • weather - temperature

Also add the ability to specify a starting set of screens), e.g. icon_time with day icon_date_with_weekday`

Additional context

Сoncept:
#85 (comment)

Hold screen doesn't respect parameter

Bug report

Describe the bug

hold_screen adds the default hold_time to the next action and then changes that default. Instead, I'd expect it to set the next_action_time to this->clock->now().timestamp + time.

Current implementation:

void EHMTX::hold_screen(int time)
  {
    this->next_action_time += this->hold_time;
    this->hold_time = time;
  }

Suggested change:

void EHMTX::hold_screen(int time)
  {
    this->next_action_time = this->clock->now().timestamp + time;
  }

[BUG] Bootloop

Bug report

Describe the bug

I flashed a Ulanzi Pixel clock that used to run the v1 code with the latest YAML version of this v2 and now it enters a bootloop.

Additional information

  • used Hardware:
    • ESP32 (Ulanzi TC001 Pixel Clock)
    • EspHoMaTriXv2 version: 2023.7.0
    • ESPHome version: 2023.7.1

To Reproduce

Steps to reproduce the behavior:

Copy YAML example and files according to documentation and flash device.

Expected behavior

Clockface to display time and date like it used to in older versions

Configuration

Based on https://github.com/lubeda/EspHoMaTriXv2/blob/main/copy2esphome/ulanzi-easy.yaml (with fixed font name)

substitutions:
  devicename: ulanzi-tc001-d67068
  comment: "Ulanzi TC001 d6:70:68"
  board: esp32dev
  # Pin definition from https://github.com/aptonline/PixelIt_Ulanzi
  battery_pin: GPIO34
  buzzer_pin: GPIO15
  ldr_pin: GPIO35
  matrix_pin: GPIO32
  left_button_pin: GPIO26
  mid_button_pin: GPIO27
  right_button_pin: GPIO14
  scl_pin: GPIO22
  sda_pin: GPIO21

esp32:
  board: esp32dev

external_components:
  - source:
      type: git
      url: https://github.com/lubeda/EspHoMaTriXv2
      ref: main
    refresh: 60s 
    components: [ ehmtxv2 ]   

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  domain: !secret not_domain
  use_address: 192.168.70.67

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

ota:

logger:
  level: WARN

api:
  encryption:
    key: !secret api_encryption_key
  services:
    - service: tune
      variables:
        tune: string
      then:
        - rtttl.play:
            rtttl: !lambda 'return tune;'

web_server:

globals:
  # aab = auto-adjustable brightness
  - id: aab_enable
    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: aab_min
    type: int
    initial_value: '20'

i2c:
  sda: $sda_pin
  scl: $scl_pin
  scan: true
  id: i2cbus
    
time:
  - platform: homeassistant
    timezone: Europe/Brussels
    on_time_sync:
      then:
        ds1307.write_time:
  - platform: ds1307
    update_interval: never
    id: ehmtx_time

image:
   - file: images/1pixel.gif
     id: breaking20237

animation:
  - file: images/1pixel.gif
    id: breaking202371

output:
  - platform: ledc
    pin: $buzzer_pin
    id: rtttl_out

rtttl:
  output: rtttl_out

font:
  - file: fonts/mateine.ttf
    size: 16
    id: default_font
    glyphs:  |
      !?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/

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: 
    update_interval: 16ms
    auto_clear_enabled: true
    lambda: |-
      id(rgb8x32)->tick();
      id(rgb8x32)->draw();
      
ehmtxv2:
  id: rgb8x32
  icons2html: true
  matrix_component: ehmtx_display
  time_component: ehmtx_time
  time_format: "%H:%M"
  date_format: "%d.%m."
  show_seconds: false
  default_font_id: default_font
  special_font_id: default_font 
  boot_logo: "[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,63519,63519,63519,63519,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,63519,0,0,0,0,2016,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,63488,0,63488,0,0,0,63519,0,0,0,0,2016,2016,0,0,0,65514,0,65514,0,0,0,31,0,0,0,64512,0,0,64512,0,63488,63488,0,63488,63488,0,0,63519,63519,63519,0,0,2016,0,2016,0,65514,0,65514,0,65514,0,31,31,31,0,0,0,64512,64512,0,0,63488,63488,63488,63488,63488,0,0,63519,0,0,0,0,2016,0,2016,0,65514,0,65514,0,65514,0,0,31,0,0,0,0,64512,64512,0,0,0,63488,63488,63488,0,0,0,63519,63519,63519,63519,0,2016,0,2016,0,65514,0,65514,0,65514,0,0,0,31,31,0,64512,0,0,64512,0,0,0,63488,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]"
  icons: 
    - id: error
      lameid: 40530
    - id: home_assistant
      lameid: 47693
    - id: temperature
      lameid: 2056
    - id: lightbulb
      lameid: 1762
    - id: music
      lameid: 45625
    - id: phone
      lameid: 1232
    - id: car
      lameid: 2819
    - id: sleep8x32
      url: https://user-images.githubusercontent.com/16407309/224850723-634c9b2d-55d9-44f2-9f93-765c0485b090.gif 
  on_next_screen:
    - homeassistant.event:
        event: esphome.new_screen
        data_template:
          iconname: !lambda "return icon.c_str();"
          text: !lambda "return text.c_str();"

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: "$devicename Light"
    restore_mode: ALWAYS_OFF
  
binary_sensor:
  - platform: status
    name: "$devicename Status"
  - platform: gpio
    pin:
      number: $left_button_pin
      inverted: true
    name: "Left button"
  - platform: gpio
    pin: 
      inverted: true
      number: $mid_button_pin
      mode: INPUT_PULLUP
    name: "Middle button"
  - platform: gpio
    pin: 
      number: $right_button_pin
      inverted: true
    name: "Right button"

sensor:
  - platform: sht3xd
    temperature:
      name: "$devicename Temperature"
    humidity:
      name: "$devicename Relative Humidity"
    update_interval: 60s
  - platform: adc
    pin: $battery_pin
    name: "$devicename Battery"
    id: battery_voltage
    update_interval: 10s
    device_class: battery
    accuracy_decimals: 0
    attenuation: auto
    filters:
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15
          send_first_at: 1
      - multiply: 1.6
      - lambda: |-
          auto r = ((x - 3) / 0.69 * 100.00);
          if (r >= 100) return 100;
          if (r > 0) return r;
          if (r <= 0) return 1;
          return 0;
    unit_of_measurement: '%'
  - platform: adc
    id: light_sensor
    name: "$devicename Illuminance"
    pin: $ldr_pin
    update_interval: 10s
    attenuation: auto
    unit_of_measurement: lx
    device_class: illuminance
    accuracy_decimals: 0
    filters:
      - lambda: |-
          return (x / 10000.0) * 2000000.0 - 15 ;
    on_value:
      then:
        - lambda: |-
            if ( id(aab_enable) ) {
              int n = x / 4 + id(aab_add); // new_value
              if (n > id(aab_max)) n = id(aab_max);
              if (n < id(aab_min)) n = id(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);
            }

switch:
  - platform: template
    name: "Auto-Adjust Brightness"
    id: switch_autobrightness
    icon: mdi:brightness-auto
    restore_mode: RESTORE_DEFAULT_ON
    lambda: |-
      if (id(aab_enable)) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      lambda: |-
        id(aab_enable) = true;
    turn_off_action:
      lambda: |-
        id(aab_enable) = false;

Screenshots

image

Logs

fbF�acB!�B	a�aB�B�R�!!)a
cc��c7�Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
[E][ota:476]: Boot loop detected. Proceeding to safe mode.
[W][wifi:609]: WiFi Unknown connection status 0
[W][wifi:552]: Incomplete connection.
[W][wifi_esp32:504]: Event: Disconnected ssid='***' bssid=[redacted] reason='Association Leave'
[W][wifi_esp32:504]: Event: Disconnected ssid='***' bssid=[redacted] reason='Association Leave'
[W][wifi:609]: WiFi Unknown connection status 0
[W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 0 restarts
[W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 0 restarts
[E][ota:481]: No OTA attempt made, restarting.
[W][wifi_esp32:504]: Event: Disconnected ssid='***' bssid=[redacted] reason='Association Leave'
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060830  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400da44c  PS      : 0x00060a30  A0      : 0x800efa13  A1      : 0x3ffb26d0  
A2      : 0xffffffff  A3      : 0x437f0000  A4      : 0x00000020  A5      : 0x00000008  
A6      : 0x00000010  A7      : 0x00000082  A8      : 0x00000200  A9      : 0x3ffb26b0  
A10     : 0x00000050  A11     : 0x437f0000  A12     : 0x3ffb44d9  A13     : 0x3ffb44d0  
A14     : 0x00000010  A15     : 0x00000003  SAR     : 0x00000006  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000218  LBEG    : 0x40089e98  LEND    : 0x40089eae  LCOUNT  : 0xffffffff  


Backtrace:0x400da449:0x3ffb26d00x400efa10:0x3ffb26f0 0x400fdfce:0x3ffb2820 




ELF file SHA256: 0000000000000000

Rebooting...
[E][ota:476]: Boot loop detected. Proceeding to safe mode.
[W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 0 restarts
[W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 0 restarts

Services calls

(optional) The YAML of your service calls

Calling skip_screen repeatedly brings back deleted screens

Bug report

Calling skip_screen repeatedly brings back deleted screens

Describe the bug

By adding id(rgb8x32)->skip_screen(); to the on_press of the right button, I can call it in rapid succession.
It looks like doing it more than once before there is an automatic screen change makes it pick up broken/deleted screens.

[FEATURE REQUEST] Add transparency to Icons

Feature Request

Describe the solution / feature you'd like

Add transparency to Icons.
At higher brightness, the black background in the icons starts to appear as a gray background (screenshot below).
Is it possible to make the black background transparent (always black).
Then the icons will look more harmoniously on the matrix at any brightness.

Judging by the documentation and source code ESPHome supports icons with transparency, even in the RGB565 icon type used.
https://github.com/esphome/esphome/blob/dev/esphome/components/image/__init__.py#L321-L325

0x0020 as I understand it is RGB - [0,0,32], i.e. by enabling transparency we should get completely black color for all colors below [0,0,32].

Additional context

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.