Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

[Tuto] Niveau et statut batterie android par Script SSH

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
Répondre
Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

[Tuto] Niveau et statut batterie android par Script SSH

Message par Salvialf » 07 déc. 2018, 18:59

Bonjour @ tous ceux qui vont me lire,

1) Installation d'un serveur SSH léger sur l'appareil Androïd (Tablette/Smartphone):
- Installer SimpleSSHD via le Playstore: https://play.google.com/store/apps/deta ... sshd&hl=fr ou l'APK ( :!: url directe): http://www.galexander.org/software/simp ... SHD-19.apk
- Ouvrir SimpleSSHD et aller sur "Settings" (3 petits points en haut à droite). Pour ma part j'ai coché "Start on boot" et "Start on Open" en plus de "Foreground Service" qui était déjà coché. Je n'ai modifié aucun autre paramètre, pour info simpleSSHD utilise par défaut le port 2222 pour communiquer.
- Bien noter le "SSH Path" en bas de page. chez moi: "/data/user/0/org.galexander.sshd/files/". Il est possible de le modifier tout comme le port de communication, il faudra donc adapter le tuto en conséquence.


2) Création de la clé pour l'utilisateur "www-data":
- Se connecter en SSH sur la machine hébergeant Jeedom.
- Créer un dossier home pour l'utilisateur "www-data":

Code : Tout sélectionner

sudo mkdir /home/www-data
- Donner l'appartenance à l'utilisateur "www-data" sur ce dossier:

Code : Tout sélectionner

sudo chown -R www-data:www-data /home/www-data/
- Modifier le chemin du home de l'utilisateur "www-data" et lui assigner un shell:

Code : Tout sélectionner

sudo nano /etc/passwd
- Modifier la ligne qui commence par www-data pour qu'elle ressemble à ça:

Code : Tout sélectionner

www-data:x:33:33:www-data:/home/www-data:/bin/bash
- S'identifier en tant que "www-data":

Code : Tout sélectionner

sudo su - www-data
- Générer une clé sans passphrase (valider 3 fois sur "Entrée" sans rien taper):

Code : Tout sélectionner

ssh-keygen -t rsa

3) Copie de la clé sur la Tablette:
- Se connecter à la tablette (ou le smartphone) Androïd pour la 1ère fois:

Code : Tout sélectionner

ssh -p 2222 root@IP_TABLETTE
(Remplacez IP_TABLETTE par l'adresse IP de votre tablette Androïd.)
Le mot de passe apparaît en clair dans SimpleSSH sur la tablette, recopiez le là où il est demandé sur votre connexion SSH. La connexion doit fonctionner et vous devez passer sur l'utilisateur de la tablette.

- Revenir sur l'utilisateur "www-data": - Copier le fichier /home/www-data/.ssh/id_rsa.pub sur la tablette sous le Path SSH de SimpleSSHD (Settings->SSH Path):

Code : Tout sélectionner

scp -P 2222 /home/www-data/.ssh/id_rsa.pub root@IP_TABLETTE:/data/user/0/org.galexander.sshd/files/
(Un nouveau mot de passe est généré, tapez le et le fichier doit se transférer.)

- si vous êtes déconnecté de la tablette, reconnectez-vous (avec nouveau mot de passe):

Code : Tout sélectionner

ssh -p 2222 root@IP_TABLETTE
- Renommer le fichier en "authorized_keys":

Code : Tout sélectionner

mv /data/user/0/org.galexander.sshd/files/id_rsa.pub /data/user/0/org.galexander.sshd/files/authorized_keys
- Revenir sur l'utilisateur "www-data": - Connectez-vous sans mot de passe:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE
(ça doit fonctionner sinon recommencez depuis le début)

- Vérifier la récupération du niveau de batterie sans saisir de mot de passe:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /sys/class/power_supply/battery/capacity
(Le niveau de batterie doit apparait en dessous: 75 chez moi au moment de la manip')


4) Finalisation:
- Quitter l'utilisateur "www-data" pour revenir sur l'utilisateur "normal": - Modifier à nouveau le fichier /etc/passwd:

Code : Tout sélectionner

sudo nano /etc/passwd
- Modifier la ligne qui commence par www-data pour qu'elle ressemble à ça:

Code : Tout sélectionner

www-data:x:33:33:www-data:/home/www-data:/usr/sbin/nologin

5) Création du script dans Jeedom:
- Créer un nouveau script dans le plugin "script" et donnez lui le nom de votre choix (par exemple BatteryTab).
- Choisir un intervalle d'actualisation dans le champ "Auto-actualisation(cron)". J'ai mis toutes les 5 minutes: */5 * * * *
- Dans l'onglet "Commandes", cliquer sur "Ajouter une commande script".
- Donnez un nom au script et configurez le ainsi:

Niveau de batterie:

Code : Tout sélectionner

Type script: script
Type: Info/Numérique
Requête: ssh -p 2222 IP_TABLETTE cat /sys/class/power_supply/battery/capacity
Divers: Unité=%, Min=0, Max=100
Statut de batterie (charge=1/décharge=0):

Code : Tout sélectionner

