EspHoMaTriX version 2: An improved clock/status display

Today, I will start the beta phase of my new component. If you used the old version, you can use your old esphome YAML-files as reference, especially the icon part, but the API changed a lot and there are a lot of new features.

Screen sample:

New Features:

  • empty/blank screens
  • text only screen
  • text with rainbow colors
  • independent indicator/alarm
  • growing wiki with samples
  • easy mode (for Ulanzi TC001) with free blueprints
  • icon scaling

Hope you like it as much as the old version. Hope you sponsor me or give me a star on GitHub :star:.

This is a beta version.

Have fun.

12 Likes

Looks great. I tried to install it today but the contents of copy2esphome/ulanzi-easy.yaml have some syntax error and EspHome won’t let me install it.

I updated the ulanzi-easy.yaml try the new the one, if there are still errors please provide the log.

Thanks for this. I now have it up and running. I’m using Node-Red ( because that’s how I roll) to create and display a set of weather screens. I tend to use Node-Red for all my automations.

Nice, how do you “talk” to the esphome device? Can you share a flow or some hints on this?

I’m a simple guy so take a simple approach. I use icon screens so that I can create and delete easily. I have added the appropriate icons to my yaml file. The attached flows create a temperature screen and a wind screen which I update constantly. The wind screen has a little bit of complexity in that I combine the wind speed and direction into one screen using a function node.

Then I have some plant sensors to prompt me to water them. I use the same icon with a different name for each plant. For my orchids, I only water them if all are below 15% moisture.

Here’s my flows…

