monaxe
Novembre 7, 2022, 4:24
41
Ok, mais alors, comment on peut définir les champs dans le template ?
value_template: >-
{{
{
"ping": value_json.ping.latency,
"download": value_json.download.bandwidth,
"upload": value_json.upload.bandwidth,
"isp": value_json.isp.????,
"server_name": value_json.server_name.????
}
| to_json
}}
Il faut lancer la commande ./speedtest --format=json --accept-license --accept-gdpr
et regarder ce que ça sort.
Ça devrait être quelque chose comme ça:
value_template: >-
{{
{
"ping": value_json.ping.latency,
"download": value_json.download.bandwidth,
"upload": value_json.upload.bandwidth,
"isp": value_json.isp,
"server_name": value_json.server.host
}
| to_json
}}
Tu peux remplacer .host
par .name
en fonction de ce que tu préfères.
monaxe
Novembre 7, 2022, 5:13
43
Super, un tout grand merci
j’ai vu qu’on pouvait aussi y intégrer d’autre information :
- location
- country
- url
- packetLoss
Bonjour,
j’étais intéresser aussi pour avoir le nom du serveur et la location. J’ai mis de coté , mais tu lance le sujet et ca serais sympa de partager comment tu as fait. Je pourrais le rajouter au tutoriel.
- 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,
"isp": value_json.isp,
"server_name": value_json.server.name
}
| to_json
}}
monaxe
Novembre 7, 2022, 5:55
46
sensor complet :
##Speedtest
- platform: command_line
name: "SpeedTest CLI Data"
unique_id: speedtest_cli_data
# Use the path as configured on your system
command: "config/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
}}
Et ensuite le template :
##Speedtest
# SpeedTest.net CLI
# https://www.speedtest.net/apps/cli
# Command_line sensor is in sensors.yaml
template:
- sensor:
- name: 'SpeedTest CLI Ping'
unique_id: speedtest_cli_ping
icon: mdi:speedometer
# TIME_MILLISECONDS: Final = "ms"
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
# DATA_RATE_MEGABITS_PER_SECOND: Final = "Mbit/s"
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 country
unique_id: Speedtest_country
state: '{{ ((states("sensor.speedtest_cli_data") | from_json).country) }}'
- name: Speedtest id
unique_id: Speedtest_id
state: '{{ ((states("sensor.speedtest_cli_data") | from_json).id) }}'
- name: Speedtest location
unique_id: Speedtest_location
state: '{{ ((states("sensor.speedtest_cli_data") | from_json).location) }}'
Merci à la communauté et bon projet à tous
3 « J'aime »
@monaxe
Si tu souhaites aéré la mise en page
- 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_server:
friendly_name: "SpeedTest Server"
icon_template: mdi:gauge
value_template: "{{ ((states('sensor.speedtest_data') | from_json).server_name) }}"
- platform: template
sensors:
speedtest_isp:
friendly_name: "SpeedTest ISP"
value_template: "{{ ((states('sensor.speedtest_data') | from_json).isp) }}"
1 « J'aime »
Merci @monaxe @ClassicRed , je mettrais le tuto a jours dès que j’ai 5 min.
bonsoir,
j’ai mis a jour le tuto et tester tout ca. C’est top
du coup j’ai rajouter les infos du serveur sur mon graph (mini-graph-card + card-mod)
je vous partage le code:
- type: custom:mini-graph-card
decimals: 0
hour24: true
height: 79
hours_to_show: 24
points_per_hour: 2
line_width: 2
entities:
- entity: sensor.speedtest_cli_ping
name: 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: 70
animate: true
color_thresholds:
- value: 34
color: '#336600'
- value: 36
color: '#f39c12'
- value: 38
color: '#d35400'
- value: 40
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;
}
ha-card {
box-shadow: none;
}
ha-card .states.flex::after {
content: "Serveur: {{states('sensor.speedtest_location')}} - {{states('sensor.speedtest_server_name')}}";
white-space: pre;
background-color: rgba(68, 115, 158,0.4);
padding: 2px 2px 0px 2px;
border-radius: 4px;
font-size: 14px;
}
2 « J'aime »
@WarC0zes
re
petit souci de chevauchement voir cadre blanc
supprime margin-top:
ha-card {
margin-top: -18px !important; # supprime c'est ligne
j’ai edit mon message et j’ai suprimer c’est ligne.
1 « J'aime »
Merci @WarC0zes
N’arrivant pas a avoir les infos via l’intégration freebox, cette solution me convient tout autant.
Merci à toi pour le partage!
1 « J'aime »
Bonjour à tous et merci pour ce super travail.
Question: est-il possible de définir un serveur de test par défaut ?
En effet tous les serveurs ne se valent pas (surtout avec une grosse connexion fibre)
Je n’ai rien vu qui faisait référence à cette possibilité
Merci d’avance
Herbs
Novembre 15, 2022, 4:08
55
Salut @Guizmos
Tu peux lister les serveurs les plus proches avec (à adapter selon l’installation) :
speedtest -L
Et dans la commande speedtest tu ajoutes l’id du serveur (exemple avec la commande fournie par @WarC0zes et l’ID 45446) :
/config/3rdparty/speedtest/speedtest -s 45446 --format=json --accept-license --accept-gdpr
2 « J'aime »
Super merci, ça fonctionne parfaitement
Est-il possible de lancer le test manuellement via un script (ou autre)?
Herbs
Novembre 15, 2022, 4:46
57
Script au sens « HA » ou au sens script plus large ?
Je voudrais pouvoir lancer un speedtest via un bouton depuis HA
Herbs
Novembre 15, 2022, 4:59
59
Si tu as suivi le tuto de WarC0zes, un bouton de ce genre devrait foncionner :
show_name: true
show_icon: true
type: button
tap_action:
action: call-service
service: homeassistant.update_entity
data: {}
target:
entity_id: sensor.speedtest_cli_data
icon: mdi:router-network
name: Update Speedtest
1 « J'aime »