Breaking changes and their impact == 25 million minutes a year

step up

Groups:[alarm_control_panel (1), alert (3), automation (203), binary_sensor (60), calendar (7), camera (14), climate (1), device_tracker (258), fan (5), group (14), input_boolean (56), input_label (2), input_number (33), input_select (13), input_text (6), light (52), media_player (8), persistent_notification (1), scene (2), script (127), sensor (228), sun (1), switch (63), vacuum (1), watchdog (2), weather (2), and zone (27)]

on one of 3 servers running LOL

I agree. I don’t care about the “front end” interface either. That’s the interesting thing about these projects. Everyone can focus on their own areas of interest. And you’re right, the “automation” part is key to me as well. A “smart” home should get “smarter” on its own. Application of deterministic /stochastic models and AI “learning” will eventually allow Home Assistant to function well as a “smart” assistant. Best of luck to you.

1 Like

Yes, but his is only for a specific thing you use it for, which only uses a fragment of the available options and features of HA, right? I assume your “main” HA instance doesn’t run such an old version?

Hmmm !
With a name like Burningstone I expect to see something burning ! :fire: :firecracker: :minidisc: :candle: :bulb: :diya_lamp:

What’s the new avatar ?

An award for building a high tech bird feeder ? :rofl:

1 Like

As a contributor and a PR reviewer, I can guarantee that my fellows and I do not set out with the mindset of, “Who cares, I’ll just make a breaking change.” Every time we submit PRs, we give careful thought to the experience, weigh the pros/cons, etc.

Let’s use an example of mine from 0.105.0: https://github.com/home-assistant/home-assistant/pull/30567

In this case, I learned more about SimpliSafe’s undocumented cloud API than I knew before. Based on this new knowledge, I realized that existing functionality wouldn’t work in the way I’d thought. To fix it, I had to make a drastic change (replace several individual services with a single one). I hate that red Breaking Change label, but I applied it, knowing that the ultimate experience would be better.

Every breaking change is like that. We would love to avoid them, but truthfully, there are so many factors (speed of development, inclusion of integrations that rely on undocumented APIs, etc.) that make it difficult to envision a future where they are limited more than they already are.

As an aside, I can say that of the dozens of HASS installations I’ve performed in our home, quite a few had breaking changes that impacted integrations we use. Every single time, a careful, slow reading of the release notes has enabled me to prep for them before deploying a new HASS version. Additionally, I’ve taken the time to put my entire config in a GitHub repo (with an associated CI/CD process) that allows me to check things before I roll them out, roll them back as needed, etc.

I certainly understand and respect that my circumstances may be unique (and that not everyone can have a similar experience); I also understand and respect that I may put more effort into my system than others have time or patience for. However, I must admit I’m shocked when I continually see so many loud messages about how badly someone’s installation was ruined because of breaking changes. I’ve never experienced that and I’ve been a HASS user for a long time.

Tell us how we can help. Give us tactical ideas, rather than well-intentioned-but-ultimately-not-helpful admonitions about “needing a better user experience.” We’ll tell you if solutions aren’t feasible, but we certainly won’t chastise you for offering them. :pray:

16 Likes

You’re laggin behind man :stuck_out_tongue:

image

I knew that you will ask :rofl:

:rofl:
It’s a record player that my brother built for me

1 Like

My Borg friend, I’m happy to lag behind in ALL areas, (I like others doing the difficult stuff and me gathering the fruits of their labour’s :tangerine: :mango: :tomato: :cherries: :green_apple: :pineapple: :pear: :avocado: :grapes: :rofl: )

Though you are kinda running low of everything else :rofl: (I guess you must use switches for lights looking at those numbers too)

But you need to tell us what version you run to give an idea of your confidence versus complexity. - I think I’ll go back and change the image to give an overall look at my hub … Hmmmm !

@Burningstone, in that case you’ll have to change your name to Turningstone :rofl:

3 Likes

That’d be correct :wink:

I plan to add about 20+ more switches over the next 12 months :slight_smile:

I think @Mariusthvdb has y’all beat on total numbers.

1 Like

Marius has me beat or more than just numbers :rofl:

haha, well if you insist:

see now I forgot to take out the deprecated history_graphs and weblinks. few entities less…and media_player count is incorrect, must check that :wink:

edit

well, what do you know, this little bit of jest helped me find a stupid error in the config:

      count_media_players:
        entity_id: sensor.date
        value_template: >
           {{ states.input_media_player | count }}

duh…

2 Likes

Ha Ha Ha … I have to ‘massage’ the numbers a bit too. My fibaro lights, report 2 for 1 (there’s a second virtual switch in each of which I’m only using 2) so my count = total/2 +2 = display value
I had to use one of petro’s templates to get ALL my light entities to find why the hell my number was so wrong :crazy_face:

AND your laziness (lack of pruning) is central to the core of this thread in that ‘something’ had to force you to look at your config. Double Kudos :+1: :+1:

Device Trackers : - Are you tracking everybody in your Village ? :scream_cat: Uncle Marius is watching YOU !

Haha, yep. people are warned :wink:

guess it is just the result of IOT. And believe it or not, did a clean install with the new device_tracker architecture, integrations not using known_devices any more… These just popped up, using Nmap device_tracker.

on my lights count, I should use

{{ expand('group.all_lights_only')|count }}

which group I maintained already before the demise of groups.all…

I guess the ultimate solution would be that the config would automatically be updated to allow for the changes, how that would work would be the tricky bit.

That actually happens with the UI integrations. It doesn’t happen with yaml. The point i’ve been trying to make is that these changes are going into affect. But it still won’t mitigate all breaking changes. At some point, people are going to have to make changes to their configuration. The easiest way to see these change before they go into affect is to perform the following search on github… it’s pretty simple.

