Intégrer Speedtest CLI Officielle à Home Assistant

Bon, du coup j’ai procédé comme ca:

              - platform: template
                sensors:
                  speedtest_download:
                    friendly_name: "SpeedTest Download"
                    icon_template: mdi:gauge
                    unit_of_measurement: 'Mbit/s'
                    value_template: "{{ ((states('sensor.speedtest_data') | from_json).download * 8 / 1000 / 1000) | round(2) }}"    
             
              - platform: template
                sensors:
                  speedtest_upload:
                    friendly_name: "SpeedTest Upload"
                    icon_template: mdi:gauge
                    unit_of_measurement: 'Mbit/s'
                    value_template: "{{ ((states('sensor.speedtest_data') | from_json).upload * 8 / 1000 / 1000) | round(2) }}"     
            
              - platform: template
                sensors:
                  speedtest_ping:
                    friendly_name: "SpeedTest Ping"
                    icon_template: mdi:gauge
                    unit_of_measurement: 'ms'
                    value_template: "{{ (states('sensor.speedtest_data') | from_json).ping | round(2) }}"
            
              - platform: template
                sensors:
                  speedtest_url:
                    friendly_name: "SpeedTest URL"
                    icon_template: mdi:link-variant
                    value_template: "{{ (states('sensor.speedtest_json') | from_json).url }}" 

Mais les sensors sont en indisponible…

Dans ton sensor.yaml tu doit mettre que le code:

- platform: command_line
  name: "SpeedTest CLI Data"
  unique_id: speedtest_cli_data
  command: "/config/3rdparty/speedtest/speedtest --format=json --accept-license --accept-gdpr"
  #Toutes les 4 heures, 60 * 60 * 4 = 14400  3600 = 1 heure
  scan_interval: 3600
  command_timeout: 60
  value_template: >-
    {{ 
      { 
        "ping": value_json.ping.latency, 
        "download": value_json.download.bandwidth, 
        "upload": value_json.upload.bandwidth 
      }
      | to_json 
    }}

la partie template ne va pas dans sensor.yaml.
Soit tu la copie dans ton configuration.yaml:

template:
  - sensor:
      - name: 'SpeedTest CLI Ping'
        unique_id: speedtest_cli_ping
        icon: mdi:speedometer
        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
        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) }}"

Soit tu créer un template.yaml , et tu copie le code:

  - sensor:
      - name: 'SpeedTest CLI Ping'
        unique_id: speedtest_cli_ping
        icon: mdi:speedometer
        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
        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) }}"

Bonjour,
c’est compatible avec les statistiques. Patiente si tu vient de créer l’entité.
dl state

ça fonctionne, je mettais planté dans le nom du sensor.command_line …
Mais du coup j’ai mis tout en mode - platform: template dans mon fichier sensor.yaml.

Si je passe avec un template.yaml, est-ce que je doit réécrire tous les - platform: template dans ce yaml?

Zut, pas chez moi, pourtant j’ai des données:

J’ai mis ça dans configuration.yaml:

sensor:

##Speedtest
  - platform: command_line
    name: "SpeedTest CLI Data"
    unique_id: speedtest_cli_data
  # Use the path as configured on your system
    command: "/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 
      }}
  - platform: template
    sensors:
      speedtest_download:
        friendly_name: "SpeedTest Download"
        icon_template: mdi:gauge
        unit_of_measurement: 'Mbit/s'
        value_template: "{{ ((states('sensor.speedtest_cli_data') | from_json).download * 8 / 1000 / 1000) | round(2) }}"

Je suis en version 2022.11.4, la dernière

Je suis pas trop a l’aise avec les configurations couper. Si ca fonctionne pourquoi changer.

En effet, c’était pour compréhension perso :slight_smile:

Enfaite @Galadan et @FillR2 vous utiliser l’ancienne méthode Template.

Passer par la nouvelle méthode, qui est expliquer dans le tuto.

1 « J'aime »

tu utilise l’ancienne methode template peu etre c’est ca.

template:
  - sensor:
      - name: 'SpeedTest CLI Download'
        unique_id: speedtest_cli_download
        icon: mdi:speedometer
        unit_of_measurement: Mbit/s
        state_class: measurement
        state: "{{ ((states('sensor.speedtest_cli_data') | from_json).download * 8 / 1000 / 1000) | round(2) }}"

Merci, j’ai mis la nouvelle syntaxe et surtout ça à mon avis qui manquait:

    state_class: measurement

En tout cas, ça fonctionne :+1:

