• 0 Posts
  • 27 Comments
Joined 1 year ago
cake
Cake day: July 7th, 2023

help-circle




  • I’m trying to word this kindly yet directly, but the whole chain of additions you’ve done is messed up.

    If you just want working code then try the examples in this post but note that you can edit template sensors in the GUI now so directly editing the config file isn’t needed. https://community.home-assistant.io/t/trying-to-show-how-many-lights-are-on/527089/12

    For an actual explanation of what’s going wrong with your code I’ll start with this bit, which will not work as written and when fixed doesn’t do what you currently are intending it to do.

    I highly suggest reading through this page of documentation while looking over this as it will clarify a lot better than I can.

    {{ (states.switch | rejectattr('attributes.light.lamp_left', 'defined') | selectattr('state', 'eq', 'on') | list | count) }}
    

    I’d like to work through this backwards:

    count is, as the name implies, counting. It’ll take an input and then spit out a number. In this case, it’s going to count the members of a list piped into it from…

    list takes an input object and converts it to a list. In this case it’s creating a list from the output of…

    selectattr() is a way to filter an input object based on some criteria. For this we’re filtering the input for only objects with an attribute named state whose value is equal to on. The result should be a group of entities that have a state listed as on. The input it’s filtering from is…

    rejectattr() is basically the same as selectattr(), except it removes based on the filtering criteria and outputs everything that didn’t match. This is where your code is failing, and it’s actually not even necessary for this single line to work. I’m assuming you saw example code that used attributes.entity_id and then you replaced the entity_id portion with your targeted entity. This is failing because the rejectattr() filter is looking for the name of what attribute to filter on and its state. This portion is actually doing absolutely nothing even if it’s working, as far as I can tell, because as originally written it would just remove any object with an entity_id named defined. That all said, it’s filtering input from…

    states.switch, which is a way to reference and get the state result of every entity in the switch domain. There’s a whole section in the HA documentation I linked about states and how to get them for templates that is very relevant to what you’re doing. In this case, unless your lights are set up as switches, you’d actually want to use states.light.

    The end result if you follow this advice will instead give you a single line that counts all lights currently turned on, so no need for adding them all together like your original code. If you only want to know the states of a specific group of your lights then see the forum link from the top of my post that shows how to manually write a group into the template, or alternatively create a helper group in the GUI and reference that.



  • phobiac@lemmy.worldtoScience Memes@mander.xyzBurning Up
    link
    fedilink
    English
    arrow-up
    1
    ·
    3 months ago

    You’re totally correct that Celsius is the more sensible scale with easier to replicate reference points (when using water). It was also invented almost 30 years after the Fahrenheit scale and with all the insights gained from that period of technological advancement. In fact in the modern day the Celsius degree size is defined in reference to the Boltzmann constant since Celsius is essentially the Kelvin scale with the numbers moved around.

    It also used 100 as the freezing point of water and 0 as the boiling point when originally proposed, which changed after Anders Celsius died because everyone knew that was a weird way to do it.


  • phobiac@lemmy.worldtoScience Memes@mander.xyzBurning Up
    link
    fedilink
    English
    arrow-up
    8
    ·
    3 months ago

    It makes no sense because that’s not what the 0 of the Fahrenheit scale is. The 0 point is the coldest an ammonium chloride brine mixture can be cooled to. The 90 point was an estimated average for human body temperature (it was adjusted up over time). These were chosen because the goal of the scale was to provide a way for people to have a defined temperature scale with a range and degree size that could be reliably reproduced without passing around standardized tools. 100 is really hot because human bodies were used as a reference for the high end, but the low end has nothing to do with the human body.