Configuring Command Line sensor using YAML has moved. Consult the documentation to move your YAML configuration to integration key and restart Home Assistant to fix this issue

The size of this thread alone suggests that “big hints” weren’t really enough.

Lets face it, not everyone reads the release notes and/or breaking change list. It’s also very easy to miss a part that calls out something that may impact you. This change in particular even states “this is currently not yet a breaking change” and although I agree nothing has actually broken yet, the warning message that appears in the UI after the update could certainly make it a lot clearer as to what it’s referring to.

Why not include a link to the relevant section of the release notes as an obvious starting point, instead of just “consult the documentation”?

6 Likes

Wanted to share my 2 cents on the command-line sensor migration, especially for people who have integrated Grafana into Lovelace.

The only reliably way I found integrating Grafana dashboards into Lovelace is by doing a command line curl to an image render of the dashboard, and then using the image in a camera. Why not embed the iframe you might ask, the problem is the headers that I use for authentication, that I can’t pass along in the url.

sensor:
  - platform: command_line
    name: "Download Temperature"
    command: curl -s -H "Authorization:Bearer ##AuthToken##" "http://##IP##:4000/render/d-solo/iM3nzjKnz/home?orgId=1&panelId=2&from=now-6h&to=now&width=500&height=250&tz=Europe%2FAmsterdam" > /config/downloads/temperature.tmp && cp /config/downloads/temperature.tmp /config/downloads/temperature.png
    scan_interval: 300
camera:
  - platform: local_file
    name: Grafana Temperature
    file_path: /config/downloads/temperature.png

Looking at the guide, I came up with the below, which seemed to have worked but didn’t…

command_line:
  - binary_sensor:
      name: "Download Temperature"
      command: 'curl -s -H "Authorization:Bearer ##AuthToken##" "http://##IP##:4000/render/d-solo/iM3nzjKnz/home?orgId=1&panelId=2&from=now-6h&to=now&width=500&height=250&tz=Europe%2FAmsterdam" > /config/downloads/temperature.tmp && cp /config/downloads/temperature.tmp /config/downloads/temperature.png'
      scan_interval: 300

While the curl part succeeds, the copy part after the && was failing (for all but the first in line).
image

I tried a few things and what worked was adding the command_timeout:

  - binary_sensor:
      name: "Download Temperature"
      command: 'curl -s -H "Authorization:Bearer ##Token##" "http://##IP##:4000/render/d-solo/iM3nzjKnz/home?orgId=1&panelId=2&from=now-6h&to=now&width=500&height=250&tz=Europe%2FAmsterdam" > /config/downloads/temperature.tmp && cp /config/downloads/temperature.tmp /config/downloads/temperature.png'
      command_timeout: 150
      scan_interval: 300

One downside I seem to observe is that, all commands are executed at the same time, instead of what I recall being staggered one after another. Given the rendering of the graphs are CPU heavy and takes a few seconds, calling multiples of them might choke the system a bit. Will keep a close eye.

check indentation

I am struggling with this for some reason. I added the command_line: !include command_line.yaml to my configuration.yaml file and then created the comman_line.yaml with the following contents but I am getting a error.

Logger: homeassistant.setup
Source: setup.py:252
First occurred: 12:55:08 AM (1 occurrences)
Last logged: 12:55:08 AM

Setup failed for command_line: No setup or config entry setup function defined.

contents of configuration.yaml:

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

# Text to speech
tts:
  - platform: google_translate

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
binary_sensor: !include binary_sensor.yaml
command_line: !include command_line.yaml

# Raspberry Pi output
switch:
  - platform: rpi_gpio
    switches:
      - port: 26
        name: "Ducted Heating Control 26"
        unique_id: "ducted_heating_control_rpgio_26"

and the contents of the command_line.yaml

                                                              
- sensor:
    name: "CPU Temp"
    command: "cat /sys/class/thermal/thermal_zone0/temp"
    unit_of_measurement: "°C"
    value_template: '{{ value | multiply(0.001) | round(2) }}'

Not sure what I am doing wrong? FYI I want to expand this later to ssh to another Pi to get its CPU temp.

Try:

- sensor:
    name: CPU Temp
    command: cat /sys/class/thermal/thermal_zone0/temp
    unit_of_measurement: "°C"
    value_template: "{{ value | multiply(0.001) | round(2) }}"

This is what I use in config:

command_line:
  - sensor:
      name: CPU Temperature
      command: cat /sys/class/thermal/thermal_zone2/temp
      unit_of_measurement: "°C"
      value_template: "{{ value | multiply(0.001) | round(2) }}"

No bueno, I even commented out the include command_line and plonked it straight into the configuration.yaml file but I still get the same error. Contents now in configuration.yaml:

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

# Text to speech
tts:
  - platform: google_translate

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
binary_sensor: !include binary_sensor.yaml
#command_line: !include command_line.yaml

command_line:
  - sensor:
      name: CPU Temperature
      command: cat /sys/class/thermal/thermal_zone2/temp
      unit_of_measurement: "°C"
      value_template: "{{ value | multiply(0.001) | round(2) }}"

# Raspberry Pi output
switch:
  - platform: rpi_gpio
    switches:
      - port: 26
        name: "Ducted Heating Control 26"
        unique_id: "ducted_heating_control_rpgio_26"

Did you restart Home Assistant after making the changes or just attempt to reload YAML?

A restart is required.

Also what version of Home Assistant core are you on?

Running in Docker. I did the restart (not just reload YAML, I have issues with just doing that from before so I always do a restart now) from inside the UI but as another check I also restarted the PI. Same issue. I can run the command no problems from inside the docker.

