2023.7: Responding services

I’m loving this release! I’ve been playing around with ChatGPT responses today and it’s working great for me, as is the calendar.list_events service.

I have run into one limitation though; that the calendar.list_events method won’t return a response if there are multiple calendars entities passed to it.

Failed to call service calendar.list_events. Service call requested response data but matched more than one entity

I’d love to be able to query multiple calendars at once to get a combined agenda for my day; for example, my work calendar, personal calendar, and the one I share with my partner. Is this something on the roadmap for this service, or is it only possible to support one calendar at a time?

just process them all with different variable names and combine the data after the last.

Same for me. Since the last update I have an issue with Mariadb. Is there any breaking change I missed?

Hm… one step closer, seems that as @petro suggested adding custom event section might be solution… but yet automation does not register, with conversation service call error. Here is the full code for this automation (it is a bit more complex, as it serves several different media_players at the same time, so I had to use some additional variables):

  - id: 'update_media_info'
    alias: Update Media Info
    initial_state: true
    variables:
      player: >-
        {{ trigger.entity_id }}
      artist: >-
        {% set string=trigger.entity_id %}
        {% set result=state_attr(string, 'media_artist') %}
        {{ result }}
      album: >-
        {% set string=trigger.entity_id %}
        {% set result=state_attr(string, 'media_album_name') %}
        {{ result }}
      output: >-
        {% set string=trigger.entity_id %}
        {% set string=string.split('.') %}
        {% set result="input_text." + string[1] + "_media_info" %}
        {{ result }}
    trigger:
    - platform: state
      entity_id:
        - media_player.audiocast
        - media_player.denon_heos_s750h
        - media_player.marantz_sacd30n
        - media_player.volumio_2
      attribute: media_album_name
    condition: []
    action:
      - service: conversation.process
        data:
          agent_id: 9194fb3fee4a1e2220e2f47a524fce92
          text: Tell me about {{ artist }}'s album {{ album }} in less than 100 words
        response_variable: chatgpt
        event: >-
          {{ trigger.entity_id }}_response
        event_data:
          response: "{{chatgpt.response.speech.plain.speech | trim | replace('\"','')}}"

Error I receive in the log seems to be related to actual service call, so this part:

    action:
      - service: conversation.process
        data:
          agent_id: 9794fb3fee4a1e2220e2f47a524fce93
          text: Tell me about {{ artist }}'s album {{ album }} in less than 100 words
        response_variable: chatgpt

And error itself:

2023-07-08 16:44:49.635 ERROR (MainThread) [homeassistant.components.automation] Automation with alias 'Update Media Info' could not be validated and has been disabled: extra keys not allowed @ data['action'][0]['data']. Got {'agent_id': '9194fb3fee4a1e2220e2f47a524fce92', 'text': "Tell me about {{ artist }}'s album {{ album }} in less than 100 words"}
extra keys not allowed @ data['action'][0]['response_variable']. Got 'chatgpt'
extra keys not allowed @ data['action'][0]['service']. Got 'conversation.process'

Configuration check does not indicate any errors. Error appears when the automation is executed.

Then the sensor to consume response looks like (for one of media players, volumio_2 inthis case):

template:
  - trigger:
      - platform: event
        event_type: media_player.volumio_2_response
      - platform: state
        entity_id:
          - media_player.volumio_2
        attribute: media_title
    sensor:
      - name: volumio_2_album_description
        state: 'on'
        attributes:
          album_description: >
            {% if trigger.platform == 'event' %}
              {{ trigger.event.data.response }}
            {% else %}
              {{ this.attributes.album_description | default('') }}
            {% endif %}   
          album_title: "{{ state_attr('media_player.volumio_2', 'media_album_name') }}"
          artist_name: "{{ state_attr('media_player.volumio_2', 'media_artist') }}"
          song_title: "{{ state_attr('media_player.volumio_2', 'media_title') }}"
          album_art: "{{ state_attr('media_player.volumio_2', 'entity_picture') }}"

But yet to be tested, as is not triggered due to error in automation…

you aren’t separating your conversation.process service call from the event call. add a - in front of event.

1 Like

That’s a pity, no idea how to do a gauge is there a card that does that?

Mind you, still wouldn’t be able to change the default energy dashboard.

Edit: never mind can see gauge card

