Intégrer Speedtest CLI Officielle à Home Assistant

Finalement, erreur résolu, c’était un souci d’intégration de répertoire via le fichier de configuration yaml. Bizarre car cela fonctionnait, sans doute un changement sur les dernières versions

Bonjour,

J’ai suivi la méthode d’installation et pourtant je n’ai pas de valeurs qui remontent dans mes sensors :

et le ./speedtest me montre bien que le module est installé, que les licences ont été acceptées, …

image

et dans mon configuration.yaml, j’y ai bien intégré la ligne :
command_line: !include command_line.yaml
et dans le fichier comman_line.yaml le texte qui va bien :

- sensor:
    name: "SpeedTest CLI Data"
    unique_id: speedtest_cli_data
  # Use the path as configured on your system
    command: "config/Config/3rdparty/speedtest/speedtest --format=json --accept-license --accept-gdpr "
  # Every 4 hours, 60 * 60 * 4 = 14400
    scan_interval: 3600
    command_timeout: 60
  # Summarize results to stay below string limit and convert to JSON
    value_template: >-
      {{ 
        { 
          "ping": value_json.ping.latency, 
          "download": value_json.download.bandwidth, 
          "upload": value_json.upload.bandwidth, 
          "isp": value_json.isp,
          "country": value_json.server.country,
          "location": value_json.server.location,
          "id": value_json.server.id,
          "server_name": value_json.server.name,
          "server_host": value_json.server.host
        }
        | to_json 
      }}

et même méthode dans mon fichier template.yaml :

##Speedtest
# SpeedTest.net CLI
# https://www.speedtest.net/apps/cli
# Command_line sensor is in sensors.yaml


  - sensor:
    - name: 'SpeedTest CLI Ping'
      unique_id: speedtest_cli_ping
      icon: mdi:speedometer
      # TIME_MILLISECONDS: Final = "ms"
      unit_of_measurement: ms
      state_class: measurement
      state: "{{ (states('sensor.speedtest_cli_data') | from_json).ping | round(2) }}"
    - name: 'SpeedTest CLI Download'
      unique_id: speedtest_cli_download
      icon: mdi:speedometer
      # DATA_RATE_MEGABITS_PER_SECOND: Final = "Mbit/s"
      unit_of_measurement: Mbit/s
      state_class: measurement
      state: "{{ ((states('sensor.speedtest_cli_data') | from_json).download * 8 / 1000 / 1000) | round(2) }}"
    - name: 'SpeedTest CLI Upload'
      unique_id: speedtest_cli_upload
      icon: mdi:speedometer
      unit_of_measurement: Mbit/s
      state_class: measurement
      state: "{{ ((states('sensor.speedtest_cli_data') | from_json).upload * 8 / 1000 / 1000) | round(2) }}"
    - name: Speedtest ISP
      unique_id: Speedtest_ISP
      state: '{{ ((states("sensor.speedtest_cli_data") | from_json).isp) }}'
    - name: Speedtest Server Name
      unique_id: Speedtest_Server_Name
      state: '{{ ((states("sensor.speedtest_cli_data") | from_json).server_name) }}'
    - name: Speedtest Server Host
      unique_id: Speedtest_Server_Host
      state: '{{ ((states("sensor.speedtest_cli_data") | from_json).server_host) }}'      
    - name: Speedtest country
      unique_id: Speedtest_country
      state: '{{ ((states("sensor.speedtest_cli_data") | from_json).country) }}'
    - name: Speedtest id
      unique_id: Speedtest_id
      state: '{{ ((states("sensor.speedtest_cli_data") | from_json).id) }}'
    - name: Speedtest location
      unique_id: Speedtest_location
      state: '{{ ((states("sensor.speedtest_cli_data") | from_json).location) }}'

Une idée d’où cela peu coincer ?

les sensors sont des templates sensors, faut pas les mettre dans sensor.yaml mais dans template.yaml.

dans ton configuration.yaml faut ajouter la ligne:
template: !include template.yaml
faut créer un fichier template.yaml et y mettre les sensors template dedans.
ne pas mettre 'template:' au début dans le fichier template.yaml

non ça c’est bon, j’ai fait comme cela.

il y a un espace , qu’il faut pas --accept-gdpr "

J’ai corrigé cet espace en trop en fin de phrase, mais cela ne semble rien changer.
Puis ce matin j’ai remarqué que le chemin d’accès n’était pas correct. Il y a un /config/ en trop dans le texte recopié.
Merci beaucoup pour ton aide !!

