Intégrer Speedtest CLI Officielle à Home Assistant

Et pour intégrer la carte, tu vas au plus simple.
Tu ajoute une carte manuellement en cliquant sur « Ajouter une carte » en bas à droite, puis tu recherches « Manuel »

Ensuite tu copie colle ce code :

type: custom:button-card
show_entity_picture: false
entity: template
name: Speedtest
show_icon: false
show_name: true
tap_action:
  action: navigate
  navigation_path: "#empty"
styles:
  card:
    - height: 480px
    - top: 0px
    - border-radius: 10px
    - background-color: transparent
    - "--mdc-ripple-press-opacity": 0
  name:
    - z-index: 2
    - position: absolute
    - font-size: 45px
    - font-weight: lighter
    - justify-self: start
    - color: white
    - left: 25px
    - top: 20px
  icon:
    - width: 50%
  img_cell:
    - z-index: 2
  custom_fields:
    blur:
      - z-index: 1
      - top: 0%
      - left: 0%
      - width: 100%
      - height: 100%
      - border-radius: 10px
      - position: absolute
      - background-color: rgba(0, 0, 0, 0.1)
      - backdrop-filter: blur(10px)
      - "-webkit-backdrop-filter": blur(20px)
    temp:
      - z-index: 2
      - position: absolute
      - top: 25%
      - left: 5%
      - height: 100%
      - width: 90%