OK, better now, automation does not drop any errors and executes… but seems event: cannot be templated… Here is output from traces for this automation:

Executed: 8 July 2023, 20:00:06
Result:
event: '{{ trigger.entity_id }}_response'
event_data:
  response: >-
    Cantoma's self-titled album, Cantoma, is a captivating musical journey that
    combines elements of world music, downtempo electronica, and Balearic beats.
    Released in 2003, the album features intricate layers of lush
    instrumentation, soothing melodies, and hypnotic rhythms. With its dreamy
    and atmospheric soundscapes, Cantoma creates a serene and exotic ambiance
    that transports listeners to faraway destinations. Each track on the album
    is meticulously crafted, showcasing Cantoma's talent for blending organic
    and electronic sounds seamlessly. From the enchanting vocals to the
    intricate production, Cantoma's self-titled album is a timeless and
    immersive musical experience.

It should contain event: media_player.player_name_response instead of event: {{ trigger.entity_id }}_response

Move the entity_id out of the event’s name and into the event’s data.

    action:
      - service: conversation.process
        data:
          agent_id: 9194fb3fee4a1e2220e2f47a524fce92
          text: "Tell me about {{ artist }}'s album {{ album }} in less than 100 words"
        response_variable: chatgpt
      - event: chatgpt_response
        event_data:
          entity_id: "{{ trigger.entity_id }}"
          response: "{{chatgpt.response.speech.plain.speech | trim | replace('\"','')}}"

Change the Event Trigger to listen for the “chatgpt_response” event and for a specific value of entity_id.

template:
  - trigger:
      - platform: event
        event_type: chatgpt_response
        event_data:
          entity_id: media_player.volumio_2
      - platform: state
        entity_id:
          - media_player.volumio_2
        attribute: media_title
    sensor:
      - name: volumio_2_album_description
       ... etc ...

more in general I would really appreciate a separate topic where we can share ideas and implementations of the new functionality, which I must confess, is still very fuzzy for me.

I don’t have many of those conversation agents installed (only use the Cloud Agent, and GA connected too HA), as I feel those are not adding to the experience just yet and still meet at lot of “I am sorry, I don;t understand” (who’s afraid of AI here…)

Maybe the new responding services, that have been marketed as the next big thing without a lot of further suggestions to go, on can bridge that gap.

Hope someone with a good and useful real life example can open a Topic posting it, and have others follow suit so we can all benefit from it.

btw, can we filter the ever so present Shelly errors

Error fetching shellyplug-s-A75005 data: Error fetching data: DeviceConnectionError()

for all devices which we’re seeing since this release with

  homeassistant.components.shelly:
    - DeviceConnectionError()

? I am never sure what part of that error we need to pick

Regarding the Shelly errors you can define a filter for the component throwing the error, e.g.:

logger:
  filters:
      homeassistant.components.shelly:
        - "Error fetching .* data:*"
2 Likes

i’am playing around with the new response from the Conversation: Process service.

I succesvol created a sensor to store a response from openai, except I cannot figure out how I can use sensor data.

For starters I’'am trying to make a random summary for in the morning with calendar events, weather and driving time to work, but I need the sensor data.

Does somebody has an idea :slight_smile:

Does filtering work in your setup?
Cause it does not in mine.

Thx, I used the subset text I posted, and seems to work.
Together with all other filters I have in place.

Never figured we could use wildcards there too!

Those can not be filtered. Loader is something special, though I don’t recall why, sorry.

Do you mean - messages of some components cannot be filtered?
Too bad this is not mentioned in Docs.

Update: tested with other components (now and earlier) - no filtering.
So this is not about just “loader”.
Need to check more.

Update: I see, for some components filtering works, for some - does not…
Well, anyway this is a good news for me)))
Although 95% of my filters do not work.

I wonder - is anyone using “Demo” platform?
Haven’t you noticed anything weird about the recent changes?

Updated to 2023.7.1 today, ever since I’ve been experiencing a lot of freezing in the front end just doing basic tasks.

I see there are a few others but I’m wondering if this is widespread with a known fix or just isolated incidents?

Thank You, Team Nabu Casa!

Thanks again @Taras! This did the trick!

maybe bring this to a separate topic, because all of the filters work (can show what I use, but that might be considered spam here…), except the ‘Loader’ which probably isn’t even considered to be a ‘component’