Intégrer Speedtest CLI Officielle à Home Assistant

indeed, mais il faut pas penser que le Pi(4) n’est pas costaud et qu’il ne tiens pas la charge…

Merci WarC0zes pour ce tuto, je n’avais pas vu que sur ma page système, les valeurs de speed test ne s’affichaient plus.
:ok_hand:

1 « J'aime »

Message recu d’orange c’est aprem qui fait plaisir « Vous êtes élligible a la fibre » .
2Gbits / 800mbits contre actuellement 9mbits / 1mbits :crazy_face:
Le RPi va plus suivre avec speedtest :joy:

En même temps 2Gb, c’est quand même vachement marketing…
Mais ça va clairement te changer la vie

Salut tout le monde,

Je vais me permettre d’y aller avec ma méthode :wink:

En préambule je tiens à préciser que mon HA tourne dans un container « podman » et qu’il est posé sur une machine avec une carte ethernet 1Gb/s.
A côté de ça je dispose d’un serveur proxmox qui lui possède une carte en 2.5Gb/s.
Enfin je suis fibré par free en 8Gb/s (#marketing) :stuck_out_tongue:
Bref je voulais que le test se fasse depuis proxmox.

  • Pour ça j’ai installé speedtest-cli dans un container lxc (debian 11).
sudo apt-get install curl
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get install speedtest
  • Maintenant le script.

Prérequis avoir la possibilité de faire du « scp » entre proxmox et la machine hébergeant le container HA.

#!/bin/bash

#set -x

cmd='/usr/bin/speedtest -s 45446 -f json'	    # la commande speedtest avec l'id du serveur de test que j'ai sélectionné
file='/var/log/speedtest.json'			        # le chemin du fichier que le test va nous générer
dest='/xxxxx/config/custom_things/speedtest'	# le chemin de la conf sur le host HA

key='/home/xxxxxx/.ssh/id_ed25519'		        # la clé ssh qui va bien
port='xxxx'					                    # le port ssh personnalisé de ma config ssh sur le host HA
toto='xxxxx@192.168.x.xx'			            # Un bout de la commande scp avec user@ip_host_ha

lxc-attach -n 108 -- $cmd > $file		        # La commande qui permet d'exécuter des commande depuis le Host proxmox dans le CT lxc
						                        # 108 l'id du CT lxc où est installé speedtest-cli

ping -c 4 192.168.x.xx				            # là je fais un ping du host HA pour être certain qu'il est up
rping=$?
if [ $rping == 0 ]
then
  scp -i $key -P $port $file $toto:$dest	    # le scp qui va envoyer le fichier généré lors du test sur le host HA
else
  echo "toto indisponible"
fi

Le script se lance en crontab toutes les 4 heures :

0 */4 * * * /le_chemin_du_script/speedtest_to_ha.sh >/dev/null 2>&1
  • Les sensors HA :
### speedtest

- platform: file
  name: Speedtest Down Speed
  file_path: /config/custom_things/speedtest/speedtest.json
  value_template: '{{ (value_json.download.bandwidth * 8 / 1000 / 1000) | round(2) }}'
  unit_of_measurement: "Mbit/s"

- platform: file
  name: Speedtest Up Speed
  file_path: /config/custom_things/speedtest/speedtest.json
  value_template: '{{ (value_json.upload.bandwidth * 8 / 1000 / 1000) | round(2) }}'
  unit_of_measurement: "Mbit/s"

- platform: file
  name: Speedtest Ping
  file_path: /config/custom_things/speedtest/speedtest.json
  value_template: '{{ value_json.ping.latency | round(2) }}'
  unit_of_measurement: "ms"
  • Et enfin l’aperçu côté dashboard :

image

C’est en prod depuis hier, j’ai encore à améliorer le script pour la gestion des erreurs et éventuellement mettre en place des logs.

Mais sur le principe ça roule :wink:

Merci à @WarC0zes pour avoir mis ce sujet en avant !!!

1 « J'aime »

Juste une question de curiosité pourquoi lxc pour le container speedtest et podman pour HA ?

Et pourquoi faire du scp et pas juste monter le fichier json dans le container ?

Le container lxc est sur mon promox/serveur principal.

Et podman sur une autre machine parce que :

  • Au travail une partie de notre infra va migrer sous kubernetes/podman et c’était un peu histoire de prendre un peu d’avance et surtout la curiosité d’apprendre.
  • Et toute ma domotique (HA et ses connexes) sont sur cette machine physique dédiée.

Comme il s’agit de 2 serveurs différents et que l’un (proxmox) est équipé d’une carte 2.5Gb j’ai décidé de faire le test sur le serveur principal.

Par conséquent il fallait trouver un moyen d’expédier le fichier vers la machine où tourne HA d’où le scp.

Et là je le dépose dans le dossier /config que je monte dans le container HA.

J’espère avoir répondu à tes questions, si tu en as d’autre ou que je n’ai pas été assez clair n’hésites pas à me le dire :wink:

1 « J'aime »

Merci j’avais loupé ce point ! Ca devient d’un coup plus logique !

Effectivement c’était une info importante :wink:

Là où ma mécanique est un peu bizarre c’est que j’aurait pu côté proxmox, tout internaliser dans le container lxc.

Mais j’ai pris l’habitude de désactiver le ssh interne aux containers lxc, et par conséquent le ssh n’est dispo que depuis le host proxmox.

Bonjour WarC0zes,

Je viens de suivre votre guide d’installation, même sans compétence informatique, ça fonctionne parfaitement.
je trouve la carte plutôt sympathique, pouvez vous nous donner les infos pour la réaliser.

Merci d’avance

Voici le code de la carte. Adapter a vos besoin. Il vous faudras installer les cartes bar-card, mini-graph-card, stack-in-card et card-mod.

type: custom:stack-in-card
mode: vertical
keep:
  box_shadow: true
  margin: true
  border_radius: true
  background: true
  outer_padding: false
cards:
  - type: custom:bar-card
    entities:
      - entity: sensor.speedtest_cli_download
        name: Orange Speed Download
        icon: fas:download
        color: '#336600'
        positions:
          icon: inside
          minmax: inside
        animation:
          state: 'on'
          speed: '1'
        min: '0'
        max: '9'
        height: 27px
      - entity: sensor.speedtest_cli_upload
        direction: right
        name: Orange Speed Upload
        icon: fas:upload
        color: rgb(250, 0, 1)
        positions:
          icon: inside
          minmax: inside
        animation:
          state: 'on'
          speed: '1'
        min: '0'
        height: 27px
        max: '0.9'
    decimal: '2'
    animation:
      state: 'on'
      speed: '3'
    style: |
      ha-card {
        font-size: 15px;
      }
      ha-card {
        --bar-card-border-radius: 0px;
      }
    positions:
      indicator: 'off'
    entity_row: true
  - type: custom:mini-graph-card
    decimals: 0
    hour24: true
    height: 40
    hours_to_show: 24
    points_per_hour: 2
    line_width: 2
    entities:
      - entity: sensor.speedtest_cli_ping
        name: Orange Ping
    show:
      fill: true
      graph: line
      icon: true
      name: true
      state: true
      labels: false
      extrema: false
      average: false
      icon_adaptive_color: true
    align_icon: right
    align_state: left
    font_size: 55
    animate: true
    color_thresholds:
      - value: 30
        color: '#336600'
      - value: 50
        color: '#f39c12'
      - value: 70
        color: '#d35400'
      - value: 90
        color: '#c0392b'
    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: 1 !important;
      }
