Intégrer Speedtest CLI Officielle à Home Assistant

Oui c’est bien cela le problème ta syntaxe n’est pas la bonne si tu mets cela dans le fichier sensors.yaml.

ah zut je me doutais bien qu’il y avait un soucis… Mais je ne sais comment resoudre le soucis de syntaxe…

En suivant correctement le tutoriel ? :rofl:

Pourquoi vouloir improviser sans maîtriser la chose ?

Pour cela que je demande de l’aide afin de progresser et apprendre de mes erreurs.

Si je comprends bien la premiere partie est sensors.yaml et la seconde creer un template.yaml ?

ou est ce que j’ai tout faux ?

Tout faux.

J’ai pas relu les 325 messages mais je lis dans le premier message :

1 « J'aime »

Ok. Dedans pas de soucis de fonctionnement.

Mais je voulais juste faire quelque de propre et pas surcharger configuration.yaml.
Apres si c’'est pas possible, tant pis.

Si tu veux découper la configuration, il faut ajouter la ligne template: !include template.yaml dans ton configuration.yaml.
Tu crées un fichier template.yaml dans /config ( ou homeassistant sous file editor )
dans le fichier template.yaml, tu colles 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) }}"

de même pour le command_line, dans le configuration.yaml, tu ajoutes la ligne
command_line: !include command_line.yaml

tu crées un fichier command_line.yaml, et colle le code :

  - sensor:
      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 
        }}

Si c’est possible, mais pourquoi vouloir mettre des command_lines dans un fichier sensors.yaml plutôt qu’un fichier command_line.yaml.

C’est un peu choquant, non ?

Tu mélanges deux syntaxes, je crois.

C’est surtout qu’il ne sais pas ce qu’il fais :wink:

Merci pour ton aide :rofl:

Je ne comprends pas les gens qui ne lisent pas un tuto et veulent changer des choses sans savoir.

Je n’ai pas de réponses à te donner :pleading_face:

1 « J'aime »

J’ai remis comme dans le tuto et tou est ok ca fonctionne nickel

Je t’ai mis les explications si tu veux découper ta configuration.

1 « J'aime »

Salut @Guizmos
Je détère un peu ce sujet :slight_smile:
As-tu le code mis à jour pour les dernières version de HA et de Bubble-Card ?

Et comment puis-je intégrer le code des cartes dans mon dashboard yaml qui contient déjà deux trois bricoles ?

Merci d’avance :wink:

Salut

Je comprends pas trop ta demande.
Le code n’a pas changé spécialement avec les dernières versions de HA.
Chez moi ça tourne et s’affiche correctement sans avoir changé le code.

Tu as déjà installé le module Speedtest et est-il fonctionnel ?

C’est la première étape, ensuite on regardera pour la partie card

Et bien j’ai du changer le Sensor car ça ne correspondait pas à ce qui est dans la doc de HA, ni à ce qu’à écrit @WarC0zes, mais bon, ça j’ai pu le corriger facilement :wink:
En revanche, je ne sais pas à quoi te sert la dernière partie de ce fichier :

- platform: template
    sensors:
      speedtest_temp_ping:
        unique_id: speedtest_temp_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_temp_download:
        unique_id: speedtest_temp_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_temp_upload:
        unique_id: speedtest_temp_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 %}

je n’ai vu nul part de référence à ces ID dans ton code de carte :wink:
Sachant qu’en plus friendly_name, icon_template , value_template me génère des erreurs dans HA.
Je pense que la manière de coder ça a dûe changer dans des MAJ de HA. Je ne l’ai donc pas mis.
Est-ce que ça sert ?

Je vais probablement prendre le code qui transforme les valeurs de débits en GBps si c’est supérieur à 1000.
Est-ce que c’est possible de mettre cette conversion dans le code state des deux sensors suivants ?

  - 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) }}"

Ensuite, ma grosse question porte sur les cartes ^^
Est-ce que si je colle dans dans un dashboard tout neuf ça fonctionnera ?
Idéalement je voudrais placer dans ce dashboard, dans une section séparée :

# dashboard_test.yaml
# ========================================================================================
# ===================== Dashboard de test Bubble-Cards, avec Popups ======================
# ========================================================================================

