Alerte batterie faible pour la Magic Mouse sous macOS

Préambule

macOS a le chic pour prévenir que la batterie de la souris est faible… environ deux minutes avant qu’elle ne s’éteigne. Ce qui, dans un cadre pro ou même perso, peut vite être agaçant.
Il n’existe pas de réglage dans les préférences système pour recevoir une alerte à 20% ou 30% de batterie, alors on va corriger ça avec un petit script Python.

Objectif : Être notifié automatiquement quand la batterie de la Magic Mouse passe sous les 20%, avec une notification système.

Etape par étape

Le script python

Copie-colle le contenu suivant dans un fichier battery_mouse_check.py dans ton dossier personnel :

#!/usr/bin/env python3
import subprocess
import time
import os

# Table de correspondance BatteryStatusFlags
BATTERY_FLAGS = {
    0: "Débranchée",
    1: "Débranchée (autre état interne Apple)",
    2: "Débranchée (autre état interne Apple)",
    3: "En charge"
}

def notify(title, message):
    os.system(f'''osascript -e 'display notification "{message}" with title "{title}"' ''')

def get_battery_info():
    try:
        output = subprocess.check_output(
            ["ioreg", "-r", "-c", "AppleDeviceManagementHIDEventService", "-l"],
            text=True
        )
        percent = None
        flags = None
        for line in output.splitlines():
            line = line.strip()
            if line.startswith('"BatteryPercent"'):
                percent = int(line.split('=')[-1].strip())
            elif line.startswith('"BatteryStatusFlags"'):
                flags = int(line.split('=')[-1].strip())
        return percent, flags
    except Exception as e:
        print("Erreur récupération batterie :", e)
        return None, None

def main():
    last_percent = None
    while True:
        percent, flags = get_battery_info()
        if percent is not None and flags is not None:
            state = BATTERY_FLAGS.get(flags, f"Inconnu ({flags})")

            if percent != last_percent:
                print(f"🔋 {percent}% | État: {state}")
                last_percent = percent

            # Notifications intelligentes
            if percent <= 20 and flags != 3:
                notify("⚡ Batterie faible", f"La souris est à {percent}%. Branche-la vite !")
            elif percent >= 80 and flags == 3:
                notify("🔋 Batterie presque pleine", f"La souris est à {percent}%. Tu peux débrancher.")
        time.sleep(60)

if __name__ == "__main__":
    main()

Rendre le script exécutable

Dans le terminal :

chmod +x ~/battery_mouse_check.py

Exécution automatique toutes les 15 minutes

Crée un fichier plist dans ~/Library/LaunchAgents :

nano ~/Library/LaunchAgents/com.user.mousebattery.plist

Colle ce contenu (en adaptant le chemin si nécessaire) :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.user.mousebattery</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/python3</string>
        <string>/Users/ton_utilisateur/battery_mouse_check.py</string>
    </array>
    <key>StartInterval</key>
    <integer>900</integer> <!-- 900s = 15 minutes -->
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Puis charge l’agent :

launchctl load ~/Library/LaunchAgents/com.user.mousebattery.plist

Pour tester immédiatement :

python3 ~/battery_mouse_check.py

Conclusion

Ce petit script vient combler une lacune bien réelle de macOS : être prévenu suffisamment tôt pour brancher et recharger sa souris. L’approche est discrète, légère, 100% locale, et adaptable à d’autres périphériques (clavier, trackpad) en modifiant un peu la recherche dans ioreg.

Tu peux bien sûr modifier :
le seuil d’alerte (actuellement à 20%)
la fréquence d’exécution (via StartInterval)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *