Intégrer Speedtest CLI Officielle à Home Assistant

Salut @Guizmos, j’ai voulue copier ta carte mais je n’ai que la premiere carte Download qui s’affiche, je ne peux pas défiler comme si les autres n’existaient pas.

J’ai copié collé tes templates et sensor, j’ai bien installé la swipe-card.

Il y’a d’autres choses à faire avant ?

Salut

Hum bizarre. Tu as testé la swipe-card indépendamment ? J’ai l’impression que ton problème vient de la…

Il y’a tellement de ligne et avec les copier coller j’ai l’impression qu’il y’a des décalages, comment tu te retrouves la dedans toi ? Je peux pas copier à la suite de mon code

Balance ton code complet pour que je regarde

Finalement j’ai opté pour le mettre dans une autre vue, plus simple à gérer.

J’ai fais la mise à jour de HA et maintenant speedtest ne marche plus, j’imagine que je ne suis pas le seul ?

Bonjour,
pas de soucis de mon coté en 2023.8.3.

Regarde dans les logs l’erreur pour le speedtest.

J’ai une question relative a speedtest :
chez moi, sur tout les serveurs que je peut lister via speedtest --servers, ils sont tous en erreur avec :

[error] Error: [0] Timeout occurred in connect.
[error] Latency test failed

Je pense que je suis bloquer par mon firewall mais j’arrive pas a trouver de quel port (et en tcp ou udp), le service speedtest a besoin.

Salut @roumano

La doc :

Et vu sur d’autres forum, faudrait déjà ouvrir 8080/tcp et udp en sortie, pour voir.

Perso en entrée j’ai que le 443, le port de wireguard d’ouvert, et ça passe.

Sinon jouer du netstat pour voir.

1 « J'aime »

Merci, au top (j’avais pas trouver cette doc), je confirme qu’avec le 8080 en tcp et udp ça fonctionne

2 « J'aime »

Hello,
je viens de finir l’intégration merci à tous pour votre aide grâce aux échanges :slight_smile:
j’ai une question cependant sur le scan_interval…il ne le prends pas en compte et il ne pas semblé avoir vu des échanges là-dessus. A moins de passer par une automation, je ne vois pas.
le paramètre est-il utile?

Salut,

J’ai un scan_interval: 3600 , sa actualise bien toutes les heures.

Ta bien un scan_interval: en option pour les command_line.

merci pour ton retour je constate bien que pour toi le paramètre est fonctionnel.
Je vais vérifier s’il n’y a pas un problème de version

Bonjour,
J’ai un souci avec cette intégration : mes sensor upload et download sont en unknown depuis pas mal de temps, et en me penchant sur le code, je ne voie pas ce qui cloche :

      speedtest_cli_download:
        friendly_name: 'SpeedTest CLI Download'
        unique_id: speedtest_cli_download
#        icon: mdi:speedometer
        unit_of_measurement: Mbit/s
#        state_class: measurement
        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:
        friendly_name: 'SpeedTest CLI Upload'
        unique_id: speedtest_cli_upload
#        icon: mdi:speedometer
        unit_of_measurement: Mbit/s
#        state_class: measurement
        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 %}


comme vous pouvez le voir, le sensor speedtest cli data est actualisé, j’ai bien le ping également d’actualisé mais les 2 sensor upload et download eux non.
une idée d’où peut venir le problème ?
Update : Résolu : les ‹ unit_of_measurement: Mbit/s › dans le template des sensor faisait doublon avec le code dans le command_line, en les mettant en commentaire, cela fonctionne bien de nouveau.

1 « J'aime »

Je n’arrivais pas à faire fonctionner correctement l’intégration officielle de speedtest, merci @WarC0zes pour cette solution et ce tuto au top :slight_smile: !

speedtest

Bsoir,
En petit cadeau voici ma version adaptée d’une très belle carte glannée sur les forums:
image

Carte
type: custom:stack-in-card
cards:
  - type: custom:layout-card
    layout_type: grid
    layout:
      width: 100%
      grid-template-columns: 20% 50% 30%
      grid-template-rows: auto
    cards: null
  - type: custom:layout-card
    layout_type: grid
    card_mod:
      style: |
        ha-card {
          background: none !important; 
          border: none;
        }
    cards:
      - type: custom:mushroom-chips-card
        chips:
          - type: template
            entity: sensor.speedtest_cli_download
            card_mod:
              style: |
                ha-card {
                  background: none !important; 
                  border: none;
                }
            icon: mdi:speedometer
            icon_color: blue
            content: Speedtest
            tap_action:
              action: call-service
              service: homeassistant.update_entity
              service_data:
                entity_id: sensor.speedtest_cli_data
          - type: template
            card_mod:
              style: |
                ha-card {
                  background: none !important; 
                  border: none;
                }
            entity: sensor.speedtest_cli_ping
            icon: null
            icon_color: deep-orange
            content: '{{states(''sensor.speedtest_server_name'')}}'
          - type: template
            card_mod:
              style: |
                ha-card {
                  background: none !important; 
                  border: none;
                }
            entity: sensor.speedtest_cli_ping
            icon: null
            icon_color: deep-orange
            content: >-
              maj il y a
              {{relative_time(states.sensor.speedtest_cli_data.last_updated)}}
        alignment: left
  - square: false
    columns: 3
    type: grid
    cards:
      - type: custom:stack-in-card
        card_mod:
          style: |
            ha-card {
              background: none !important; 
              border: none;
            }
        cards:
          - type: custom:apexcharts-card
            card_mod:
              style: |
                ha-card {
                  background: none !important; 
                  border: none;
                }
            chart_type: radialBar
            series:
              - entity: sensor.speedtest_cli_download
                color: rgb(255, 87, 34)
                max: 1000
                show:
                  legend_value: false
            apex_config:
              plotOptions:
                radialBar:
                  offsetY: 0
                  startAngle: -108
                  endAngle: 108
                  hollow:
                    size: 80%
                  dataLabels:
                    name:
                      show: false
                    value:
                      show: false
                  track:
                    strokeWidth: 70%
                    margin: 0
              fill:
                type: gradient
                gradient:
                  shade: light
                  type: horizontal
                  shadeIntensity: 0.3
                  inverseColors: false
                  opacityFrom: 1
                  opacityTo: 1
                  stops:
                    - 0
                    - 50
                    - 55
                    - 90
              legend:
                show: false
              chart:
                height: 130
          - type: custom:mushroom-entity-card
            entity: sensor.speedtest_cli_download
            primary_info: state
            secondary_info: name
            name: Download
            icon_color: deep-orange
            layout: vertical
            card_mod:
              style: |
                ha-card {
                  background: none !important;
                  border: none;
                  margin-top: -65px;
                  width: auto%;
                  margin-left: auto;
                  margin-right: auto;
                  --card-primary-font-size: 12px;
                  --card-secondary-font-size: 10px;
                }
      - type: custom:stack-in-card
        card_mod:
          style: |
            ha-card {
              background: none !important; 
              border: none;
            }
        cards:
          - type: custom:mushroom-template-card
            primary: '{{ states(entity)}} ms'
            secondary: ping
            icon: mdi:wan
            entity: sensor.speedtest_cli_ping
            icon_color: |-
              {% set temp = states(entity) |float %}
              {% if temp < 10 %}
                light-green
              {% elif temp < 15 %}
                blue
              {% elif temp < 20 %}
                teal
              {% elif temp < 30 %}
                orange
              {% else %}
                red
              {% endif %}
            layout: vertical
            badge_icon: '  mdi:traffic-light'
            badge_color: |-
              {% set temp = states(entity) |float %}
              {% if temp < 10 %}
               light-green
              {% elif temp < 15 %}
                orange
              {% elif temp < 20 %}
                red
              {% endif %}
      - type: custom:stack-in-card
        card_mod:
          style: |
            ha-card {
              background: none !important; 
              border: none;
            }
        cards:
          - type: custom:apexcharts-card
            card_mod:
              style: |
                ha-card {
                  background: none !important; 
                  border: none;
                }
            chart_type: radialBar
            series:
              - entity: sensor.speedtest_cli_upload
                color: rgb(33, 150, 243)
                max: 500
                show:
                  legend_value: false
            apex_config:
              plotOptions:
                radialBar:
                  offsetY: 0
                  startAngle: -108
                  endAngle: 108
                  hollow:
                    size: 80%
                  dataLabels:
                    name:
                      show: false
                    value:
                      show: false
                  track:
                    strokeWidth: 70%
                    margin: 0
              fill:
                type: gradient
                gradient:
                  shade: light
                  type: horizontal
                  shadeIntensity: 0.3
                  inverseColors: false
                  opacityFrom: 1
                  opacityTo: 1
                  stops:
                    - 0
                    - 40
                    - 50
                    - 60
              legend:
                show: false
              chart:
                height: 130
          - type: custom:mushroom-entity-card
            entity: sensor.speedtest_cli_upload
            primary_info: state
            secondary_info: name
            name: Upload
            icon_color: blue
            layout: vertical
            card_mod:
              style: |
                ha-card {
                  margin-top: -65px;
                  width: auto;
                  margin-left: auto;
                  margin-right: auto;
                  --card-primary-font-size: 12px;
                  --card-secondary-font-size: 10px;
                  background: none !important;
                  border: none;
                }
  - type: custom:fold-entity-row
    card_mod:
      style: |
        ha-card {
          background: none;
          border: none;
        }
    head:
      type: custom:mushroom-template-card
      label: padding
      secondary: détails
      tap_action: none
      multiline_secondary: true
      card_mod:
        style: |
          ha-card {
            margin-left: 350px;
            background: none;
            border: none;
          }
    padding: 0
    entities:
      - type: custom:stack-in-card
        card_mod:
          style: |
            ha-card {
              background: none;
              border: none;
            }
        cards:
          - type: custom:mini-graph-card
            entities:
              - entity: sensor.speedtest_cli_download
                line_color: deep-orange
                y_axis: primary
              - entity: sensor.speedtest_cli_upload
                show_adaptive_color: true
                y_axis: primary
              - color: rgba(0,0,255,1)
                entity: binary_sensor.night_reworked
                name: Nuit
                show_line: false
                y_axis: secondary
            hours_to_show: 24
            points_per_hour: 4
            line_width: 1
            font_size: 50
            animate: true
            show:
              name: false
              icon: false
              state: false
              legend: true
              fill: fade
            state_map:
              - label: Day
                value: 'off'
              - label: Night
                value: 'on'
            card_mod:
              style: |
                ha-card {
                  background: none;
                  border: none;
                }