Version: Home Assistant 2023.5.4
Frontend 20230503.3 - latest

The command_line integration update was released in v 2023.6

Worked. Thanks Tom.

what is the format if you have command line sensors but they are in the packages folder in command_line.yaml

command_line:
  - sensor:
      scan_interval: 5
      name: Enclosure Temperature
      command: "curl 'http://192.168.1.146/plugin/enclosure/inputs/1?apikey=******'"
      unit_of_measurement: "°C"
      value_template: "{{value_json['temp_sensor_temp'] }}"

  - sensor:
      scan_interval: 5
      name: Enclosure Humidity
      command: "curl 'http://192.168.1.146/plugin/enclosure/inputs/1?apikey=******'"
      unit_of_measurement: "°C"
      value_template: "{{value_json['temp_sensor_humidity'] }}"

This doesnt work.

I still could not come up with a solution to this error. In my configuration.yaml I have a list like this:

template:
  - sensor:
      - name: "TV Power Consumption"
        unit_of_measurement: 'kW'
        state: >
          {{ (states("sensor.tv_energy")) | float / 10000 | round(5) }}       
        device_class: power

and

sensor:
  - platform: integration
    name: TV Energy Consumption
    source: sensor.tv_power_consumption
    method: left

I tried moving these to command_line.yaml without any luck. With the platform I get an error saying that platform is not supported, while for the template I get a generic error.

Neither of those are using the command_line sensor platform. They do not need to be moved.

Only things that include:

  - platform: command_line

need to be changed.

Not template, not Riemann sum, nothing other than command_line integrations.

1 Like

/Flame ON
I just don’t get why anyone thinks “hints” are documentation.

This thread is evidence of a disaster.
The “error” message needs
a) To be much clearer about what has changed
b) To provide a link (short bit.ly link or similar if required) to clear documentation
c) Of What has changed and how to migration from was to what should

Writing code is not doing the job. The job is only done when it is clearly documented and the users can find the documentation.

I hand wrote all my YAML, but I don’t work in HA from one month to the next.
I’m having to wade though this discussion, to try and understand what has changed because hints are not enough. Link to clear documentation required.
/Off

3 Likes

You are right. I thought the warning was really cryptic. “Command Line YAML configuration has moved” doesn’t mean anything to me. I thought that some YAML had been moved elsewhere. The “…move your YAML configuration to integration key…” is mystifying in the extreme. What does that even mean?

I don’t think this was well handled.

lol “big hints”.
Stuff like this is why I can’t recommend HA to my friends. I don’t want them to hate me.

That was a joke.

The only way the “hints” could be less obvious is if they were surrounded by pink boxes, or perhaps use flashing text.

I also agreed that it would be better with a link to the docs concerned.

So what exactly is your issue with the post?

the solution is precisely this, you need to move everything under ‘command_line:’
the old formalism with ‘- platform: command_line’ is no longer valid :wink:

Hi all,

Very new to home assistant, super excited about the product, and glad I got it to work the way I wanted to… until I suddenly got the “Command line sensor YAML” warning message :frowning: … I read the documentation, but I dont understand how to change what I have to what I need. Would anyone be able to point me in the right direction? THANK YOU so much in advance for your support :slight_smile: - Marco

this is what i have in my configuration.yaml file that I think is causing the warning

sensor:
  - platform: command_line
    command: python3 -c "import requests; import json; import random; dataRequest = requests.get('https://cdn-secure.buienalarm.nl/api/3.4/forecast.php?lat=50&lon=5&region=nl&unit=mm%2Fu&c='+str(random.randint(0,999999999999999)) ).text; dataRequest = dataRequest.replace('\r\n',' '); data = '{\"data\":'+dataRequest+'}';    print(data);"
    name: Neerslag_Buienalarm_Regen_Data
    json_attributes:
      - data
    value_template: 'last_changed: {{states.sensor.neerslag_buienalarm_regen_data.last_changed | default(now())}}'
    scan_interval: 240
  - platform: command_line
    command: python3 -c "import requests; import json; import random; dataRequest = requests.get('https://gpsgadget.buienradar.nl/data/raintext?lat=50&lon=5&c='+str(random.randint(0,999999999999999)) ).text; dataRequest = dataRequest.replace('\r\n',' '); data = '{\"data\":\"'+dataRequest+'\"}';    print(data);"
    name: Neerslag_Buienradar_Regen_Data
    json_attributes:
      - data
    value_template: 'last_changed: {{states.sensor.neerslag_buienradar_regen_data.last_changed | default(now())}}'
    scan_interval: 240

Hi guys, after the update my sensors are gone :stuck_out_tongue:
I don’t see breaking changes, but somehow its not working anymore.
Are there people whit the same issue?

sensor:
  - platform: command_line
    name: NUC Motherboard Temperature
    command: "cat /sys/devices/virtual/thermal/thermal_zone0/temp"
    value_template: '{{ value | multiply(0.001) | round(2) }}'
    unit_of_measurement: '°C'
    
  - platform: command_line
    name: NUC CPU Temperature
    command: "cat /sys/devices/virtual/thermal/thermal_zone1/temp"
    value_template: '{{ value | multiply(0.001) | round(2) }}'
    unit_of_measurement: '°C'

  - platform: command_line
    name: NUC WiFi Temperature
    command: "cat /sys/devices/virtual/thermal/thermal_zone2/temp"
    value_template: '{{ value | multiply(0.001) | round(2) }}'
    unit_of_measurement: '°C'