Recherchez dans la Communauté

Vous avez une question ?

Interrogez la communauté

internet & fixe Livebox

Script shell de collecte des statistiques xDSL LB4 v4.65.0

matrixbx
fan
fan
509  

Script shell de collecte des statistiques xDSL LB4 v4.65.0

Bonjour à toutes et tous.

 

Après celui pour contourner le bug de la perte de l'admin distante après reboot sur LB4 en v4.65.0 (voir ici ), et celui pour récupérer les règles firewall qui "disparaissent" (voir  ) en voici un autre pour relever automatiquement les données de synchro xDSL de l'onglet "Informations système / DSL" (et "DSL Advanced").

 

Nécessite curl et jq (à installer au préalable si besoin avec "sudo apt install curl jq").

Fonctionne également sous Windows (10) avec WSL (testé ok avec valeur de TIMEOUT augmentée).

Devrait fonctionner sur n'importe quel Unix like, MacOs, un NAS, etc (pas testé).

 

 

#!/usr/bin/env bash
# Script de récupération des stats xdsl sur LB4.
# Testé sur Sercomm v4.65.0 en ADSL seulement.
# Devrait probablement fonctionner aussi sur LB3, à tester.

# Dé commenter pour debug.
# set -xv

DELAIS="295"  # Délais en secondes entre deux interrogations de la box, en local l'interrogation prend ~3sec et un peu plus en distant. La session tombe si inactive plus d'environ 10min.
TIMEOUT=5 # Valeur de timeout pour curl.

# Dé commenter pour exécution en admin distante.
# PROTO="-k https"
# URL="Mon-Nom-DNS.no-ip.org" # Nom DNS, à adapter.
# PORT="12345" # Port utilisé, à adapter.
# USERNAME="matrix-bx" # Nom à adapter.
# PASSWORD="Sup3rSecret" # À adapter.

# Commenter pour exécution en admin distante.
PROTO="http"
URL="192.168.1.1" # Adapter si besoin.
PORT="80"
USERNAME="admin"
PASSWORD="MonMotDePasseSuperSecret" # À adapter.

LB4Login () {
CONTEXTID=$(curl -m $TIMEOUT -c .cookies-jar.txt -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah-Login' \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
--data-raw $'{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"webui","username":"'$USERNAME'","password":"'$PASSWORD'"}}' 2>/dev/null | \
jq -r '.data.contextID' 2>/dev/null)
SESSIONID=$(awk /$URL/'{print $NF}' .cookies-jar.txt)
COOKIEID=$(awk /$URL/'{print $6}' .cookies-jar.txt | cut -d "/" -f1)
! [[ -z $SESSIONID ]] && ! [[ -z $COOKIEID ]]  && rm .cookies-jar.txt && return 0
[[ $CONTEXTID == "null" ]] && echo "Échec d'ouverture de session, vérifier les paramètres." && exit 1
} # Fonction d'ouverture de session sur la box, durée max session inactive env 10 min.

GetLB4MACAddress () {
LB4MACAddress=$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID -H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw '{"service":"NMC","method":"getWANStatus","parameters":{}}' 2>/dev/null | \
jq -r '.data.MACAddress' 2>/dev/null)
[[ $LB4MACAddress == "null" ]] && LB4Login && GetLB4MACAddress
[[ -z $LB4MACAddress ]] && LB4Login && GetLB4MACAddress
! [[ -z $LB4MACAddress ]] && return 0
} # Fonction de récupération de l'adresse MAC de la box et de réouverture de session en cas d'échec.

GetLB4xDSLStats () {
XDSLSTATS=$(date +%Y%m%d-%H%M%S)" "\
$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw $'{"service":"NeMo.Intf.dsl0","method":"get","parameters":"dsl0"}'  2>/dev/null | \
jq -r '.status.LineStatus, .status.Line_LastChangeTime, .status.ModulationType, .status.StandardUsed, .status.Line_ACTINP, .status.Line_ATN70, .status.Line_UpstreamAttenuation, .status.Line_UpstreamLineAttenuation, .status.Line_DownstreamAttenuation, .status.Line_DownstreamLineAttenuation, .status.UpstreamCurrRate, .status.Line_UpstreamMaxRate, .status.Line_DownstreamCurrRate, .status.Line_DownstreamMaxRate, .status.Line_UpstreamNoiseMargin, .status.Line_DownstreamNoiseMargin'  2>/dev/null)" "\
$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw $'{"service":"NeMo.Intf.dsl0","method":"getDSLStats","parameters":{}}' 2>/dev/null | \
jq -r '.status.LinkRetrain, .status.LossOfFraming, .status.ErroredSecs, .status.SeverelyErroredSecs, .status.FECErrors, .status.ATUCFECErrors, .status.CRCErrors, .status.ATUCCRCErrors' 2>/dev/null)
echo $XDSLSTATS | tee -a $(date +%Y%m%d)"_"$URL"_Stats_xDSL.log" # Remplacer "| tee -a" par ">>" pour ne rien afficher à l'écran, à faire également plus bas pour la génération du fichier log.
} # Fonction de récupération des stats xDSL.

