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)