2/ A la racine de /Config/ créer un dossier 3rdparty et dedans un dossier speedtest .
copier les 3 fichiers décompresser auparavant dans le dossier speedtest

Bonjour WarC0zes,

j’essaie de suivre ton tuto mais je bloque sur la racine.
Je ne trouve pas son emplacement. je sais c’est nul.
Peux tu m’indiquer la direction.
Merci pour ton aide.

Bonjour,
c’est quoi ton type d’installation et la machine ?

j’ai 1 raspberry pi 3 avec 1 sonoff zigBee 3.0 usb dongle plus CC2652P qui tourne en mqtt avec capteur de température aqara, interrupteur Ikea.
1 pont Philips Hue Ave ampoule et ruban led

Installe le module complémentaire Samba share pour accéder au dossier de Home assistant par réseau d’un PC.

ok je regarde ça et je te tiens au courant.
merci

Bonjour, intéressé par la solution impossible de trouver d’où cela vient ;(
Quand je test en ligne de commande tout semble fonctionner mais depuis la maj 12. c’est comme si la fonction de stockage speedtest_cli_data ne fonctionnait plus → plus rien dans les enregistrement et donc forcement plus rien dans les données upload/download/pin/etc… qui ne font que lire les données de cette partie :frowning: alors que je n’ai rien modifié.

J’ai donc bien la ligne de commande

Use the path as configured on your system

command: "/config/3rdparty/speedtest/speedtest --format=json --accept-license --accept-gdpr"

qui correspond à la commande dans mon arborescence et qui fonctionne quand je la lance en mode terminal.

et ensuite j’ai :

Summarize results to stay below string limit and convert to JSON

value_template: >-
  {{ 
    { 
      "ping": value_json.ping.latency, 
      "download": value_json.download.bandwidth, 
      "upload": value_json.upload.bandwidth, 
      "isp": value_json.isp,
      "country": value_json.server.country,
      "location": value_json.server.location,
      "id": value_json.server.id,
      "server_name": value_json.server.name,
      "server_host": value_json.server.host
    }
    | to_json 
  }}

Mais nada rien ne fonctionne :frowning_face:
Si quelqu’un a une idée la je sèche :frowning:

et ensuite

Hello @WarC0zes
J’ai une question précise :
Je gère 2 wan, et l’affichage de la carte me donne celui du secondaire, alors que si je fais le test en CLI dans le répertoire, c’est le primaire qui est testé.
Une idée de ce à quoi c’est dû ?

Salut,
je ne saurais te dire. Faut voir si des experts en saurait plus.

Merci pour ce tuto complet !

Bonjour,
depuis 2 jours j’ai les sensors qui sont indisponible de temps en temps.

je reçois ces erreurs:

2024-01-13 16:45:50.134 ERROR (SyncWorker_11) [homeassistant.components.command_line.utils] Command failed (with return code 2): /config/3rdparty/speedtest/speedtest -s 4036 --format=json --accept-license --accept-gdpr
2024-01-13 16:45:50.145 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ (states('sensor.speedtest_cli_data') | from_json).ping | round(2) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_cli_ping'
2024-01-13 16:45:50.147 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states('sensor.speedtest_cli_data') | from_json).download * 8 / 1000 / 1000) | round(2) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_cli_download'
2024-01-13 16:45:50.152 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states('sensor.speedtest_cli_data') | from_json).upload * 8 / 1000 / 1000) | round(2) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_cli_upload'
2024-01-13 16:45:50.153 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).isp) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_isp'
2024-01-13 16:45:50.154 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).server_name) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_server_name'
2024-01-13 16:45:50.155 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).server_host) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_server_host'
2024-01-13 16:45:50.156 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).country) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_country'
2024-01-13 16:45:50.160 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).id) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_id'
2024-01-13 16:45:50.161 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).location) }}) renders=6>' for attribute '_attr_native_value' in entity 'sensor.speedtest_location'

Vous rencontrez des problèmes aussi ?
Peut être le serveur par lequel je passe qui déconne , si je test en SSH ca fonctionne bien.

Salut
Moi je croyais que c’était quand je bidouillais HA


Ouf, y a pas que moi :smiley:
Tu pourrais voir depuis quand ca te le fais ?


J’ai fais depuis le 1er déjà

Ok, j’ai que 3 jours de retention et pas vu d’erreur dans les logs avant.
Un soucis du core 2024.1.x je pense, j’ai maj cas partir du core 2024.1.2 et j’ai maj le core 2021.1.3 toute a l’heure.