Custom Header

Yup, just the quirks of using Jinja from yaml in Lovelace. Watch the indents. test_template renders exactly the same as any other template in Lovelace.

Also, why not drop the dict and use an array instead? That way you don’t need to map at all. Add ‘zero’ (or anything really, empty string works too) as the first item and then you can just use the hour as the array’s index:

Edited again to make it even shorter:

  {% set word = ['','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve'] %}
  {%- set index = now().strftime('%-I') | int %}mdi:clock-time-{{word[index]}}
  {{- '-outline' if states('sun.sun') != 'above_horizon' }}

ha, yes! was looking to do so, you beat me to it while I was still struggling and awaiting the restart… wow, thanks!

how come then CH (not the test template apparently) throws the error while the template editor parses it perfectly?
If this is a Lovelace quirk, how to report on that, without being told I am using a custom integration for which no support will be given. Surely this is a bug.
Also, the fact that the system needs a restart while a simple template issue in the CH config errors isnt as it should be? Seems I have bumped into 2 issues that need looking after/into.

all in all this is a noteworthy exercise with a nice outcome:
Schermafbeelding 2020-09-01 om 16.37.37

will see if I can fix it so it rounds to the next or previous hour, depending on the minutes being below or above 30

trying:

  {% set word = ['','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve'] %}
  {% set addition = 0 if now().strftime('%-M')|int <= 30 else 1 %}
  {%- set index = now().strftime('%-I')|int + addition %}mdi:clock-time-{{word[index]}}
  {{- '-outline' if states('sun.sun') != 'above_horizon' }}

Jinja isn’t really supported in Lovelace, so it’s not really a bug, it’s a quirk of an unsupported feature and if reported I imagine that’s exactly what they would say about the custom addon. Keep in mind that what this is doing is converting the config from yaml to a string (which can have quirks) and sending that to the backend to be rendered as jinja. If the backend doesn’t get what it expects, you’ll get an error (usually not very helpful ones either), but none of this is the fault of HA devs. It’s my fault for adding this into CH.

You shouldn’t need to restart to clear the error, editing the config and refreshing with ctrl+shift+r should do the trick. If it doesn’t just use the ?disable_ch trick after editing the config and reload Lovelace from the top right menu.

I got those errors too when using the bad Jinja, but only had to refresh the page after making the change.

as said, not so here. was 100% reproducible.
Didnt try your ?disable trick though, will do so next time this arises. Thanks for your support, much appreciated. Love CH!

1 Like

Quick tip if you’re going to round like that, add another ‘one’ as the last item in the array. That way if it’s 12 and it rounds up to 13 it will still be ‘one’. You could add logic to make index equal 1 if it is currently 13, but just adding ‘one’ to the end of the array seems cleaner.

  {% set word = [0,'one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','one'] %}
  {%- set hour = now().strftime('%-I')|int %}{% set minute = now().strftime('%-M')|int %}
  {%- set index = hour if minute <= 30 else hour + 1 %}mdi:clock-time-{{word[index]}}
  {{- '-outline' if states('sun.sun') != 'above_horizon' }}

Also, in the next release I think I’ll be adding logic for templates that fail. You’ll still get an error in the logs, but I’ll make CH disable itself when it happens so the default header is still available.

1 Like

cool!
(… if this has anything to do with my todays exercise, I am glad to have helped CH going forward …)

1 Like

saw that :wink:
any particular reason to change it from ''? Or is this just for cosmetic reasons, and can I safely leave my template like:

{% set word = ['skipthis','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','one'] %}

Yeah, that can literally be anything. It’s just taking up space in the array so that ‘one’ starts at 1 and not 0.

1 Like

cool, still working nicely, awaiting the 12(24)th hour of the template :wink:

ok, re-iteration on an earlier discussion we had, concerning CH on multiple dashboards.
Ive made my own shortcut menu bar, and have grown so accustomed to its ability to span all dashboards, Ive been trying to get my head around how the CH menu bar could do this. I cant seem to find that ability, though it really is an awesome feature.

Am I overlooking this option completely, or is it really not possible yet.
have a look what I am trying to say:

is my own shortcut menu bar, with buttons pointing to the various paths spanning my 3 dashboards. With some nifty templating, ive been able to even display depending on admin or not, and several modes or not. That is all possible too in CH of course.

Yet, the window.location.pathname used in my JS templates in the button card make the dashboard crossovers possible.
Would this be a feature available in CH too (now, or as a future addition)?

CH is way too feature bloated as it is. I’ve considered it, but adding tabs/buttons that don’t already exist in the default header isn’t something that I’d add.

by the above, you mean the tabs per dashboard right? By which the answer to the request for cross dashboard tabs has been given…

I understand what you’re saying, CH has a lot of magic options :wink: dont want to take away from that…

Exactly. There have been a few other feature requests for things that would interact with other dashboards, like using tabs in other dashboards for default tab, etc. Unfortunately, this causes more problems than it solves since each dashboard is it’s own Lovelace instance with it’s own config. This opens possibilities of endless loops of redirects and other fun bugs/unwanted behavior.

Just more trouble than it’s worth, especially since HA already has features like setting a default dashboard per device, admin only dashboards, the ability to hide dashboards from the sidebar, and I’m sure more will come with time.

The problem with many of HAs integrated solutions is that they just save the settings in the users browser, not in a users profile, so if I move bewteen browser, clear some local data on a tablet etc. the setting are lost.
They are also not very flexible. Say I want a special dashboard (with multiple tabs) for a certain user, no matter where that user is logging in from, ant the user should only have access to that dashboard (but to all the tabs inside it). And no other users should have access to it (except admin). Such a basic thing is just not feasible to set up today.
But that is just a rant, and not really constructive feedback for Custom Header (which is great for what it does, it just does not solve all problems). So sorry about that.

I agree and this might be a good feature request for HA itself, but it’s also a good idea for another custom project (just not this one).

It wouldn’t be difficult to create a custom “card” that would use JS templates (Jinja would be overkill) in order to redirect to any URL on certain conditions. I haven’t done too much research into this and it might already exist or be possible with a feature on another custom project.

The ultimate issue with things like this is there is the possibility of users accidentally creating conditions on two dashboards that would redirect from one, back to the other, and then continuously looping between the two. Could also create a scenario where one dashboard would be inaccessible as the redirect would always be active, so every time you try to visit it you get redirected away. So some sort of protection against such things would be needed. Whether that is storing variables in localStorage or otherwise.

Hi,
I’m sorry to ask what is probably a very noob question but I just haven’t been able to figure it out for myself.
I have seen indications that Custom Header may allow me greater control over my Lovelace UI, specifically that I might be able to control the height and width of cards.
This would allow a level of control that I haven’t been able to achieve by the use of vertical and horizontal stacks.
So, if anyone could help me out by giving any info that might help me get this ability in my UI, that would be so hugely appreciated.

My main reason is I want the same Lovelace UI to show differently depending on screen size of the device the user is using to view it.

No. That is not what Custom Header is for. You are looking for the layout-card.

And possibly browser-mod.

Ah, I made an error.
Definitely coming back to this to try and make a stylised header later.
Thank you for the assist in locating the right resources.
Sorry for the mis-post.

Hi, I wanted to change something and see that my CH settings are gone… what’s wrong?

image