Ils ont pas tenu longtemps :smiling_face_with_tear:
Orange et Lafibre.info a Marseille fonctionnent plus, je suis passer par GSL Network en attendant.
si ta 5 min tu pourrais refaire la même manip, pour me monter la nouvelle liste des serveurs vers marseille.
Merci d’avance

@WarC0zes

:grin:

HaHa , la commande qui sert a rien. Super la proximité des serveurs, j’adore :rofl:
il reste que GLS Network sur marseille, celui que j’utilise finalement. Good job :+1:

@WarC0zes
nouveaux serveurs :joy:

1 « J'aime »

Cool, Orange et Lafibre.net sur marseille est de retour. Merci pour l’info , je vais rebasculer dessus.

1 « J'aime »

Hello

Merci pour ce tutoriel.

Cependant, je n’ai pas vu une petite amélioration, enfin de mon point de vue. En effet, pour éviter pour ma part d’avoir du 5540 Mbps par exemple, je préfère voir du 5,54 Gbps.

Voici mes templates :

sensor:
  - platform: command_line
    name: "SpeedTest CLI Data"
    unique_id: speedtest_cli_data
    command: "/config/3rdparty/speedtest/speedtest --format=json --accept-license --accept-gdpr"
    #Toutes les 4 heures, 60 * 60 * 4 = 14400  3600 = 1 heure
    scan_interval: 3600
    command_timeout: 60
    value_template: >-
      {{ 
        { 
          "ping": value_json.ping.latency, 
          "download": value_json.download.bandwidth, 
          "upload": value_json.upload.bandwidth,
          "url": value_json.result.url
        }
        | to_json 
      }}
  - platform: template
    sensors:
      speedtest_cli_ping:
        unique_id: speedtest_cli_ping
        friendly_name: 'SpeedTest CLI Ping'
        icon_template: mdi:speedometer
        unit_of_measurement: ms
        value_template: "{{ (states('sensor.speedtest_cli_data') | from_json).ping | round(2) }}"
      speedtest_cli_download:
        unique_id: speedtest_cli_download
        friendly_name: 'SpeedTest CLI Download'
        icon_template: mdi:download-network-outline
        value_template: >-
          {%- set download = ((states('sensor.speedtest_cli_data') | from_json).download * 8 / 1000 / 1000) | round(2) -%}
          {% if download | float > 1000 %}
            {{ (download | int / 1000) | round(2) | replace('.',',') }} Gb/s
          {% else %}
            {{ download | replace('.',',') }} Mb/s
          {% endif %}
      speedtest_cli_upload:
        unique_id: speedtest_cli_upload
        friendly_name: 'SpeedTest CLI Upload'
        icon_template: mdi:upload-network-outline
        value_template: >-
          {%- set upload = ((states('sensor.speedtest_cli_data') | from_json).upload * 8 / 1000 / 1000) | round(2) -%}
          {% if upload | float > 1000 %}
            {{ (upload | int / 1000) | round(2) | replace('.',',') }} Gb/s
          {% else %}
            {{ upload | replace('.',',') }} Mb/s
          {% endif %}
      speedtest_url:
        unique_id: speedtest_url
        friendly_name: 'Speedtest Url'
        icon_template: mdi:link-variant
        value_template: "{{ (states('sensor.speedtest_cli_data') | from_json).url }}"

Bon je remplace aussi le point par une virgule.

Avec cette configuration, si le débit est inférieur à 1000 Mbps, la valeur est affichée en Mbps, si supérieur à 1000 Mbps, la valeur sera convertie en Gbps

Voici le résultat final

image

à voir si ma « petite » contribution peut vous apporter quelque chose.

1 « J'aime »

Pour un RPi3 et 4 ca ne sert a rien, vu que c’est une carte réseau 100Mbits / 1 Gbits.
J’avais fait ce tuto pour RPI a la base :wink:
Ca sera utile pour ceux qui on une grosse config, avec carte réseau 10Gbits :stuck_out_tongue:

1 « J'aime »

C’est pas faux :stuck_out_tongue:

C’est vrai que j’utilise HA sur mon serveur nas custom, donc oui la carte réseau 10 Gbps est utile. Mais c’est vrai que pour la plupart des utilisateurs, cela n’est pas utile. Mais tout de même fonctionnel pour tout le monde :sweat_smile:

C’est un peu hors-sujet, mais je cherche un système qui pourrait me faire l’équivalent de Speedtest, mais entre 2 serveurs HA (2 PI4 sur le même LAN).

Je cherche un truc simple, si vous avez des idées…

Peut-être jeter un oeil à iperf ?

1 « J'aime »