custom_fields:
  blur: |
    <div></div>
  temp:
    card:
      type: vertical-stack
      cards:
        - type: custom:button-card
          tap_action:
            action: call-service
            service: homeassistant.update_entity
            service_data:
              entity_id: sensor.speedtest_cli_data
          color: var(--google-grey)
          show_icon: true
          show_label: false
          show_name: true
          styles:
            icon:
              - color: rgba(var(--color-theme),0.9)
              - width: 20px
            img_cell: null
            name:
              - font-weight: bold
              - font-size: 16px
              - place-self: start
              - margin: 15px 0 0 15px
            grid:
              - grid-template-areas: "\"i n item1\" \"i n item1\""
              - grid-template-columns: 1fr 10fr 1fr
              - grid-template-rows: auto
            card:
              - box-shadow: none
              - border-radius: 20px
              - padding_bottom: "-8px"
              - height: 65px
              - padding-top: 5px
              - padding-left: 5px
              - "--mdc-ripple-color": white
              - "--mdc-ripple-press-opacity": 0.9
          name: Démarrer Speedtest
          icon: mdi:speedometer
          custom_fields:
            item1:
              card:
                type: custom:button-card
                show_icon: true
                show_name: false
                show_label: false
                styles:
                  icon:
                    - color: rgba(var(--color-theme),0.9)
                    - width: 20px
                  grid:
                    - grid-template-areas: i
                    - grid-template-columns: auto
                    - grid-template-rows: auto
                  card:
                    - box-shadow: none
                    - background: rgba(0, 0, 0, 0.0)
                    - border: none
                icon: mdi:chevron-right
        - type: custom:swipe-card
          start_card: 1
          parameters:
            effect: coverflow
            roundLengths: true
            speed: 650
            spaceBetween: 20
            threshold: 7
            coverflowEffect:
              rotate: 80
              depth: 300
              start_card: 1
          cards:
            - type: custom:mini-graph-card
              entities:
                - entity: sensor.speedtest_cli_download
              name: Download
              decimals: "0"
              more_info: true
              line_width: 2
              hours_to_show: 24
              points_per_hour: 2
              show:
                graph: line
                extrema: true
              color_thresholds:
                - value: 0
                  color: "#ef1d0f"
                - value: 2000
                  color: "#ef5a0f"
                - value: 3000
                  color: "#f0da11"
                - value: 4000
                  color: "#11f13a"
                - value: 7000
                  color: "#1da4f2"
              style: |
                ha-card .header.flex .name.flex {
                  color: #44739e;
                  font-size: 14px;
                }
                .header.flex .icon {
                  --mdc-icon-size: 28px;
                }
                :host {
                  --card-mod-icon-color: #44739e;
                }
                .fill {
                  fill: white;
                  opacity: 0.2 !important;
                }
                ha-card {
                  box-shadow: none;
                }
                ha-card .states.flex::after {
                  content: "{{states('sensor.speedtest_cli_server_name')}}";
                  white-space: pre;
                  background-color: rgba(68, 115, 158,0.4);
                  padding: 2px 2px 0px 2px;
                  border-radius: 4px;
                  font-size: 9px;
                }
            - type: custom:mini-graph-card
              entities:
                - entity: sensor.speedtest_cli_upload
                  name: Upload
              name: Upload
              decimals: "0"
              more_info: true
              line_width: 2
              hours_to_show: 24
              points_per_hour: 2
              show:
                graph: line
                extrema: true
              color_thresholds:
                - value: 0
                  color: "#ef1d0f"
                - value: 2000
                  color: "#ef5a0f"
                - value: 3000
                  color: "#f0da11"
                - value: 4000
                  color: "#11f13a"
                - value: 7000
                  color: "#1da4f2"
              style: |
                ha-card .header.flex .name.flex {
                  color: #44739e;
                  font-size: 14px;
                }
                .header.flex .icon {
                  --mdc-icon-size: 28px;
                }
                :host {
                  --card-mod-icon-color: #44739e;
                }
                .fill {
                  fill: white;
                  opacity: 0.2 !important;
                }
                ha-card {
                  box-shadow: none;
                }
                ha-card .states.flex::after {
                  content: "{{states('sensor.speedtest_cli_server_name')}}";
                  white-space: pre;
                  background-color: rgba(68, 115, 158,0.4);
                  padding: 2px 2px 0px 2px;
                  border-radius: 4px;
                  font-size: 9px;
                }
            - type: custom:mini-graph-card
              entities:
                - entity: sensor.speedtest_cli_ping
                  name: Ping
              name: Ping
              decimals: "0"
              more_info: true
              line_width: 2
              hours_to_show: 24
              points_per_hour: 2
              show:
                graph: line
                extrema: true
              color_thresholds:
                - value: 0
                  color: "#ef1d0f"
                - value: 10
                  color: "#ef5a0f"
                - value: 15
                  color: "#f0da11"
                - value: 20
                  color: "#11f13a"
                - value: 25
                  color: "#1da4f2"
              style: |
                ha-card .header.flex .name.flex {
                  color: #44739e;
                  font-size: 14px;
                }
                .header.flex .icon {
                  --mdc-icon-size: 28px;
                }
                :host {
                  --card-mod-icon-color: #44739e;
                }
                .fill {
                  fill: white;
                  opacity: 0.2 !important;
                }
                ha-card {
                  box-shadow: none;
                }
                ha-card .states.flex::after {
                  content: "{{states('sensor.speedtest_cli_server_name')}}";
                  white-space: pre;
                  background-color: rgba(68, 115, 158,0.4);
                  padding: 2px 2px 0px 2px;
                  border-radius: 4px;
                  font-size: 9px;
                }
            - type: vertical-stack
              cards:
                - type: markdown
                  content: "![Image]({{ states('sensor.speedtest_cli_url')+ '.png' }})"
                  card_mod:
                    style: |
                      ha-card {
                      --ha-card-background: transparent; 
                      color: rgb(255,255,255);
                      border-color: transparent;
                - type: custom:html-card
                  name: Speedtest
                  content: >
                    <a href="[[sensor.speedtest_cli_url]]">Speedtest
                    Résultat</a>
                  card_mod:
                    style: |
                      ha-card {
                      --ha-card-background: transparent; 
                      color: rgb(255,255,255);
                      border-color: transparent;
                      margin-left: 0px;
                      margin-top: -40px;

Résultat :

Salut,
tu mix entre ancien et nouveau format de template :sweat_smile:

Hello

Ahah j’ai tellement de bazar à force je commence à m’y perdre !

Mais bien vu :wink::joy:

1 « J'aime »

Hello,

J’ai ce message d’erreur depuis la derniere maj :

Nous avons généré des statistiques pour « SpeedTest Download » (sensor.speedtest_download) dans le passé, mais l'entité n'a plus de classe d'état, par conséquent, nous ne pouvons plus suivre ses statistiques à long terme.

Je ne trouve pas quoi corriger, j’ai essayer plusieurs choses sans succès…

Mon code :

speedtest_download:
        friendly_name: "SpeedTest Download"
        icon_template: mdi:gauge
        unit_of_measurement: Mbit/s
        value_template: >
          {% set json_data = states('sensor.speedtest_cli_data') | from_json %}
          {% if json_data and 'download' in json_data %}
            {{ (json_data.download * 8 / 1000 / 1000) | round(2) }}
          {% else %}
            N/A
          {% endif %}

Merci de votre aide.

Bonjour,
tu le sors d’où ce code ?
Ce n’est pas le code que j’ai fourni dans le tuto.

Il te faudrait le state_class: measurement, mais qui ne fonctionne pas avec l’ancien format de template que tu utilise.

J’ai mis le code avec le nouveau format de template qui le supporte.

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) }}"
1 « J'aime »

