Programmation d'alertes batterie avec AppleScript

3Skiing

Membre confirmé
19 Décembre 2010
14
0
Bonjour tout le monde.

Je suis depuis peu un Macuser grâce à l'achat d'un Macbook Unibody de 2010 (processeur Intel).

Dans un souci de conserver au mieux l'état de la batterie je souhaite via AppleScript programmer des alertes batteries comme celle qui a d'origine dans le système quand la batterie est pratiquement déchargée.

Exemple de fonctionnement voulu: Dés qu'il reste 40% d'autonomie un message apparaît pour me prévenir.

Je suis novice dans AppleScript et je sais que pour ma programmation je dois recueillir des données dans le SMC (pourcentage).

Hors je ne sais pas comment recueillir cette donnée via AppleScript et encore moins faire interagir des boîtes de dialogue avec ces données.

Alors si quelqu'un à une idée de programmation je suis preneur.

Merci pour votre aide.
 
Merci FrançoisMacG de ta réponse rapide.

En surfant sur internet j'ai effectivement vu aussi l'application Watt qui à les fonctions que je souhait obtenir via AppleScript (avertissement du niveau de charge, indication du mode l'alimentation batterie ou secteur).

Mais je n'ai pas envie de reproduire mes erreurs du monde de Windows qui est d'avoir pratiquement un logiciel pour une fonction donnée.

Et donc en réfléchissant à mon problème je me demande s'il est possible de récupérer le script orginal de "batterie faible" pour le modifier.
 
je me demande s'il est possible de récupérer le script orginal de "batterie faible" pour le modifier.
Cela doit être possible puisque Watts l'a (bien) fait,

mais pas pour n'importe qui,
avec un risque de déstabiliser le Mac, si l'on merdouille,
et la probabilité de voir disparaître le reparamétrage à une mise à jour suivante du système, si on réussit

= je me contente d'afficher la charge de la batterie en pourcentage et de jeter un œil de temps à autre dans la barre des menus de temps à autre,
et je n'ai installé que CoconutBattery. ;)
 
Aprés des heures de recherche je suis tombé sur un script qui correspond à mes besoins (voir ci-dessous).

#!/bin/bash
min_percentage="15"
percentage=`pmset -g batt | grep -o "[0-9]\+%; discharging" | \
sed -e "s/%.*$//"`
if [ "$percentage" ]; then
if [[ $percentage -lt $min_percentage ]] ; then
osascript -e "tell application \"System Events\"
activate
display dialog \"Battery almost dead: $percentage%\" \
with icon 0 with title \"Warning\" buttons {\"OK\"} \
default button 1
end tell"
fi
fi

Hors je recontre un problème quand je l'execute via AppleScript.
Il m'indique que la troisième ligne comporte une erreur de syntaxe sur le signe écrit et souligné en rouge sur le script ci-dessus.
Le message exacte est " expression prévu mais jeton inconnu trouvé.

Alors si quelqu'un peut me dire ce qui ne va pas dans le script, je le remercie d'avance.
 
C'est juste que AppleScript ne doit pas bien comprendre la chose.

Voici deux idées pour t'en sortir :
  • créer un script trucmuche.sh et appeler simplement ce script dans ton AppleScript.
  • remplacer la méthode d'appel `...` par $() ; éventuellement mettre tout ce qu'il y a entre ces quotes inverses sur une même ligne.
 
Merci Bompi de ta réponse.
Malheusement je suis novice dans AppleScript alors pourais-tu me donner plus informations sur le changement d'appel.
 
  • créer un dossier "bin" dans ta maison
  • y créer un fichier "test_battery.sh" et y mettre le contenu de ton script.
  • remplacer dans ton AppleScript le contenu du script par : /bin/bash $HOME/bin/test_battery.sh
 
Il y a une erreur de synthaxe "Un(e) / ne peut pas se trouver ici" signe souligné et surligné en rouge ci-dessous.

/bin/bash $HOME/bin/test_battery.sh

Alors je me demande si il est possible de trouver le script original de "batterie faible" dans le système et d'en faire une copie pour modifier le niveau d'alert.

Pour finir avec un peu de retard je souhait à tous les membres de macgénération un joyeux noel.
 
Bonjour,

Il y a une erreur de synthaxe "Un(e) / ne peut pas se trouver ici" signe souligné et surligné en rouge ci-dessous.

/bin/bash $HOME/bin/test_battery.sh
Il faut mettre la ligne dans un do shell script,
/bin/bash n'est pas nécessaire.
Bloc de code:
set the_text_returned to do shell script "~/bin/test_battery.sh"
 
Merci de ta réponce Mac_Jac mais malheusement cela ne marche pas.

J'ai cette fois ci un message qui me dit "sh: User/3Skiing/bin/test_battery.sh: bin/bash^M bad interpreter: no such file or directory".

Voilà Mac à encore du mal à me convaincre.

Au passage si quelqu'un sait ou trouver le script "batterie faible" sur snow leopard je suis preneur.
 
Merci de ta réponce Mac_Jac mais malheusement cela ne marche pas.

J'ai cette fois ci un message qui me dit "sh: User/3Skiing/bin/test_battery.sh: bin/bash^M bad interpreter: no such file or directory".

Les problémes possible avec ton fichier ~/bin/test_battery.sh est .

1- Ton fichier SH n'est pas un exécutable, il faut faire dans le Terminal
Bloc de code:
chmod u+x ~/bin/test_battery.sh
2- il n'est pas enregistré au format texte.
3- il n'est pas enregistré dans l'encodage UTF8
4- Les fin de lignes ne sont Unix

Voici le script AppleScript qui fonctionne directement sans un fichier sh
Bloc de code:
set percentage to do shell script "pmset -g batt | grep -o \"[0-9]\\+%; discharging\" | sed -e \"s/%.*$//\""

if percentage is not "" and (percentage as integer) < 15 then
	activate
	display dialog "Battery almost dead: " & percentage with icon 0 with title "Warning" buttons {"OK"} default button 1
end if
 
Mac_Jac j'ai copier-coller le script que tu m'a gentiment donné et aucun message d'erreur n'apparaït.

Si j'ai bien compris, le script a le fonctionnement suivant:
Quand la charge de batterie est inférieur à 15% une boite de dialogue apparaît dans lequel il est écrit Battery almost dead.

Si c'est bien cela j'ai envie de dire bravo Mac_Jac.

Mais il me reste un dernière question.
Que faut il faire avec pour qu'il fonctionne automatiquement bref dés qu'on utilise son mac ? (lieu précis pour l'enregistrer, ajouter une ligne dans le script, etc..).
 
Bonjour,

Si j'ai bien compris, le script a le fonctionnement suivant:
Quand la charge de batterie est inférieur à 15% une boite de dialogue apparaît dans lequel il est écrit Battery almost dead.
Oui c'est bien cela.


Que faut il faire avec pour qu'il fonctionne automatiquement bref dés qu'on utilise son mac ? (lieu précis pour l'enregistrer, ajouter une ligne dans le script, etc..).
Voici le script, le dialogue est dans un bloc tell application, pour qu"il fonctionne avec un launchAgent, sinon il ne s'exécutera pas.
Bloc de code:
set percentage to do shell script "pmset -g batt | grep -o \"[0-9]\\+%; discharging\" | sed -e \"s/%.*$//\""

if percentage is not "" and (percentage as integer) < 15 then
	tell application "Finder"
		activate
		display dialog "Battery almost dead: " & percentage  with icon 0 with title "Warning" buttons {"OK"} default button 1
	end tell
end if

Voici une méthode pour que le script s'exécute automatiquement aux 5 minutes sur tous les comptes de la machine :
Cette méthode fonctionne sur Léopard et Snow Leopard.

Enregistre-le au format Script dans le dossier "Scripts" du dossier "Bibliothèque" du disque de démarrage, le nom du script sera "BattCheck.scpt".

Voici comment faire un LaunchAgent pour exécuter le script aux 5 minutes :
Ouvre TextEdit, important ne pas faire ça dans Microsoft Word ou autre suite Office.

Vérifie dans dans le menu "Format" que le menu "Convertir au format Texte" existe, si oui sélectionne-le.
Copie et colle ce code dans la fenêtre de TextEdit
Bloc de code:
<?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>AlertBattery</string>
	<key>Program</key>
	<string>/usr/bin/osascript</string>
	<key>ProgramArguments</key>
	<array>
		<string>osascript</string>
		<string>/Library/Scripts/BattCheck.scpt</string>
	</array>
	<key>ServiceDescription</key>
	<string>Alerte batterie</string>
	<key>StartInterval</key>
	<integer>300</integer>
</dict>
</plist>
Enregistre-le sur ton bureau, l'encodage doit être "Unicode (UtF-8)", décoches la case "Utiliser ".txt" à défaut d'extension", le nom du fichier sera "BattCheck.plist".
Déplace le fichier "BattCheck.plist" dans le dossier "LaunchAgents" du dossier "Bibliothèque" du disque de démarrage, un mot de passe administrateur sera demandé.

Redémarre
C'est tout.
 
Bonjour Mac_Jac.

Je vais utiliser ton premier script car je n'est qu'un seul compte.
Et donc comme tu me le dit ce script fonctionne automatiquement grâce au bloc tell application, mais cela est valable pour qu'un seul compte c'est bien ça ?
Mais une fois compilé le script dans AppleScript je pense qu'il faut l'enregistrer. Mais faut-il l'enregistrer en format plist dans LaunchAgents.

Désolé encore de t'embêter mais je suis novice sur mac.
 
Je vais utiliser ton premier script car je n'est qu'un seul compte.
Et donc comme tu me le dit ce script fonctionne automatiquement grâce au bloc tell application, mais cela est valable pour qu'un seul compte c'est bien ça ?.
Non.
C'est seulement si on utilise un launchagent, car il faut utiliser osascript pour exécuter un script AppleScript, et osascript ne fonctionne pas avec les dialogues(le code) qui ne sont pas dans le bloc tell application "x".

SI on on veut utiliser le script que pour un seul compte, les différences dans ma méthode seront :
1- dossier "Scripts" du dossier "Bibliothèque" dans ta maison au lieu du dossier "Scripts" du dossier "Bibliothèque" du disque de démarrage.
2- dossier "LaunchAgents" du dossier "Bibliothèque" dans ta maison au lieu du dossier "LaunchAgents" du dossier "Bibliothèque" du disque de démarrage.
3- La ligne dans le fichier plist
<string>/Library/Scripts/BattCheck.scpt</string>
doit-être modifié par
/Users/ton nom d'utilisateur/Library/Scripts/BattCheck.scpt



Mais une fois compilé le script dans AppleScript je pense qu'il faut l'enregistrer. Mais faut-il l'enregistrer en format plist dans LaunchAgents.
.
Le script doit-être dans le dossier "Scripts" du dossier "Bibliothèque".

Le fichier plist est le texte qui commence par <?xml version="1.0" encoding="UTF-8"?>, lui il doit-être dans le dossier LaunchAgents.



Voici une solution plus simple pour un débutant :

Voici le script
Bloc de code:
on idle
	set percentage to do shell script "pmset -g batt | grep -o \"[0-9]\\+%; discharging\" | sed -e \"s/%.*$//\""
	
	if percentage is not "" and (percentage as integer) < 15 then
		activate
		display dialog "Battery almost dead: " & percentage with icon 0 with title "Warning" buttons {"OK"} default button 1
	end if
	return 300 -- execution à toutes les  5 minutes
end idle

on quit
	continue quit
end quit

Enregistre ton script au format (Application si la version de ton OS est 10.6.0 ou +), (Progiciel pour les versions 10.5.8 ou moins), à l'emplacement de ton choix

Lance-le.

Ajoute-le dans les "Préférences systèmes..." dans "Comptes", onglet "Ouverture".

C'est tout.
 
Bonsoir,

Important si tu utilises mon dernier script :
J’ai oublié d'écrire qu'il faut cocher la case "Rester en arrière-plan" lors de l'enregistrement.
Il faut le faire avec tous les scripts qui ont un gestionnaire on idle
 
Merci beaucoup de ton aide Mac_Jac.
Merci pour le temps que tu as passé pour résoudre mon problème.

Tout fonctionne comme je veux.

Maintenant il me reste à savoir comment exécuter les scripts de maintenance à heure régulière je pense créer une autre forum.

Si tout fois Mac_Jac tu as une idée sur le sujet je suis preneur.