# Fonction générique de récupération des valeurs xDSL "avancées".

GetLB4xDSL_Advanced () {
case $1 in 
BITs) TYPE=BITs ;; 
RNC_QLN) TYPE=RNC_QLN ;; 
HLOG) TYPE=HLOG ;; 
SNR) TYPE=SNR ;;  
*) echo "Type mesure non supporté !" ; return 1 ;; 
esac
LB4xDSL_Advanced=$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \ -H 'Authorization: X-Sah '$CONTEXTID \ -H 'Content-Type: application/x-sah-ws-4-call+json' \ -H 'X-Context: '$CONTEXTID \ -H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \ --data-raw $'{"service":"NeMo.Intf.dsl0","method":"getXDSLNoiseMeasure","parameters":{"typeMeasure":"'$TYPE'"}}' 2>/dev/null | \ jq -r '.status.'$TYPE'' 2>/dev/null ) echo $(date +%Y%m%d-%H%M%S)" "$LB4xDSL_Advanced >> $(date +%Y%m%d)"_"$URL"_xDSL_"$TYPE".log" } BouclePrincipale () { while true do if ! [[ -f $(date +%Y%m%d)_"$URL"_Stats_xDSL.log ]] # Création automatique d'un fichier de log avec entêtes. then echo "Date Status LastChangeTime ModulationType StandardUsed ACTINP ATN70 UpstreamAttenuation UpstreamLineAttenuation DownstreamAttenuation DownstreamLineAttenuation UpstreamCurrRate UpstreamMaxRate DownstreamCurrRate DownstreamMaxRate UpstreamNoiseMargin DownstreamNoiseMargin LinkRetrain LossOfFraming ErroredSecs SeverelyErroredSecs FECErrors ATUCFECErrors CRCErrors ATUCCRCErrors" | tee -a $(date +%Y%m%d)_"$URL"_Stats_xDSL.log # Remplacer "| tee -a" par ">>" pour ne rien afficher à l'écran, à faire également plus haut dans la fonction GetLB4xDSLStats. fi GetLB4MACAddress # sert juste à vérifier si la session est valide et à en ré ouvrir une sinon. GetLB4xDSLStats # Récupère, log et affiche les valeurs. Modifier la fonction GetLB4xDSLStats pour ne rien afficher. # GetLB4xDSL_Advanced BITs # À dé commenter si voulu, n'affiche rien, enregistre dans un fichier. # GetLB4xDSL_Advanced RNC_QLN # Chaque interrogation prend un peu de temps, adapter éventuellement le DELAIS en fonction. # GetLB4xDSL_Advanced HLOG # GetLB4xDSL_Advanced SNR sleep $DELAIS done } if [[ $(ps aux | grep -v -E "pluma|gedit|nano" | grep -c $0 ) -gt 4 ]] # On vérifie si il y a déjà une instance du script active, on quitte si c'est le cas. then echo "Script $0 déjà en cours d’exécution !" exit 1 fi BouclePrincipale

Lancé via cron au démarrage (@reboot ~/LB4_Monitor_xDSL.sh).

 

Pensez à rendre exécutable le script avec "chmod +x ~/LB4_Monitor_xDSL.sh".

 

Bonne journée.

Politesse et courtoisie ne sont pas en option (en cas d'abus graves et répétés, \o< >/dev/null).
Suggérer, expliquer, démontrer ne suffit parfois pas. On apprend de ses erreurs, enfin la plupart. "I'm All Out of Gum."

Vous avez une question ?

Interrogez la communauté

Déjà 795790 membres inscrits 🧡

2388 personnes actuellement en ligne

Tous les membres en ligne