lubeda / esphomatrixv2 Goto Github PK
View Code? Open in Web Editor NEWA simple DIY status display with a 8x32 RGB LED matrix, implemented with esphome.io and Home Assistant.
License: MIT License
A simple DIY status display with a 8x32 RGB LED matrix, implemented with esphome.io and Home Assistant.
License: MIT License
when calling service set_clock_color from ha clock color don't change on display
fire a esphomatrix_set_clock_color with 3 values from homeassistant developer tools service
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
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();
[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
service: esphome.esphomatrix_set_clock_color
data:
r: 255
g: 127
b: 0
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
Add a description of the bug. Detail the expected behavior in contrast with the behavior you're observing.
Just try to compile the ulanzi-easy.yaml
no error message :)
plain unchanged ulanzi-easy.yaml
If applicable, add screenshots to help explain your problem.
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
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
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.
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
Screen should be removed from queue.
---
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: 0°
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();"
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
If applicable, add screenshots to help explain your problem.
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
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
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
Please return back the function that support not showing the date card as defualt (show_date: false).
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:
lifetime
less than a minute, so you'll have to wait and delete it, if you want to show a message, like 15 seconds)lifetime
less than a minute, so you'll have to wait and delete it, if you want to show a message, like 15 seconds)Hi,
I would like to make a round display and for that it would be great to have to the function to let screen scroll all the time.
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.
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.
Steps to reproduce the behavior:
A clear and concise description of what you expected to happen.
(optional) The YAML you used in epshome without any password
If applicable, add screenshots to help explain your problem.
(optional) Add relevant logs which could help tackle the problem.
(optional) The YAML of your service calls
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
Upload YAML-files in folder and restart Home Assistant
Thanks!
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?
Steps to reproduce the behavior:
Output the time in %H:%M:%S
format with the font MatrixClock-Chunky6.bdf
.
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.
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
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.
Steps to reproduce the behavior:
All text should be readable
# ...
font:
- file: fonts/mateine.ttf
size: 16
id: default_font
glyphs: |
!?"%()+*=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnÖÄÜöäüopqrstuvwxyz@<>ߧ€/
# ...
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.
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);
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).
Steps to reproduce the behavior:
Try to install current ulanzi-easy.yaml Config with ESPHome 2023.8.2
ESPHome sould install without any error
# 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: 0°
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"
Error OTA updating & Error compiling with no more info at the log
Attempted to install on new Ulanzi clock today.
Ulanzi TC001
Followed documentation attempting to install ulanzi-easy.yaml onto TC001.
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
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.
ESP8266
EspHoMaTriXv2 version: main / develop (both versions have this problem)
esphome(dev)
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
Add any other context about the problem here.
esphome no longer building ulanzi-easy
Steps to reproduce the behavior: compile on esphome 2023.7.0-dev
A clear and concise description of what you expected to happen.
(optional) The YAML you used in epshome without any password
If applicable, add screenshots to help explain your problem.
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 =========================
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:
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.
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?
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.
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?
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.
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
ESP32 or ESP8266 (tried both)
EspHoMaTriXv2 version: tried Develop and Main branches
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
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
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
Steps to reproduce the behavior:
Added sample code to YAML and corrected the indentations
A clear and concise description of what you expected to happen.
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);
/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);
^~~~~~~~~~~
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.
Is it possible to increase the number of icons to at least 100?
What are these limitations associated with?
Or maybe could add transferring icons from HA to EspHoMaTriXv2 when adding a new screen.
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 :)
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€$@<>/
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...
[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);
}
[on_empty_queue
] is an invalid option for [ehmtxv2]. Did you mean [allow_empty_screen]?
Steps to reproduce the behavior:
Add to config:
on_empty_queue:
then:
lambda: |-
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.
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!
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=?);
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.
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.
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.
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"
As an example of a screens, displaying the weather and time icons with the day of the week.
My clock screen only uses the default_font instead of the special_font.
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.
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°{|}~¡¢£¤¥¦§¨©ª«¬®¯±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
Thanks for this repo but the Blueprints I’ve tried all show me this error.
Steps to reproduce the behavior:
A clear and concise description of what you expected to happen.
(optional) The YAML you used in epshome without any password
If applicable, add screenshots to help explain your problem.
(optional) Add relevant logs which could help tackle the problem.
(optional) The YAML of your service calls
Unfortunately Home Assistant version 2023.09.0 came with changes relevant for EspHoMaTriXv2.
esphome.[device]_icon_screen is considered an unkown service.
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
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);
The flag scroll_small_text does not work correctly. Setting it to false small text still scrolls
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
Steps to reproduce the behavior:
Set scroll_small_text: false and add a screen with small text
A clear and concise description of what you expected to happen.
Small text will not scroll when set to false
(optional) The YAML you used in epshome without any password
If applicable, add screenshots to help explain your problem.
(optional) Add relevant logs which could help tackle the problem.
(optional) The YAML of your service calls
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.
Steps to reproduce the behavior:
A clear and concise description of what you expected to happen.
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();"
If applicable, add screenshots to help explain your problem.
...
[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
...
(optional) The YAML of your service calls
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:
Generate a window identifier for each screen, then you can have identical sets displaying different information, like:
Also add the ability to specify a starting set of screens), e.g. icon_time with day
icon_date_with_weekday`
Сoncept:
#85 (comment)
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
.
void EHMTX::hold_screen(int time)
{
this->next_action_time += this->hold_time;
this->hold_time = time;
}
void EHMTX::hold_screen(int time)
{
this->next_action_time = this->clock->now().timestamp + time;
}
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.
Steps to reproduce the behavior:
Copy YAML example and files according to documentation and flash device.
Clockface to display time and date like it used to in older versions
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: 0°
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;
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
(optional) The YAML of your service calls
Calling skip_screen repeatedly brings back deleted screens
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.
The clock_screen fn ignores r,g,b parameters and always shows the clock on white (but not the brightest)
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].
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.