Type script: script
Type: Info/Binaire
Requête: ssh -p 2222 IP_TABLETTE cat /sys/class/power_supply/battery/charge_now

Et voilà ! Le script peut être affichée tel quel, récupéré dans un virtuel ou utilisé dans un scénario pour gérer un wallplug.

Résultat:
Batt_charge.jpg
Batt_charge.jpg (12.56 Kio) Consulté 2082 fois
J'espère que ce long tuto sera utile... en tout cas il l'est pour moi !

Petite précision: ne nécessite pas de root et fonctionne sur toutes les versions d'Androïd à partir de la 2.1 :o
Dernière édition par Salvialf le 16 déc. 2018, 20:45, édité 24 fois.
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par Salvialf » 07 déc. 2018, 22:50

A l'origine je cherchais comment récupérer le niveau de batterie de ma tablette Androïd dédiée à Jeedom (Galaxy Tab3 10.1 sous LineageOS 14.1 - Androïd Nougat 7.1.2) sans pour autant impacter les faibles performances de celle-ci ou monter une usine à gaz, je suis finalement parvenu à mes fins via un simple script SSH. J'ai testé Fully Kiosk dans un premier temps mais cela ne m'apportait pas grand chose car j'affiche déjà mon design en plein écran par un raccourci Chrome et ça m'ennuyait de payer 5,90€ de licence juste pour afficher le niveau de batterie. Il semble possible de le faire à l'aide d'ADB ou Tasker mais trop contraignant à mon goût. J'aurai pu utiliser JPI mais cela aurait été bien trop "lourd" sans compter que ma tablette dispose uniquement du Wifi.

Ne devant pas être le seul dans ce cas, je partage la méthode que j'ai appliqué et qui fonctionne parfaitement en plus d'être "légère" et peu consommatrice de ressources.
Dernière édition par Salvialf le 11 déc. 2018, 13:32, édité 6 fois.
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: [Tuto] Piloter Androïd par Script SSH

Message par Salvialf » 08 déc. 2018, 14:35

Il parait que c'est inutile mais ça m'amuse:

Pour se reconnecter sur l'utilisateur "www-data" en ssh pour faire des tests, il faut taper:

Code : Tout sélectionner

sudo -su www-data
(ne pas oublier de se déconnecter après les tests)

La commande "reboot" fonctionne (shutdown ne fonctionne pas):

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE reboot
"reboot recovery" & "reboot-bootloader" fonctionnent aussi sans root.

En fait toutes les commandes ci-dessous fonctionnent - ls /system/bin (certaines en root, je fais le tri):
Commandes Android.jpg
Commandes Android.jpg (533.73 Kio) Consulté 2190 fois
Du coup "restart" est plus sympa ça redémarre juste l'environnement sans redémarrer la tablette.

Les récupérations d'infos:
(certaines sont longues donc à trier avec un attribut "| grep")

Batterie en charge ou décharge (texte):

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /sys/class/power_supply/battery/status
La même chose en binaire (0=décharge - 1=charge):

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /sys/class/power_supply/battery/charge_now
Infos Batterie:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /sys/class/power_supply/battery/uevent
Puissance Wifi:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /proc/net/wireless
Infos mémoire:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /proc/meminfo
Infos cpu:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /proc/cpuinfo
Version de linux:

Code : Tout sélectionner

ssh -p 2222 IP_TABLETTE cat /proc/version
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Thierryb180381
Timide
Messages : 239
Inscription : 18 janv. 2017, 17:45

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par Thierryb180381 » 17 mars 2019, 23:03

Bonsoir,

Apparemment, le user par défaut du tel n'a pas les droits pour consulter le niveau de batterie. Ca ne marche qu'en root.

Code : Tout sélectionner

$ whoami
u0_a84

Code : Tout sélectionner

$ ssh -p 2222 192.168.1.x
hammerhead:/data/data/org.galexander.sshd/files $ cat /sys/class/power_supply/battery/capacity
sh: cat: /sys/class/power_supply/battery/capacity: Permission denied
La commande ne marche qu'en root sur le tel, et même un chmod 644 ne change rien.

Une idée?

Merci.
Intel Nuc avec Debian Stretch (9.9)
Jeedom DIY 3.3.28

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par Salvialf » 18 mars 2019, 14:53

Effectivement :o

C'est le Nexus 5 ton tél ? En quelle version d'Android ? Tél rooté ?

Effectivement ce fichier semble protégé sur les versions d'Androïd "pures".
Les autres 'cat' fonctionnent-ils ? Genre:

Code : Tout sélectionner

cat /sys/class/power_supply/battery/status


Rien à voir mais en même temps il est bizarre le nom de ton user sans '@'...

Cette ligne te donne un résultat ou fichier manquant ?:

Code : Tout sélectionner

cat sys/class/power_supply/battery/current_now
Sinon tu peux ajouter le root à ta commande script:

Code : Tout sélectionner

ssh -p 2222 root@192.168.1.x cat /sys/class/power_supply/battery/capacity
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Thierryb180381
Timide
Messages : 239
Inscription : 18 janv. 2017, 17:45

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par Thierryb180381 » 18 mars 2019, 15:11