[{"id":"8e45e3537b0da5e0","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Temperature Screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t\"icon_name\":\"temperature\",\t\"text\": msg.payload,\t\"lifetime\":\"180\",\t\"screen_time\":\"5\",\t\"default_font\":\"True\",\t\"r\":\"42\",\t\"g\":\"255\",\t\"b\":\"42\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":960,"y":60,"wires":[[]]},{"id":"a6ccbeffae703728","type":"server-state-changed","z":"dce965ac579ff5fc","name":"","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.west_end_temp","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":60,"wires":[["8e45e3537b0da5e0"]]},{"id":"70619c31500f2225","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create WInd Screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t\"icon_name\":\"wind\",\t\"text\":msg.payload,\t\"lifetime\":\"180\",\t\"screen_time\":\"5\",\t\"default_font\":\"True\",\t\"r\":\"42\",\t\"g\":\"42\",\t\"b\":\"255\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":940,"y":160,"wires":[[]]},{"id":"912e2475cc1eefea","type":"server-state-changed","z":"dce965ac579ff5fc","name":"","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.west_end_wind_speed_kilometre","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"speed","valueType":"str"}],"x":230,"y":120,"wires":[["d22564c3514b47f2"]]},{"id":"8918784711c4a031","type":"server-state-changed","z":"dce965ac579ff5fc","name":"","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.west_end_wind_direction","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"direction","valueType":"str"}],"x":200,"y":180,"wires":[["d22564c3514b47f2"]]},{"id":"d22564c3514b47f2","type":"join","z":"dce965ac579ff5fc","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":" ","joinerType":"str","accumulate":true,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":570,"y":160,"wires":[["ae1fca3c74cd77f9"]]},{"id":"ae1fca3c74cd77f9","type":"function","z":"dce965ac579ff5fc","name":"function 1","func":"var wind_spd = msg.payload.speed;\nvar wind_dir = msg.payload.direction;\nvar answer = wind_spd + \" km/h - \" + wind_dir\nmsg.payload = answer\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":160,"wires":[["70619c31500f2225"]]},{"id":"d69b423e284c3223","type":"server-state-changed","z":"dce965ac579ff5fc","name":"","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.west_end_short_text_0","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"today","valueType":"str"}],"x":190,"y":240,"wires":[["61f903620c536aa9"]]},{"id":"77b0bcf9f31e1dce","type":"server-state-changed","z":"dce965ac579ff5fc","name":"","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.west_end_short_text_1","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"tomorrow","valueType":"str"}],"x":190,"y":300,"wires":[["7433c30f757106a8"]]},{"id":"bf9f183d58fa4b16","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Today's Forecast Screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t   \"icon_name\":\"today\",\t   \"text\": msg.payload,\t   \"lifetime\":\"770\",\t   \"screen_time\":\"8\",\t   \"default_font\":\"True\",\t   \"r\":\"200\",\t   \"g\":\"200\",\t   \"b\":\"200\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":240,"wires":[[]]},{"id":"61f903620c536aa9","type":"function","z":"dce965ac579ff5fc","name":"function 2","func":"\nvar forecast = msg.payload;\nvar output = \"Today - \" + forecast\nmsg.payload = forecast\n// msg.payload = output //uncomment this line if you want \"Today - \" before the forecast\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":240,"wires":[["bf9f183d58fa4b16"]]},{"id":"1f3fb49593ec2417","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Tomorrow's Forecast Screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t   \"icon_name\":\"tomorrow\",\t   \"text\": msg.payload,\t   \"lifetime\":\"770\",\t   \"screen_time\":\"8\",\t   \"default_font\":\"True\",\t   \"r\":\"200\",\t   \"g\":\"200\",\t   \"b\":\"200\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":980,"y":300,"wires":[[]]},{"id":"7433c30f757106a8","type":"function","z":"dce965ac579ff5fc","name":"function 3","func":"\nvar forecast = msg.payload;\nvar output = \"Tomorrow - \" + forecast\nmsg.payload = forecast\n// msg.payload = output // uncomment this line if you want \"Tomorrow - \" before the forecast\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":300,"wires":[["1f3fb49593ec2417"]]},{"id":"cd0168a57f247839","type":"server-state-changed","z":"dce965ac579ff5fc","name":"Inside Lily Moisture < 15 ","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.1_moisture","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"15","halt_if_type":"num","halt_if_compare":"lt","outputs":2,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"tomorrow","valueType":"str"}],"x":130,"y":400,"wires":[["e1b78ffe4628edb9"],["3027cc61d0d0264b"]]},{"id":"e1b78ffe4628edb9","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Water Inside Lily screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t\"icon_name\":\"insidelily\",\t\"text\": \"Water inside lily\",\t\"lifetime\":\"180\",\t\"screen_time\":\"5\",\t\"default_font\":\"True\",\t\"r\":\"42\",\t\"g\":\"255\",\t\"b\":\"42\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":360,"wires":[[]]},{"id":"3027cc61d0d0264b","type":"api-call-service","z":"dce965ac579ff5fc","name":"Delete Water Inside Lily screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_del_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\"icon_name\":\"insidelily\",\"mode\":\"5\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":420,"wires":[[]]},{"id":"e91b3fd158bcf92a","type":"server-state-changed","z":"dce965ac579ff5fc","name":"Fiddle leaf Moisture < 15 ","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.3_moisture","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"15","halt_if_type":"num","halt_if_compare":"lt","outputs":2,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"tomorrow","valueType":"str"}],"x":130,"y":520,"wires":[["2057a5cb6a5c321d"],["6ddcb174681ef590"]]},{"id":"2057a5cb6a5c321d","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Water Fiddle leaf fig screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t\"icon_name\":\"fiddleleaf\",\t\"text\": \"Water Fiddle Leaf Fig\",\t\"lifetime\":\"180\",\t\"screen_time\":\"5\",\t\"default_font\":\"True\",\t\"r\":\"42\",\t\"g\":\"255\",\t\"b\":\"42\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":980,"y":480,"wires":[[]]},{"id":"6ddcb174681ef590","type":"api-call-service","z":"dce965ac579ff5fc","name":"Delete Water Fiddle leaf fig screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_del_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\"icon_name\":\"fiddleleaf\",\"mode\":\"5\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":980,"y":540,"wires":[[]]},{"id":"a1373011503952c9","type":"server-state-changed","z":"dce965ac579ff5fc","name":"Outside lily Moisture < 15 ","server":"854ade0b.a1a0c","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.2_moisture","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"15","halt_if_type":"num","halt_if_compare":"lt","outputs":2,"output_only_on_state_change":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"tomorrow","valueType":"str"}],"x":130,"y":640,"wires":[["7a131e9749cfc1c3"],["d31817c58a027922"]]},{"id":"7a131e9749cfc1c3","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Water outside Lily screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t\"icon_name\":\"outsidelily\",\t\"text\": \"Water outside lily\",\t\"lifetime\":\"180\",\t\"screen_time\":\"5\",\t\"default_font\":\"True\",\t\"r\":\"42\",\t\"g\":\"255\",\t\"b\":\"42\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":600,"wires":[[]]},{"id":"d31817c58a027922","type":"api-call-service","z":"dce965ac579ff5fc","name":"Delete Water Inside Lily screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_del_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\"icon_name\":\"outsidelily\",\"mode\":\"5\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":660,"wires":[[]]},{"id":"7f30cbc6b3b34afe","type":"trigger-state","z":"dce965ac579ff5fc","name":"All orchids < 15","server":"854ade0b.a1a0c","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sensor.4_moisture","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"<","comparatorValueDatatype":"num","comparatorValue":"15"},{"targetType":"entity_id","targetValue":"sensor.5_moisture","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"<","comparatorValueDatatype":"num","comparatorValue":"15"},{"targetType":"entity_id","targetValue":"sensor.5_moisture","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"<","comparatorValueDatatype":"num","comparatorValue":"15"}],"inputs":0,"outputs":2,"customoutputs":[],"outputinitially":true,"state_type":"num","enableInput":false,"x":100,"y":740,"wires":[["700dd8c0bb7f64db"],["5e17807bad1744f0"]]},{"id":"700dd8c0bb7f64db","type":"api-call-service","z":"dce965ac579ff5fc","name":"Create Water Orchid screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_icon_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\t\"icon_name\":\"whiteorchid\",\t\"text\": \"Water Orchids\",\t\"lifetime\":\"180\",\t\"screen_time\":\"5\",\t\"default_font\":\"True\",\t\"r\":\"42\",\t\"g\":\"255\",\t\"b\":\"42\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":960,"y":720,"wires":[[]]},{"id":"5e17807bad1744f0","type":"api-call-service","z":"dce965ac579ff5fc","name":"Delete Water Orchids screen","server":"854ade0b.a1a0c","version":5,"debugenabled":false,"domain":"esphome","service":"ulanzi_del_screen","areaId":[],"deviceId":[],"entityId":[],"data":"{\"icon_name\":\"whiteorchid\",\"mode\":\"5\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":960,"y":780,"wires":[[]]},{"id":"854ade0b.a1a0c","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Nice, I thought you connect directly from node-red to esphome, but your way is now clear to me.

@lubeda thanks for the quick fix of service set_clock_color, it’s work now as expected !
my next mission : find a spare esp32 and a i2s mic and connect all together

Hi, be careful, INMP441 does not work with esphome! You have to choose, e.g. PDM MEMS Microphone Unit (SPM1423) | m5stack-store
which works for me. See here: RGB matrix with voice assist #esphome - YouTube

Hello @lubeda , first of all thank you for the great work you have done here. It really gives me a lot of possibilities with my little Ulanzi watch. Many thanks for that!

But as it is with such messages, they often come with a request. So in this case too :wink:

I would like to see a feature request that the “set_*_color” functions in Home Assistant can be passed not only direct INT values for R, G & B, but also entities that return INT values.

Background:
I would like the colour of my clock to follow the colour temperature of my Adaptive Lighning integration and thus the rest of the lights in the house.
I have extracted the R, G & B values from the Adaptive Lighning Switch as a template sensor, which also works wonderfully.

template:
  - sensor:
      - name: "adaptive_lightning_r_value"
        unique_id: "69f34e4e-0bed-4d66-b9a1-9ca6993d05b0"
        state: >-
          {{ state_attr("switch.adaptive_lighting_adaptives_licht", "rgb_color")[0] | int }}
      - name: "adaptive_lightning_g_value"
        unique_id: "19291149-e433-4dba-bb36-12fe3569285d"
        state: >-
          {{ state_attr("switch.adaptive_lighting_adaptives_licht", "rgb_color")[1] | int }}
      - name: "adaptive_lightning_b_value"
        unique_id: "17b97b95-c174-4066-a43d-f02f91d9adf5"
        state: >-
          {{ state_attr("switch.adaptive_lighting_adaptives_licht", "rgb_color")[2] | int }}

But unfortunately I cannot pass the resulting sensors for the R, G & B values as tempalte either in the automation GUI or in the .yaml editor.

- id: '1685881339390'
  alias: Ulanzi Adpative lightning
  description: ''
  trigger:
  - platform: state
    entity_id:
    - sensor.adaptive_lighting_adaptives_licht_rgb_color
  condition: []
  action:
  - service: esphome.ulanzi_led_matrix_set_clock_color
    data:
      r: >-
        {{ states("sensor.adaptive_lightning_r_value" }}
      g: >-
        {{ states("sensor.adaptive_lightning_g_value" }}
      b: >-
        {{ states("sensor.adaptive_lightning_b_value" }}
  mode: single
Logger: homeassistant.components.automation
Source: components/automation/config.py:207
Integration: Automatisierung (documentation, issues)
First occurred: 14:58:55 (1 occurrences)
Last logged: 14:58:55

Automation with alias 'Ulanzi Adpative lightning' could not be validated and has been disabled: template value should be a string for dictionary value @ data['action'][0]['data']. Got {'r': '{{ states("sensor.adaptive_lightning_r_value" }}', 'g': '{{ states("sensor.adaptive_lightning_g_value" }}', 'b': '{{ states("sensor.adaptive_lightning_b_value" }}'}

It would be great if you could somehow make this possible :slight_smile:Vorformatierter Text``Vorformatierter Text

I think this is more a template problem than a problem of my component!

Does this work?

- id: '1685881339390'
  alias: Ulanzi Adpative lightning
  description: ''
  trigger:
  - platform: state
    entity_id:
    - sensor.adaptive_lighting_adaptives_licht_rgb_color
  condition: []
  action:
  - service: esphome.ulanzi_led_matrix_set_clock_color
    data:
      r: >-
        {{ state_attr("switch.adaptive_lighting_adaptives_licht", "rgb_color")[0] | int }}
      g: >-
        {{ state_attr("switch.adaptive_lighting_adaptives_licht", "rgb_color")[1] | int }}
      b: >-
        {{ state_attr("switch.adaptive_lighting_adaptives_licht", "rgb_color")[2] | int }}
  mode: single

You are absolutely right! Your approach worked right away.
Sorry to bother you.

I am using the ulanzi-easy file but the font is not fully filling the display like in v1.
how can I adjust the size?
And when I use a diffrent font like Calcium.ttf then it is cut off below

Take a look at GitHub - darkpoet78/MatrixClockFonts: Fonts For Use with LED Matrix Clocks there are two kinds of fonts, one with the height of 6 pixels suited for the time display with the day of week indicator. The other fonts are 8 pixels high. These are well documented.

With TTF-fonts like calcium you have to find the correct parameter for the font definition, especially the size parameter and in my component with the x offset default_font_yoffset: 7
This depends heavily on your font.

Hi! How create custom boot_logo so that it’s centered in the middle at startup?

This is not that easy, but worth it, see here: GitHub - lubeda/EspHoMaTriXv2: A simple DIY status display with a 8x32 RGB LED matrix, implemented with esphome.io and Home Assistant.

Thanks, missed that link. But I thought I could replace the starting rectangle with my image, but it turns out the rectangle is displayed anyway. Is there any way to remove it? Replace it?

And another question, how can you display an instant message with an icon? For example, the Air Alarm is announced, I need to instantly display the message and that it was shown for example 30 seconds and disappeared, if at this time came to cancel the Air Alarm (very rare but happens), then a new call would replace this information with a new text and icon and it was shown for example the same 30 seconds.
I tried via force_screen service but it doesn’t display instantly.
Also I can’t specify a 30 sec lifetime in icon_screen service, because there are minutes there.

Is it possible to add alert_screen or info_screen, with parameters ("icon_name", "text", "screen_time", "default_font", "r", "g", "b") so that when this service is called, this message is shown instantly and until the screen_time expires it does not switch anywhere, as soon as the screen_time expires this window is no longer shown.

This will be handy for displaying instant statuses, security triggered, air alarm, smoke alarm, front door open, etc.

take a look at the manual GitHub - lubeda/EspHoMaTriXv2: A simple DIY status display with a 8x32 RGB LED matrix, implemented with esphome.io and Home Assistant.

That’s exactly what I’m doing now, but the screen doesn’t show instantly, it waits for the current one to finish showing then switches to the right one. Also there is a problem I can not display a warning for 15sec for example, I need to specify lifetime: 1 screen_time: 15 but it can display 2 times the message, and this is not necessary. To put a delay and then delete the screen, also not a solution, if another message comes, then after the delay it can delete the desired message. A separate function would be a great solution.