card_mod:
  style: |
    ha-card {
      background: none;
      margin: -5px -5px -5px;
      border: none;
    }

Mes Sensors
template:
  - sensor:
      #Speedtest Sensors
      - 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) }}"
      - 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 URL
        unique_id: Speedtest_url
        state: '{{ ((states("sensor.speedtest_cli_data") | from_json).url) }}'
      - name: Speedtest location
        unique_id: Speedtest_location
        state: '{{ ((states("sensor.speedtest_cli_data") | from_json).location) }}'

Il faudra avoir installé fold-entity-row GitHub - thomasloven/lovelace-fold-entity-row: 🔹 A foldable row for entities card, containing other rows avant
et en cerise sur le gateau ; tu peux créer ce sensor:

binary_sensor:
    #pour la connection internet
  - platform: ping
    name: internet_reachable
    host: 8.8.8.8
    scan_interval: 15

pour afficher cette carte:
image
il faudra installer depuis HACS la carte uptime-card → GitHub - dylandoamaral/uptime-card: Minimalistic uptime card for Home Assistant Lovelace UI

Carte
type: custom:uptime-card
entity: binary_sensor.internet_reachable
hours_to_show: 48
title_adaptive_color: true
status_adaptive_color: true
icon: mdi:web
update_interval: 30
severity: 10
icon_adaptive_color: true
tooltip_adaptive_color: true
alias:
  ok: Connecté
  ko: Déconnecté