views:
  - path: default_view
    title: Home
    icon: mdi:home
    type: custom:masonry-layout
    layout:
      width: 300
      max_cols: 2
    background:
      image: /local/_wallpapers/homekit-bg-blue-red.jpg
    cards:
      # ╔══════════════════════════════════════════════════════════════════════════╗
      # ║ Les Popups                                                               ║
      # ╚══════════════════════════════════════════════════════════════════════════╝

      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~ UPDATES POPUP ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # Source : https://forum.hacf.fr/t/maj-de-hacs-version-1-34-vers-la-version-2-0-procedure-dinstallation/46439/72
      - type: vertical-stack
        cards:
          - type: custom:bubble-card
            card_type: pop-up 
            hash: "#update"
            name: Mises à jour
            icon: mdi:update
            close_on_click: false
            sub_button:
              - entity: switch.hacs_pre_release
                name: Beta
                show_name: false
                icon: ''
                show_state: true
                show_last_changed: false
                show_attribute: false
                tap_action:
                  action: toggle
                show_icon: false
                show_background: true



      # ╔══════════════════════════════════════════════════════════════════════════╗
      # ║ Les Cartes                                                               ║
      # ╚══════════════════════════════════════════════════════════════════════════╝

      - type: custom:bubble-card
        card_type: button
        button_type: state
        card_layout: large-2-rows
        name: Update(s) Software & modules
        entity: sensor.texte_avec_nombre_de_mise_a_jour_total
        icon: mdi:update
        show_state: true
        button_action:
          tap_action:
            action: navigate
            navigation_path: '#update'
        sub_button:
          - entity: sensor.tplt_available_updates_system
            icon: mdi:home-assistant
            show_background: false
            show_state: true
            tap_action:
              action: more-info
          - entity: sensor.tplt_available_updates_addon
            icon: mdi:puzzle
            show_background: false
            show_state: true
            tap_action:
              action: more-info
          - entity: sensor.tplt_available_updates_hacs
            icon: mdi:view-module
            show_background: false
            show_state: true
            tap_action:
              action: more-info


      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~ UPDATES CARDS ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # Source : https://forum.hacf.fr/t/maj-de-hacs-version-1-34-vers-la-version-2-0-procedure-dinstallation/46439/72
      - type: conditional
        conditions:
          - condition: state
            entity: binary_sensor.tplt_available_updates
            state: 'on'
        card:
          type: vertical-stack
          cards:
            - type: custom:bubble-card
              card_type: separator
              name: "Mise(s) à jour disponible(s):"
              <<: &separator
                styles: |-
                  ha-card { color: var(--primary-text-color); }
                  .bubble-line {
                    background: var(--primary-text-color);
                    opacity: 0.2;
                  }
            - !include /config/YAML/dashboards/card_update/card_update_available.yaml

      - type: conditional
        conditions:
          - condition: state
            entity: binary_sensor.tplt_skipped_updates
            state: 'on'
        card:
          type: vertical-stack
          cards:
            - type: custom:bubble-card
              card_type: separator
              name: "Mise(s) à jour ignorée(s):"
              <<: *separator
            - !include /config/YAML/dashboards/card_update/card_update_skipped.yaml

      - type: conditional
        conditions:
          - condition: state
            entity: binary_sensor.tplt_update_restart
            state: 'on'
        card:
          type: markdown
          card_mod:
            class: stock
            style:
              .: |
                ha-markdown {
                  padding: 0px !important;
                }
              ha-markdown $:
                .: |
                  ha-alert {
                    margin: 0px !important;
                  }
                ha-alert $: |
                  .issue-type::after {
                    border-radius: var(--ha-card-border-radius) !important;
                  }
                p: |
                  ha-alert {
                    border-radius: var(--ha-card-border-radius);
                    border: 2px dashed var(--error-color);
                  }
          content: >
            <ha-alert alert-type="error">{{ state_attr('binary_sensor.tplt_update_restart','list') }}</ha-alert>

C’est possible ?

@Guizmos
Je viens de tenter de placer ton code dans une section :

# ... voir code prédécent pour ce qui précède ...
  - path: speedtest
    title: Speetest
    icon: mdi:speedometer
    type: custom:masonry-layout
    layout:
      width: 300
      max_cols: 2
    background:
      image: /local/_wallpapers/homekit-bg-blue-red.jpg
    tap_action:
      action: fire-dom-event
      haptic: heavy
      browser_mod:
        service: browser_mod.popup
        data:
          style: |-
            --popup-header-background-color: black;
            --popup-background-color: transperant;
            --popup-border-radius: 15px;
            --popup-border-color: transparent;
            --popup-padding-x: 5px;
          size: normal
          content:
            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;

Je n’ai pas d’erreurs, mais je n’ai rien dans la section :

Concernant ton problème avec le template (prmièree partie qui génère des erreurs) tu dois avoir une mauvaise mise en forme :

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) }}"
      - 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(0) }}"
      - 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(0) }}"
      - 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 CLI URL'
        unique_id: speedtest_url
        state: '{{ ((states("sensor.speedtest_cli_data") | from_json).url) }}'

Concernant la conversion pour afficher du Gbit au lieu des Mbit, voici ce que j’ai pour toi :

sensor:
  - platform: template
    sensors:
      speedtest_temp_ping:
        unique_id: speedtest_temp_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_temp_download:
        unique_id: speedtest_temp_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(1) -%}
          {% if download | float > 1000 %}
            {{ (download | int / 1000) | round(2) | replace('.',',') }} Gb/s
          {% else %}
            {{ download | replace('.',',') }} Mb/s
          {% endif %}
      speedtest_temp_upload:
        unique_id: speedtest_temp_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(0) -%}
          {% if upload | float > 1000 %}
            {{ (upload | int / 1000) | round(2) | replace('.',',') }} Gb/s
          {% else %}
            {{ upload | replace('.',',') }} Mb/s
          {% endif %}

Sensor de base :
Capture d’écran 2024-10-03 à 18.52.24

Sensor en Gbit:
Capture d’écran 2024-10-03 à 18.52.43