Here’s a link to all up coming breaking changes.

Currently there are 7. Is it really asking for a lot to weigh in on the breaking changes?

And you’d better get that header changed before the naming police get you.


How about posting an example of your button config too. That looks a lot better than my glance card.
image
And no, I’m neither ashamed or proud of my numbers :rofl: :rofl: :rofl:

bingo nr 3 this afternoon, you guys are waking me up here today…

here you go:

type: vertical-stack
cards:

  - type: 'custom:button-card'
    name: Hassio counters
    template: button_default_title

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body
        entity: sensor.entities_uun
        state:
          - operator: template
            value: >
              [[[
              return entity.state == 0;
              ]]]
            styles:
              state:
                - color: 'green'

#              card:
#                - color: 'green'
#                - background: '#F0C209'
              icon:
                - color: 'green'
          - operator: default
            styles:
#              card:
#                - color: 'red'
#                - background: '#555B65'
              state:
                - color: 'red'

              icon:
                - color: 'red'

      - type: custom:button-card
        color_type: blank-card

      - type: custom:button-card
        color_type: blank-card

      - type: custom:button-card
        color_type: blank-card

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body
        entity: sensor.overview_entities
        styles:
          state:
            - color: green

      - type: custom:button-card
        template: button_body
        entity: sensor.overview_components
        styles:
          state:
            - color: green

      - type: custom:button-card
        template: button_body
        entity: sensor.overview_domains
#        name: Domains
#        icon: mdi:domain
        styles:
          state:
            - color: green

      - type: custom:button-card
        template: button_body
        entity: sensor.ha_domains
#        name: Domains
#        icon: mdi:domain
        styles:
          state:
            - color: green

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_alerts
#        name: Alerts

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_automations
#        name: Automations

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_binary_sensors
#        name: Binary sensors

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_cameras
#        name: Cameras

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_scripts
#        name: Scripts

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_device_trackers
#        name: Device trackers

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_groups
#        name: Groups

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_input_booleans
#        name: Input booleans

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_input_datetimes
#        name: Input Datetimes

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_input_numbers
#        name: Input numbers

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_input_selects
#        name: >
#          [[[
#          function capitalizeFirstLetter(string) {
#          return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
#          }
#          var id = entity.entity_id.split('.')[1].slice(6).replace('_',' ');
#          return capitalizeFirstLetter(id);
#          ]]]

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_input_texts
#        name: Input texts

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_lights
#        name: Lights

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_media_players
#        name: Media players

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_proximities
#        name: Proximities

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_scenes
#        name: Scenes

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_scripts
#        name: Scripts

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_sensors
#        name: Sensors

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_switches
#        name: Switches
#
      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_timers
#        name: Timers

  - type: horizontal-stack
    cards:

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_variables
#        name: Variables

      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_weathers
#        name: Weathers


      - type: custom:button-card
        template: button_body_no_action
        entity: sensor.count_zones
#        name: Zones

      - type: custom:button-card
        color_type: blank-card

  - type: custom:button-card
    template: vertical-filler

and the button templates:

button_body:
  color: auto
  size: 30%
  aspect_ratio: 1/1
  show_state: true
  show_label: true
  tap_action:
    action: more-info
    haptic: light
  hold_action:
    action: more-info
    haptic: success
  styles:
    icon:
      - color: grey
    lock:
      - color: red
    card:
      - color: 'var(--primary-color)'
      - background-color: 'var(--paper-card-background-color)'
      - padding-left: 5px
    name:
      - text-overflow: unset
      - white-space: unset
      - word-break: break-word
      - text-align: start
      - justify-self: start
      - font-weight: bold
      - font-family: Helvetica
      - font-size: 13px
    label:
      - text-align: start
      - font-size: 11px
      - font-family: Helvetica
      - justify-self: start
    state:
      - text-align: start
      - font-size: 11px
      - font-family: Helvetica
      - justify-self: start
      - text-transform: capitalize
      - font-weight: bold
    grid:
      - grid-template-areas: '"i" "n" "s" "l"'
      - grid-template-columns: 1fr
      - grid-template-rows: 1fr min-content min-content
    img_cell:
      - justify-content: start
      - align-items: start

button_body_no_action:
  color: auto
  size: 30%
  aspect_ratio: 1/1
  show_state: true
  show_label: true
  tap_action:
    action: none
  hold_action:
    action: none
  name: >
    [[[
    function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
    }
    var id = entity.entity_id.split('count_')[1].replace('_', ' ');
    return capitalizeFirstLetter(id);
    ]]]
  styles:
    icon:
      - color: 'var(--primary-color)'
    lock:
      - color: red
    card:
      - color: 'var(--primary-color)'
      - background-color: 'var(--paper-card-background-color)'
      - padding-left: 5px
    name:
      - text-overflow: unset
      - white-space: unset
      - word-break: break-word
      - text-align: start
      - justify-self: start
      - font-weight: bold
      - font-family: Helvetica
      - font-size: 13px
    label:
      - text-align: start
      - font-size: 11px
      - font-family: Helvetica
      - justify-self: start
    state:
      - text-align: start
      - font-size: 11px
      - font-family: Helvetica
      - justify-self: start
      - text-transform: capitalize
      - font-weight: bold
      - color: green
    grid:
      - grid-template-areas: '"i" "n" "s" "l"'
      - grid-template-columns: 1fr
      - grid-template-rows: 1fr min-content min-content
    img_cell:
      - justify-content: start
      - align-items: start

the latter could be simplified and compressed using a state or styles template probably, but this works for now.

new setup:

3 Likes

start using those unused entities already