title_template: Connection Internet
bar:
  height: 38
init: {}
color: {}
show:
  header: true
  title: true
  icon: true
  status: true
  timeline: true
  footer: true
  average: true
tooltip:
  hour24: true
tap_action: {}
alignment:
  icon_first: false
blink:
  speed: 1
clip: {}

*Tout ce qui est au dessus n’est que ma réutilisation du travail d’autres donc les merci sont pour toutes celles zé ceusses qui ont produit tout cela ^^

Bonjour

Depuis quelques jours (sans doute avec la mise à jour de décembre), l’intégration CLI Speedtest ne fonctionne plus.

Dans les fichiers journaux voici ce que j’ai

Logger: homeassistant.helpers.event
Source: helpers/template.py:571
First occurred: 12:19:05 (3 occurrences)
Last logged: 12:19:05

Error while processing template: Template<template=({{ (states(‹ sensor.speedtest_cli_data ›) | from_json).ping | round(2) }}) renders=2>
Error while processing template: Template<template=({{ ((states(‹ sensor.speedtest_cli_data ›) | from_json).download * 8 / 1000 / 1000) | round(2) }}) renders=2>
Error while processing template: Template<template=({{ ((states(‹ sensor.speedtest_cli_data ›) | from_json).upload * 8 / 1000 / 1000) | round(2) }}) renders=2>
Traceback (most recent call last):
File « /usr/src/homeassistant/homeassistant/helpers/template.py », line 569, in async_render
render_result = _render_with_context(self.template, compiled, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File « /usr/src/homeassistant/homeassistant/helpers/template.py », line 2247, in _render_with_context
return template.render(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File « /usr/local/lib/python3.11/site-packages/jinja2/environment.py », line 1301, in render
self.environment.handle_exception()
File « /usr/local/lib/python3.11/site-packages/jinja2/environment.py », line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File «  », line 1, in top-level template code
File « /usr/src/homeassistant/homeassistant/helpers/template.py », line 2102, in from_json
return json_loads(value)
^^^^^^^^^^^^^^^^^
File « /usr/src/homeassistant/homeassistant/util/json.py », line 43, in json_loads
return orjson.loads(__obj) # type:ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^
orjson.JSONDecodeError: unexpected character: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File « /usr/src/homeassistant/homeassistant/helpers/template.py », line 695, in async_render_to_info
render_info._result = self.async_render(
^^^^^^^^^^^^^^^^^^
File « /usr/src/homeassistant/homeassistant/helpers/template.py », line 571, in async_render
raise TemplateError(err) from err
homeassistant.exceptions.TemplateError: JSONDecodeError: unexpected character: line 1 column 1 (char 0)

Suis-je le seul ?

Non pareillement et l’intégration Speedtest ne fonctionne pas non plus chez moi… J’ai toujours cette foutue erreur

500 Internal Server Error Server got itself in trouble

Bonjour,
aucun soucis de mon coté en 2023.12.1

speedtest dl

Comment faire pour savoir d’où vient l’erreur ?

quand j’ai eu des soucis, je fesais un test du terminal, qui te donne une erreur plus precise.
Soit que le serveur est HS ou existe plus ( quand tu utilise un serveur précis ), soit que ta trop fait de demande et faut attendre ou que la license a expirer …

fais un test dans le terminal avec:

./speedtest