speedtest interrogation
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
speedtest interrogation
Bonjour
je voulais mettre en place le speedtest pour monitorer mon internet
je vois que speedtest-cli n'est plus opérationnel et que le plugin speedtest a aussi des problème de fonctionnement
J'ai donc fait des test en script lua et je vois aussi que d'appeler speedtest dans le script dépasse les 10 secondes d'exécution
cela m'oblige donc à scheduler un shell dans le crontab , ce que je ne voulais plus faire en terme de traitement fonctionnel
De plus ma domotique tournant sur un RPI2 je serais limité à 100Mo via le port éthernet
Est-ce la seule solution ?
Bonne soirée
je voulais mettre en place le speedtest pour monitorer mon internet
je vois que speedtest-cli n'est plus opérationnel et que le plugin speedtest a aussi des problème de fonctionnement
J'ai donc fait des test en script lua et je vois aussi que d'appeler speedtest dans le script dépasse les 10 secondes d'exécution
cela m'oblige donc à scheduler un shell dans le crontab , ce que je ne voulais plus faire en terme de traitement fonctionnel
De plus ma domotique tournant sur un RPI2 je serais limité à 100Mo via le port éthernet
Est-ce la seule solution ?
Bonne soirée
Re: speedtest interrogation
Le principe étant de transférer un gros fichier et regarder le temps nécessaire, un P2 avec une connexion 100M, c'est à mon avis court.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: speedtest interrogation
Oui du coup je le ferais bien de mon nas le fichier
Sinon sur le rpi2 via dzvents ca dure plus de 10secondes l’execution du test
Sinon sur le rpi2 via dzvents ca dure plus de 10secondes l’execution du test
Re: speedtest interrogation
On peut faire de l'asynchrone avec dzvents.
Ça marche plutôt bien.
Ça marche plutôt bien.
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: speedtest interrogation
Tu fais comment pour executer la commande os.exécute en asynchrone ?
Re: speedtest interrogation
J'en parle dans les petits guides qui sont dans ma présentation : https://easydomoticz.com/forum/viewtopi ... 672#p84672
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
speedtest interrogation
Merci a tous els 2 pour le shell asynchrone je lis ca et je mets en place
par contre je fais un sed dans le dzvents et il est en erreur
os.execute("sudo grep 'Latency:' "..dir_speed..speed_file.." |sed 's/\"s\"+/;/g' > "..dir_speed..speed_tmp)
je fais en shell sed 's/\s\+/;/g' qui permet de remplacer le premier caractère du zone avec des espaces avec un ; mais en dzvents le \ ne passe pas et j'ai cette erreur : 2022-12-01 17:23:28.064 /home/pi/domoticz/scripts/dzVents/scripts/t_speedtest.lua:70: invalid escape sequence near '" |sed s/\s'
Avez vous une idée ? j'ai essayé avec une " aprèds le \ mais rien y fait, je n'ai plus d'erreur mais ca ne fait le job
par contre je fais un sed dans le dzvents et il est en erreur
os.execute("sudo grep 'Latency:' "..dir_speed..speed_file.." |sed 's/\"s\"+/;/g' > "..dir_speed..speed_tmp)
je fais en shell sed 's/\s\+/;/g' qui permet de remplacer le premier caractère du zone avec des espaces avec un ; mais en dzvents le \ ne passe pas et j'ai cette erreur : 2022-12-01 17:23:28.064 /home/pi/domoticz/scripts/dzVents/scripts/t_speedtest.lua:70: invalid escape sequence near '" |sed s/\s'
Avez vous une idée ? j'ai essayé avec une " aprèds le \ mais rien y fait, je n'ai plus d'erreur mais ca ne fait le job
Re: speedtest interrogation
Essaye avec un double antislash au lieu d'un seul antislash
devient
Code : Tout sélectionner
\Code : Tout sélectionner
\\-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: speedtest interrogation
je m'en rappelais plus, merci
vérifier l'architecture dans mon cas armhf avec
telecharger speedtest dans un repertoire à partir du lien https://www.speedtest.net/fr/apps/cli et ajouter les autorisation d'execution
tout fonctionne sans timeout en asynchrone, voici le code
voici le resultat sur un RPI2 limité à 100Mo
@keros ou @neutrino, peut-être je pourrais basculer ce topic dans les scripts Dzvents ?
Ma latence oscille entre 4 et 8ms
vous avez quoi comme latence en fibre ?
vérifier l'architecture dans mon cas armhf avec
Code : Tout sélectionner
dpkg --print-architecturetout fonctionne sans timeout en asynchrone, voici le code
Code : Tout sélectionner
-- Authors ----------------------------------------------------------------
-- https://www.domoticz.com/forum/viewtopic.php?f=21&t=13814
-- v1.0 pierrotori 20220212 transformation shell en dzvents
local scriptName = 'SPEEDTEST'
local scriptVersion = '1.0'
local download_idx = 251 -- idx du dummy custom
local upload_idx = 252 -- idx du dummy custom
local ping_idx = 253 -- idx du dummy custom
local f_dry_run = 'N' -- (Y) pour tester le script de protection solaire sans activer réellement le store
local f_notification = "N" -- (Y) Active les f_notifications, (N) les désactive
local SubSystem = domoticz.NSS_HTTP --[[ Systèmes de f_notification disponibles :
NSS_GOOGLE_CLOUD_MESSAGING NSS_HTTP NSS_KODI NSS_LOGITECH_MEDIASERVER NSS_NMA NSS_PROWL NSS_PUSHALOT NSS_PUSHBULLET NSS_PUSHOVER NSS_PUSHSAFER
Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l'ensemble par des {}.
Exemple :{domoticz.NSS_TELEGRAM, domoticz.NSS_HTTP}
--]]
local message = '.'
return {
active = true,
on = {
timer = { 'every hour' },
shellCommandResponses = { 'speedtestsh' },
customEvents = { 't_speedtest' }
},
logging = {
-- level = domoticz.LOG_INFO, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_ERROR,
-- level = domoticz.LOG_DEBUG,
-- level = domoticz.LOG_MODULE_EXEC_INFO,
marker = scriptName..' v'..scriptVersion
},
execute = function(dz,item)
local function file_ram(file_trt)
record_file = {} -- Table pour les lignes du fichier
local file = io.open(file_trt, "r") -- Ouvre le fichier en mode lecture
line = {} -- Table pour les lignes du fichier
for line in file:lines() do -- Pour chaque lignes
table.insert(record_file, line) -- On insère les lignes dans la table
end
return record_file
end -- function
--fichier et chemin por resultat
local dir_speed="/temp/"
local speed_file="speedtest.txt"
local speed_tmp="speedtest_new.txt"
local nbre=0
-- PROGRAM STARTS
dz.log('============== SPEEDTEST ==================', dz.LOG_INFO)
if item.isTimer then
dz.log('Déclenchement timer', dz.LOG_DEBUG)
dz.executeShellCommand(
{
command = "sudo /home/pi/speedtest/speedtest --accept-gdpr > "..dir_speed..speed_file,
callback = 'speedtestsh',
timeout = 20
}
)
elseif item.isCustomEvent then
dz.log('Déclenchement CustomEvents', dz.LOG_DEBUG)
dz.executeShellCommand(
{
command = "sudo /home/pi/speedtest/speedtest --accept-gdpr > "..dir_speed..speed_file,
callback = 'speedtestsh',
timeout = 20
}
)
elseif (item.isShellCommandResponse) then
if (item.statusCode==0) then
dz.log('Déclenchement shell asynchrone', dz.LOG_DEBUG)
-- specifique de la command il faut mettre une " apres le \
os.execute("sudo grep 'Latency:' "..dir_speed..speed_file.." |sed 's/\\s\\+/;/g' > "..dir_speed..speed_tmp)
os.execute("sudo grep 'Download:' "..dir_speed..speed_file.." |sed 's/\\s\\+/;/g' >> "..dir_speed..speed_tmp)
os.execute("sudo grep 'Upload:' "..dir_speed..speed_file.." |sed 's/\\s\\+/;/g' >> "..dir_speed..speed_tmp)
-- lecture fichier des script a notifier
-- on monte le fichier parametrage en ram
local record_speed = {}
record_speed = file_ram(dir_speed..speed_tmp)
for k,line_speed in ipairs(record_speed) do
r_speed = dz.utils.stringSplit(line_speed,";")
nbre = nbre + 1
dz.log('value:'..r_speed[2], dz.LOG_DEBUG)
if r_speed[2] == "Latency:" then
dz.devices(ping_idx).updateCustomSensor(r_speed[3])
message = "Latence:"..r_speed[3]
end
if r_speed[1] == "Download:" then
dz.devices(download_idx).updateCustomSensor(r_speed[2])
message = message.." Download:"..r_speed[2]
end
if r_speed[1] == "Upload:" then
dz.devices(upload_idx).updateCustomSensor(r_speed[2])
message = message.." Upload:"..r_speed[2]
end
end -- function
if f_notification == "Y" then
if SubSystem == nil then
dz.notify('Info', message)
dz.helpers.notify_general(scriptName,scriptName..';sms;'..message..';')
else
dz.notify('Info', message, '', '', '', SubSystem)
dz.helpers.notify_general(scriptName,scriptName..';sms;'..message..';')
end
end
end
else
return
end
end -- execute
} -- returnMa latence oscille entre 4 et 8ms
vous avez quoi comme latence en fibre ?