Hello,

Code : Tout sélectionner

$ ssh -p 2222 root@192.168.1.18
hammerhead:/data/data/org.galexander.sshd/files $
ne me connecte pas directement en root en fait.

Faut que je fasse manuellement "su" une fois connectée pour devenir root.

Et aucune commande ne marche :

Code : Tout sélectionner

hammerhead:/data/data/org.galexander.sshd/files $ 
at /sys/class/power_supply/battery/status                                     <
sh: cat: /sys/class/power_supply/battery/status: Permission denied
at sys/class/power_supply/battery/current_now                                 <
sh: cat: sys/class/power_supply/battery/current_now: No such file or directory
1|hammerhead:/data/data/org.galexander.sshd/files $ 
J'ai un Nexus 5 avec la rom LineageOS 14,1 Nightly basée sur Android 7.1.2 et elle est rootée.

Code : Tout sélectionner

$ uname -a
Linux localhost 3.4.0-g2c2be66 #1 SMP PREEMPT Sat Jan 26 14:40:26 UTC 2019 armv7l
Merci.
Intel Nuc avec Debian Stretch (9.9)
Jeedom DIY 3.3.28

Avatar de l’utilisateur
Salvialf
Helper
Messages : 1334
Inscription : 24 févr. 2018, 09:37
Contact :

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par Salvialf » 18 mars 2019, 15:15

c'est donc ton user "hammerhead" qui n'a aucun droits. Si la rom est suivie tu peux peut-être en toucher un mot au développeur sur xda ? Si tu tapes 'sh: cat: /sys/class/power_supply/battery/capacity: Permission denied' sur google tu vois que ça concerne essentiellement le Nexus 5.
VM Jeedom 3.2.16 sous Proxmox 5.4 sur NUC5i5RYH (Debian 9.9)
Helper Officiel Jeedom
Widgets développés
Téléchargement d'icônes domotique (Topic Forum)

Thierryb180381
Timide
Messages : 239
Inscription : 18 janv. 2017, 17:45

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par Thierryb180381 » 18 mars 2019, 15:57

Salvialf a écrit :
18 mars 2019, 15:15
c'est donc ton user "hammerhead" qui n'a aucun droits. Si la rom est suivie tu peux peut-être en toucher un mot au développeur sur xda ? Si tu tapes 'sh: cat: /sys/class/power_supply/battery/capacity: Permission denied' sur google tu vois que ça concerne essentiellement le Nexus 5.
ha oui ok, merci.
Intel Nuc avec Debian Stretch (9.9)
Jeedom DIY 3.3.28

frederic27
Timide
Messages : 40
Inscription : 27 janv. 2019, 17:36

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par frederic27 » 28 sept. 2019, 08:29

bonjour et merci pour ce super tuto.

J'utilisais jusque là JPI et Fullkiosk, mais depuis que je suis sous Buster cela ne fonctionne plus.

Cette méthode fonctionne nickel, je récupère bien le niveau de la batterie.

Je ne suis pas du tout expert. Pourrais-tu me dire si dans une de ses commandes, il y en a qui permettent d'allumer l'écran de la tablette (et de l'éteindre) et une autre pour lancer une application.
Lorsque mon visiophone sonne, j'ai un scenario qui doit allumer automatiquement l'écran et lancer l'application de mon visiophone.

Merci d'avance !

Avatar de l’utilisateur
raqpub
Timide
Messages : 275
Inscription : 04 juin 2015, 08:21
Localisation : Earth

Re: [Tuto] Niveau et statut batterie android par Script SSH

Message par raqpub » 15 déc. 2019, 12:41

Salvialf a écrit :
07 déc. 2018, 22:50
A l'origine je cherchais comment récupérer le niveau de batterie de ma tablette Androïd dédiée à Jeedom (Galaxy Tab3 10.1 sous LineageOS 14.1 - Androïd Nougat 7.1.2) sans pour autant impacter les faibles performances de celle-ci ou monter une usine à gaz, je suis finalement parvenu à mes fins via un simple script SSH. J'ai testé Fully Kiosk dans un premier temps mais cela ne m'apportait pas grand chose car j'affiche déjà mon design en plein écran par un raccourci Chrome et ça m'ennuyait de payer 5,90€ de licence juste pour afficher le niveau de batterie. Il semble possible de le faire à l'aide d'ADB ou Tasker mais trop contraignant à mon goût. J'aurai pu utiliser JPI mais cela aurait été bien trop "lourd" sans compter que ma tablette dispose uniquement du Wifi.

Ne devant pas être le seul dans ce cas, je partage la méthode que j'ai appliqué et qui fonctionne parfaitement en plus d'être "légère" et peu consommatrice de ressources.
Bonjour @Salvialf

J'ai la même problématique que toi et je viens d'appliquer ton excellent tuto.
Une question : comment as-tu réussi sous chrome a ne pas avoir la barre de commande du bas et la barre de notification du haut ?

PS : Je suis plutôt sur Community depuis quelques semaines et pas trouvé ce sujet que tu pourrais reporter à mon avis.
Merci.

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités