bonjour à tous,
EDIT du 31/07/2024 : Rajout de la gesiton de plusieurs NSPAnel pro sur un meme reseau (option -s sur toutes les commandes adb)
Je vous partage ma dernière réalisation (100% du script shell via chatGPT, oui, oui !!!) pour manager mes NSPanel PRO …
On commence par le résultat :
Ce qui est surveiller :
- Si il est online (ping)
- Si il est attaché à Jeedom (adb connect), necessaire pour le manager
- Si le process JC est present
- l’uptime
- le CPU
- la mémoire
- le stockage
- la charge 5min et la charge 15min
- allumer/eteint l’ecran et remonte l’état de l’ecran
- simuler un appui sur le bouton home
On peut ensuite imaginer plein d’autres choses (quasi tous les elements systeme via les commandes adb shell)
pour réaliser ceci, très simple … le plugin script, 1 seul script, 1 seul équipement
1 - installer le package android-tools-adb
sudo apt update && sudo apt install android-tools-adb
et créer un repertoire avec les droits www-data pour l’utilisation de adb via le plugin script
sudo mkdir /var/www/.android
sudo chown www-data.www-data /var/www/.android
tout le reste si passe sur Jeedom dans le plugin-script (je suppose donc que vous l’avez installé
2 - créer 1 équipement pour chaque NSPanel Pro
3 - integrer le script
Créer 1 commande de type info, puis creer un script (je l’ai appelé NSPanel_adb_tools.sh, le .sh à la fin est indispensable).
Editer ce script et copier le code ci-après dedans :
Détail script
#!/bin/bash
# Release notes
# Version initiale du 02/08/2023 10:00
# Version du 02/08/2023 10:00 - Rajout des commandes suivantes (screen_toggle, sleep, wakeup, screen)
# version du 31/07/2024 10:00 - Rajout de la gestion de plusieurs NSPAnel Pro sur le reseau
# Version du 26/08/2024 12:00 - Correction des retour opur les charge 5min et 15min
# Vérifier si adb est installé sur le système
adb_path=$(which adb)
if [ -z "$adb_path" ]; then
echo "adb non installé - sudo apt install android-tools-adb"
exit 2
fi
# Vérifier si l'adresse IP est passée en paramètre
if [ $# -lt 1 ]; then
echo "Pas d'adresse IP passée en paramètre"
exit 3
fi
check_online_status() {
ping -c1 -q $1 1>/dev/null 2>&1
if [ $? -eq "0" ]; then
echo "1"
else
echo "0"
fi
}
# Connecter l'appareil via adb
connect_device() {
adb connect $1:5555
sleep 5
adb_devices=$(adb devices | grep "$1:5555" | awk '{print $1}')
if [ -z "$adb_devices" ]; then
exit 99
fi
}
# Déconnecter l'appareil via adb
disconnect_device() {
adb disconnect $1:5555
}
# Vérifier si l'appareil est déjà connecté via adb
check_attached_status() {
adb_devices=$(adb devices | grep "$1:5555" | awk '{print $1}')
if [ -n "$adb_devices" ]; then
echo "1"
else
echo "0"
fi
}
# Redémarrer l'appareil via adb
reboot_device() {
adb_devices=$(adb devices | grep "$1:5555" | awk '{print $1}')
if [ -n "$adb_devices" ]; then
adb -s $1:5555 reboot
sleep 5
get_reboot_timestamp $1
else
exit 99
fi
}
# Obtenir le timestamp du dernier reboot de l'appareil
get_reboot_timestamp() {
reboot_timestamp=$(adb -s $1:5555 shell date +%s)
echo "$reboot_timestamp"
}
# Vérifier si le processus en paramètre est en cours d'exécution
check_process() {
process_list=$(adb -s $1:5555 shell ps | grep $2)
if [ -n "$process_list" ]; then
echo "1"
else
echo "0"
fi
}
# Vérifier l'utilisation de la mémoire RAM de l'appareil en pourcentage
check_ram_usage() {
ram_info=$(adb -s $1:5555 shell cat /proc/meminfo | grep "MemTotal\|MemFree")
total_ram=$(echo "$ram_info" | awk 'NR==1{print $2}')
free_ram=$(echo "$ram_info" | awk 'NR==2{print $2}')
used_ram=$(expr $total_ram - $free_ram)
ram_percentage=$(expr $used_ram \* 100 / $total_ram)
echo "$ram_percentage"
}
# Vérifier l'utilisation du stockage de l'appareil en pourcentage
check_storage_usage() {
storage_info=$(adb -s $1:5555 shell df /data | grep "/data")
total_storage=$(echo "$storage_info" | awk '{print $2}')
used_storage=$(echo "$storage_info" | awk '{print $3}')
storage_percentage=$(expr $used_storage \* 100 / $total_storage)
echo "$storage_percentage"
}
# Vérifier l'utilisation du processeur (CPU) de l'appareil en pourcentage
check_cpu_usage() {
cpu_info=$(adb -s $1:5555 shell dumpsys cpuinfo | grep TOTAL)
cpu_usage=$(echo "$cpu_info" | awk '{print $1}')
echo "$cpu_usage"
}
# Vérifier l'uptime de l'appareil au format renvoyé par la commande adb shell up
check_uptime() {
uptime_info=$(adb -s $1:5555 shell uptime | awk -F 'up' '{print $2}' | awk -F ',' '{print $1}')
echo "$uptime_info"
}
# Obtenir la charge moyenne sur 5 minutes
get_load_avg_5min() {
load_avg_5min=$(adb -s $1:5555 shell uptime | sed 's/,//g' | awk '{print $(NF-1)}')
echo "$load_avg_5min"
}
# Obtenir la charge moyenne sur 15 minutes
get_load_avg_15min() {
load_avg_15min=$(adb -s $1:5555 shell uptime | sed 's/,//g' | awk '{print $(NF)}')
echo "$load_avg_15min"
}
# Allume/éteint l'écran
device_screen_toggle() {
screen=$(adb -s $1:5555 shell input keyevent KEYCODE_POWER)
echo "$screen"
}
# Mettre le device en veille
device_sleep() {
screen=$(adb -s $1:5555 shell input keyevent KEYCODE_SLEEP)
echo "$screen"
}
# Réveiller le device
device_wakeup() {
screen=$(adb -s $1:5555 shell input keyevent KEYCODE_WAKEUP)
echo "$screen"
}
check_screen_state() {
screen_state=$(adb -s $1:5555 shell dumpsys display | grep "mScreenState=ON"
)
if [ -n "$screen_state" ]; then
echo "1"
else
echo "0"
fi
}
# Home
home() {
home=$(adb -s $1:5555 shell input keyevent KEYCODE_HOME | grep "ON")
echo "$home"
}
# Vérifier si l'appareil est déjà attaché
is_connected=$(check_attached_status $1)
if [ "$is_connected" -eq 0 ]; then
connect_device $1
fi
# Exécuter l'action spécifiée par l'utilisateur
case "$2" in
"online")
check_online_status $1
;;
"attached")
check_attached_status $1
;;
"reboot")
reboot_device $1
;;
"check_process")
check_process $1 $3
;;
"check_cpu")
check_cpu_usage $1
;;
"check_ram")
check_ram_usage $1
;;
"check_storage")
check_storage_usage $1
;;
"uptime")
check_uptime $1
;;
"load_avg_5min")
get_load_avg_5min $1
;;
"load_avg_15min")
get_load_avg_15min $1
;;
"screen_toggle")
device_screen_toggle $1
;;
"sleep")
device_sleep $1
;;
"wakeup")
device_wakeup $1
;;
"screen")
check_screen_state $1
;;
"home")
home $1
;;
*)
check_online_status $1
;;
esac
Voilà, le plus dur est fait
4 - créer toutes les commande nécessaires
avec pour le script le format suivant :
/var/www/html/plugins/script/data/NSPanel_adb_tools.sh <adresse IP> <option>
De mon coté, je recupere l’adresse IP via le plugin scan.IP, ce qui donne :
/var/www/html/plugins/script/data/NSPanel_adb_tools.sh #[Periphériques][Scan.IP NSPanel Entrée][IpV4]# load_avg_5min
les commandes foncitons possibles sont les suivantes :
les options possibles sont les suivantes (et les commandes associées à créer :
- online - commande info binaire non historisée
- attached - commande info binaire non historisée
- reboot - commande action
- check_process - commande info binaire non historisée - mettre le nom du process en parametre 3 (com.jeedomconnect.app pour JC)
- check_cpu - commande info numérique 0-100 % historisée
- check_ram - commande info numérique 0-100 % historisée
- check_storage - commande info numérique 0-100 % historisée
- uptime - commande info autre non historisée
- load_avg_5min - commande info numérique historisée
- load_avg_15min - commande info numérique historisée
- screen_toggle - commande action - allume/eteint l’ecran (equivalent sleep/wakeup)
- sleep - commande action - passe le device en mode sleep
- wakeup - commande action - réveille le device
- screen - commande info binaire non historisée - affiche l’état de l’ecran
- home - commande action - simule un appui sur le bouton home
ensuite, reste à planifier le rafraichissement automatique avec une auto-actualisation toutes les 5mins chez moi et et un « Délai avant d’actualiser les infos suite à une action » (reboot) à 60s.
N’hésitez pas à compléter le script et fournir vos modifications
Bonne implémentation
Norbert