2023.12: Welcome home!

You’ll have to provide more details. It’s working as expected on my end.

It had adapted to the long-standing convention for several years, up until this release when it appears that a tech bro chose to ‘disrupt the thermostat paradigm’. :thinking:

Here’s a video of what’s happening- https://youtu.be/87ecSI7cCOI?si=jRTCZwnQk-4xFuJO

If clearing your cache and refreshing the page does not work, create an issue and make sure to specify what browser you’re using to view HA.

I was really happy to see the CalDAV integration supporting ToDos/Tasks now. That has been one of the features I’ve been really hoping for.

I tried to use a a template in the due_datetime variable of the todo.add_item. However no matter what I tried, I only got an error.

The service call I tried looks something like this:

service: todo.add_item
target:
  entity_id: todo.chores
data:
  item: Fold the dried Laundry!
  description: Fold the dried Laundry!
  due_datetime: "{{ (now() + timedelta(hours=36)) }}"

However, even with something like due_datetime: "{{ (now() + timedelta(hours=36)).isoformat(timespec='seconds') }}", i.e. either returning the time as a datetime in the first example or as a str in the second, the service call fails, with the python-caldav package complaining:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/automation/__init__.py", line 655, in async_trigger
    await self.action_script.async_run(
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1578, in async_run
    return await asyncio.shield(run.async_run())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 420, in async_run
    await self._async_step(log_exceptions=False)
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 470, in _async_step
    self._handle_exception(
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 493, in _handle_exception
    raise exception
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 468, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 704, in _async_call_service_step
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 666, in _async_run_long_action
    return long_task.result()
           ^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2067, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2104, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 272, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 878, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 948, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/todo/__init__.py", line 455, in _async_add_todo_item
    await entity.async_create_todo_item(
  File "/usr/src/homeassistant/homeassistant/components/caldav/todo.py", line 147, in async_create_todo_item
    await self.hass.async_add_executor_job(
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/caldav/objects.py", line 765, in save_todo
    data=self._use_or_create_ics(ical, objtype="VTODO", **ical_data),
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/caldav/objects.py", line 733, in _use_or_create_ics
    return vcal.create_ical(objtype=objtype, **ical_data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/caldav/lib/vcal.py", line 184, in create_ical
    component.add(prop, props[prop])
  File "/usr/local/lib/python3.11/site-packages/icalendar/cal.py", line 194, in add
    value = self._encode(name, value, parameters, encode)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/icalendar/cal.py", line 145, in _encode
    obj = klass(value)
          ^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/icalendar/prop.py", line 312, in __init__
    raise ValueError('You must use datetime, date, timedelta, '
ValueError: You must use datetime, date, timedelta, time or tuple (for periods)

Am I doing something wrong after all?

Edit: As asked by @petro, I opened a bug report.

1 Like

Sounds like you found a bug, can you please write it up?

1 Like

My sensors stopped working after Home Assistant Core 2023.12.0 was installed.

I don’t understand what needs to be done to fix the problem.

Hopefully, someone can tell me what I’m doing wrong.

I can no longer get sensor updates for:
sensor.smart_electric_meter_consumption
sensor.smart_electric_meter_power
sensor.smart_electric_meter_production

Here is my configuration.yaml:

sensor:
  - platform: command_line
    unique_id: xcel_meter_power
    name: "Smart Electric Meter Power"
    #command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/1/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/1/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '([+-]?[0-9]+)'"
    #   value_template: "{{ float(value) | multiply(0.001) | round(3) if is_number(value) }}"
    #   value_template: "{{ value | multiply(0.001) | round(3)}}"
    # value_template: "{{ float(value) if is_number(value_json) }}"
    unit_of_measurement: "W"
    device_class: "power"
    scan_interval: 5
    command_timeout: 5

  - platform: command_line
    unique_id: xcel_meter_consumption
    name: "Smart Electric Meter Consumption"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/3/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    unit_of_measurement: "kWh"
    value_template: "{{ value | multiply(0.001) | round(3)}}"
    device_class: "energy"
    state_class: "total_increasing"
    #scan_interval: 86400
    scan_interval: 5
    command_timeout: 5

  - platform: command_line
    unique_id: xcel_meter_productiion
    name: "Smart Electric Meter Production"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/2/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    unit_of_measurement: "kWh"
    value_template: "{{ value | multiply(0.001) | round(3)}}"
    device_class: "energy"
    state_class: "total_increasing"
    #scan_interval: 86400
    scan_interval: 5
    command_timeout: 5

The Example configuration in //Command Line says do this:
But It doesn’t work either.

Example configuration.yaml entry
command_line:

  • sensor:
    command: SENSOR_COMMAND
  • sensor:
    command: SENSOR_COMMAND_2

This is what I changed my configuration.yaml to look like:

command_line:
  - sensor:
    unique_id: xcel_meter_power
    name: "Smart Electric Meter Power"
    #command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/1/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/1/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '([+-]?[0-9]+)'"
    unit_of_measurement: "W"
    device_class: "power"
    scan_interval: 5
    command_timeout: 5

  - sensor:
    unique_id: xcel_meter_consumption
    name: "Smart Electric Meter Consumption"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/3/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    unit_of_measurement: "kWh"
    value_template: "{{ value | multiply(0.001) | round(3)}}"
    device_class: "energy"
    state_class: "total_increasing"
    #scan_interval: 86400
    scan_interval: 5
    command_timeout: 5

  - sensor:
    unique_id: xcel_meter_productiion
    name: "Smart Electric Meter Production"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/2/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    unit_of_measurement: "kWh"
    value_template: "{{ value | multiply(0.001) | round(3)}}"
    device_class: "energy"
    state_class: "total_increasing"
    #scan_interval: 86400
    scan_interval: 5
    command_timeout: 5

When I make the changes above, this is how it complains:

Close, it should be

command_line:
- sensor:
    unique_id: xcel_meter_power
    name: "Smart Electric Meter Power"
    #command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/1/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/1/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '([+-]?[0-9]+)'"
    unit_of_measurement: "W"
    device_class: "power"
    scan_interval: 5
    command_timeout: 5

- sensor:
    unique_id: xcel_meter_consumption
    name: "Smart Electric Meter Consumption"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/3/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    unit_of_measurement: "kWh"
    value_template: "{{ value | multiply(0.001) | round(3)}}"
    device_class: "energy"
    state_class: "total_increasing"
    #scan_interval: 86400
    scan_interval: 5
    command_timeout: 5
 - sensor:
    unique_id: xcel_meter_productiion
    name: "Smart Electric Meter Production"
    command: "OPENSSL_CONF=/config/xcelcerts/myown/openssl.cnf /usr/bin/curl --ciphers ECDHE-ECDSA-AES128-CCM8 --insecure --url https://10.0.0.226:8081/upt/1/mr/2/r --cert /config/xcelcerts/myown/cert.pem --key /config/xcelcerts/myown/key.pem 2>&1 | grep -o '<value>.*</value>' | grep -Eo '[0-9]+'"
    unit_of_measurement: "kWh"
    value_template: "{{ value | multiply(0.001) | round(3)}}"
    device_class: "energy"
    state_class: "total_increasing"
    #scan_interval: 86400
    scan_interval: 5
    command_timeout: 5
2 Likes

@petro

That fixed it. Thanks!!

And thanks for the fast response.

1 Like

The new climate card does not allow me to add all features into the card. My AC integration has fan modes (low, med, high etc) and swing modes (horiz, vert, both etc) . These are not offered as ‘features’.

As said most if not all thermostats do.

Anyway it’s funny to vote for a feature request (which I will) to get back what was already there in the previous release :laughing:

3 Likes

It wasn’t related to the app at all, it was a connectivity problem because of my stupid router. I won’t bother anyone here with that… But thanks for the suggestions :grin:

I did some tests and figured it out.
Say you use variable ‘Agenda’, then your template for events was agenda.events
The template now has changed to agenda['calendar.<name>'].events

3 Likes

After update Toshiba air conditioner does not work

Logger: homeassistant.util.package
Source: util/package.py:102
First occurred: December 6, 2023 at 23:11:29 (3 occurrences)
Last logged: December 6, 2023 at 23:11:50

Unable to install package toshiba-ac==0.3.3: ERROR: Cannot install toshiba-ac==0.3.3 because these package versions have conflicting dependencies. ERROR: ResolutionImpossible: for help visit Dependency Resolution - pip documentation v24.0.dev0

If having only one mode, will the HVAC modes be suppressed? I really like the clean design…

One mode, in this context would be “ON” and nothing more. There will generally always be two, at least on and off, be it thermostat of and heat on/cool on or thermostat on and cool on and heat on.

Regardless you can control if you see modes or not.

I love the new design of the thermostat, much more modern.

Not correct, I have KNX thermostats providing only heating mode (on). Therefore it would be nice if the one mode will be suppressed as the button is not useful.

Wait, you mean there’s a way to exclude data from being stored in LTS? Can someone point me to where this is documented?

This would be fantastic, for me. I have no use for the vast majority of the LTS data and always wondered why something like this was kept forever, with no exclude and no keep_days options, like we have with the states and events data.

That would also be great, and would be the most logical database design choice. But, alas, it’s actually stored in the same database, albeit in different tables.

Will the auto-logon feature built into all modern browsers still work with this new logon page?

Right now, I rarely see the logon page. At my house, we all use the same account. If we’ve clicked the “keep my logged on” box once on a device, from then on it goes directly to the dashboard, which is what I want.

I’m hoping I don’t have to select from a list of users (there would only be one) every time.

Yes, separate tables, however the comment still stands:

1 Like