Hello,

Merci, c’est un vieux code que j’avais pas mis a jour, ça fait longtemps que j’ai pas mis les mains dans HA ^^
Tu pourrais me mettre le code a mettre dans le command_line.yaml stp ?

Merci.

Ta le code dans le tuto :stuck_out_tongue:
si tu as découper ta configuration et que ta une command_line.yaml, ne mets pas le command_line:.

C’est bien ce que j’ai mais j’ai ce message:

Invalid config for ‹ sensor › at configuration.yaml, line 36: required key ‹ platform › not provided

Tu dois utiliser l’ancien format de command_line :sweat_smile:
Depuis 2023.6.0, c’est un nouveau format.

##Speedtest
- sensor:
    name: "SpeedTest CLI Data"
    unique_id: speedtest_cli_data
    # Use the path as configured on your system
    command: "/config/3rdparty/speedtest/speedtest -s 4036 --format=json --accept-license --accept-gdpr"
    # Every 4 hours, 60 * 60 * 4 = 14400
    scan_interval: 1800
    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
      }}

J’ai seulement ça dans le command_line.yaml

Essai ce code, décaler de deux espaces:

  - sensor:
      name: "SpeedTest CLI Data"
      unique_id: speedtest_cli_data
      # Use the path as configured on your system
      command: "/config/3rdparty/speedtest/speedtest -s 4036 --format=json --accept-license --accept-gdpr"
      # Every 4 hours, 60 * 60 * 4 = 14400
      scan_interval: 1800
      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
        }}

Pareil mais le message d’erreur parles du sensor.yaml…
Je comprends pas ^^

tu n’aurais pas un plateform: command_line dans ton sensor.yaml ?
montre ton configuration.yaml .

Non par contre j’ai du plateform: template

Faut que je réécrive les sensor je pense ^^

###### ENEDIS ######
  - platform: template
    sensors:
## Sensor des consos ##
        myelectricaldata_yesterday:
           friendly_name: "Conso d'hier"
           value_template: "{{ states.sensor.linky_1513328_consumption.attributes.yesterday | float(default=0) }}"
           unit_of_measurement: "kWh"
           device_class: energy

ta quoi ligne 36 dans ton configuration.yaml ?
montre ton configuration.yaml .

sensor: !include sensor.yaml

Dans ton sensor.yaml, il doit te manquer un - devant un plateform: ou ta une mauvaise indentation.

@WarC0zes , ça donne quoi la nouvelle version de ce sensor stp ?

      - name: myelectricaldata_yesterday
        friendly_name: "Conso d'hier"
        value_template: "{{ states.sensor.linky_151332_consumption.attributes.yesterday | float(default=0) }}"
        unit_of_measurement: "kWh"
        device_class: energy

?

Ca donne ca, mais ce sujet n’est pas en rapport avec ta demande. Créer un nouveau sujet si tu veux de l’aide pour le nouveau format de template.

template:
  - sensor:
      - name: "Conso d'hier"
        unique_id: myelectricaldata_yesterday
        unit_of_measurement: "kWh"
        device_class: energy
        state: "{{ states.sensor.linky_15133285037556_consumption.attributes.yesterday | float(default=0) }}"
1 « J'aime »

Hello,
ça avance ^^

J’ai ce message d’erreur maintenant dans les logs:

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=4>' for attribute '_attr_native_value' in entity 'sensor.speedtest_server_name'
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=4>' for attribute '_attr_native_value' in entity 'sensor.speedtest_server_host'
TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).country) }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.speedtest_country'
TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).id) }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.speedtest_id'
TemplateError('JSONDecodeError: unexpected character: line 1 column 1 (char 0)') while processing template 'Template<template=({{ ((states("sensor.speedtest_cli_data") | from_json).location) }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.speedtest_location'

J’ai bien remis ton code.