1 « J'aime »

Je viens de mettre en place vos recommandations, tout est opérationnel.
Merci beaucoup!

1 « J'aime »

Bonsoir,
enfin passer a la fibre j’ai dessuite voulu tester speedtest sur mon rpi3 B.
Voile le resultat . En théorie je devrais fait du 100/100mbits mais j’ai la moitié en dl.
speedtest fibre

Test de mon pc, a fond !

Il y a t’il des réglages sur le rpi pour optimiser la vitesse réseau ?

Edit:
peu être mon câble réseau qui est pas bon, je vérifierais demain.

Edit 2:
Avec un autre câble réseau j’ai gagner du débits. 70 / 88 mbits :slight_smile:

Hello

De mémoire le RPI est au max a 300 Mbps

Ca depend du Pi
Tu peut atteindre ces niveau (pas fait par moi et via iperf ) :

  • 3B: 94.8 Mbps
  • 3B+: 224 Mbps
  • 4B: 933 Mbps

Moi l’iperf avec le Pi4 en réseau local me donne 939 Mbits/sec

1 « J'aime »

Ok, merci @roumano pour ces précisions.

Bonjour, est ce qu’il y aurait moyen de reprendre le nom du serveur ?
(server_name ou isp )
J’ai ajouté ceci :

    - name: Speedtest ISP
      state: "{{ ((states('sensor.speedtest_cli_data') | from_json).isp) }}"
    - name: Speedtest Server Name
      state: "{{ ((states('sensor.speedtest_cli_data') | from_json).server_name) }}"
    

Mais ne fonctionne pas, une idée ?

Hello

As tu essayé comme ceci

  - name: Speedtest ISP
    state: '{{ state_attr("sensor.speedtest_ping", "isp") }}'
  - name: Speedtest Server Name
    state: '{{ state_attr("sensor.speedtest_ping", "server_name") }}'

Ne fonctionne pas non plus et même quand je change avec le nom de mon sensor.

Salut,

Il faut aussi mettre à jour le value_template du sensor command_line pour qu’il contienne les champs que tu souhaites.
Pour l’instant, le sensor renvoie un JSON ne contenant que ping, download et upload.