Skip to content

mylight150 : récupérer le niveau de ma batterie virtuelle

Je voulais récupérer le niveau de ma batterie virtuelle mylight sans ouvrir l'application sur mon téléphone à chaque fois. J'ai donc créé mylight150, un petit service qui va lire cette valeur dans l'application Android et la rend disponible par HTTP.

La solution passe par un téléphone relié en USB et piloté avec ADB. Toutes les cinq minutes, le service réveille le téléphone, ouvre mylight, rafraîchit l'écran et récupère le pourcentage. Une fois la lecture terminée, il ferme l'application et remet le téléphone en veille.

Lire ce que l'application affiche ​

Au départ, le projet utilisait des captures d'écran et de l'OCR pour reconnaître le nombre. J'ai depuis remplacé cette partie par UIAutomator, qui permet de récupérer les textes accessibles de l'interface Android.

Je cherche la section « Batterie virtuelle » et j'en extrais le pourcentage. Cela évite le traitement d'image et les erreurs de reconnaissance de caractères. Si la lecture échoue ou que le résultat est ambigu, je conserve la dernière valeur connue.

Le service sait aussi reconnaître une session déconnectée et tenter de se reconnecter. C'est un point assez important pour une application qu'on laisse tourner sans surveiller le téléphone.

Une valeur disponible en HTTP ​

Côté serveur, j'utilise AdonisJS 7 avec une tâche planifiée et Redis pour conserver le dernier relevé. Une requête sur GET /api/battery suffit ensuite à le récupérer :

json
{"capacity": 40}

De quoi réutiliser cette donnée dans un tableau de bord ou un outil domotique. Attention tout de même, il s'agit du dernier relevé enregistré : si le téléphone est débranché, la valeur ne sera plus actualisée.

Ce bricolage reste lié à l'interface de mylight. Si un écran change, il faudra peut-être adapter la lecture ou les gestes automatisés. Pour ce besoin précis, un téléphone, quelques commandes ADB et un petit service suffisent.

Dans Home Assistant ​

Pour récupérer le niveau dans Home Assistant, voici un exemple de capteur REST à ajouter dans le fichier configuration.yml, sous la clé sensor. L'adresse IP est à adapter à la machine qui héberge mylight150.

yaml
sensor:
  - platform: rest
    name: "Batterie virtuelle"
    resource: "http://192.168.1.117:3333/api/battery"
    method: GET
    value_template: "{{ value_json.capacity }}"
    unit_of_measurement: "%"
    scan_interval: 60

Home Assistant interroge ici le service toutes les minutes. Le relevé sur le téléphone reste effectué toutes les cinq minutes.

Le code est disponible sur GitHub : batosai/mylight150.