Ereignis basierend auf dem Ladezustand der Batterie


11

Ich habe noch nichts gefunden, also hoffte ich, dass vielleicht jemand hier eine Idee hatte.

Ich möchte einen Akku auf einem Apple-Laptop starten, der einen bestimmten Ladezustand erreicht oder wenn der Akku voll aufgeladen ist.

Ich weiß, dass ich regelmäßig etwas laufen lassen, den Akkuladestand überprüfen und entscheiden kann, was zu tun ist, aber ich bevorzuge, wenn möglich, ereignisgesteuert.

Antworten:


5

Power Manager ist nicht kostenlos, unterstützt jedoch das Auslösen von Ereignissen basierend auf dem Batteriestand (intern oder USV). Ereignisse können Skripts ausführen, Anwendungen starten oder Aufgaben wie das Herunterfahren ausführen.

Power Manager ist ereignisgesteuert und fragt nicht nach Batteriewechseln ab.

Stattdessen wird Power Manager in die IOKit-Schicht von OS X eingebunden und wartet auf Aktualisierungen von der Hardware. Ereignisse können ausgelöst werden, wenn niemand angemeldet ist. Es ist nicht auf einen aktiven Benutzer angewiesen.

Power Manager - Führen Sie ein Skript mit verbleibender Batterie aus

Die integrierten Aufgaben des Schedule Assistant konzentrieren sich auf die Ausführung, wenn die Batterie auf ein bestimmtes Niveau abfällt. Sie können jedoch angepasst werden, um zu prüfen, ob der Batterieprozentsatz oder die verbleibende Zeit ansteigt.

Diese beiden Beiträge befassen sich mit USV-Stromquellen, können jedoch problemlos an den internen Akku Ihres MacBook angepasst werden:

Offenlegung: Ich bin ein Softwareentwickler hinter Power Manager.


3

Ich möchte, dass dies auf dem Betriebssystem basiert, daher brauche ich keine Internetverbindung oder einen geöffneten Browser usw. Nur etwas, das im Hintergrund passieren kann

Der einfachste Weg, dies zu tun, wäre mit einer Anwendung, aber hier erfahren Sie, wie Sie dies nur mit integrierten Betriebssystembefehlen tun. Ich weiß, dass Sie möchten, dass es ereignisgesteuert ist, aber ich bin mir nicht sicher, wie ich das erreichen soll. Hier ist eine Möglichkeit, den Batteriestand zu überprüfen und dann etwas anderes zu tun, wenn er über / unter einem Schwellenwert liegt.

Sie können einen launchdProzess in Betracht ziehen . Dies ist im Grunde eine geplante Aufgabe, die jede xMinute ausgeführt wird. Sie werden häufig von fortgeschrittenen Benutzern verwendet, sind jedoch nicht allzu schwierig einzurichten. Sie konfigurieren eine geplante Startaufgabe mit einer .plist-Datei, die Sie in dieses Verzeichnis gestellt haben: Auf Macintosh HD\Library\LaunchDaemonsdiese Weise strukturieren Sie die .plist-Datei.

<?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>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
    <string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>

Wenn Sie diese Datei wie com.me.BatteryInfoim LaunchDaemonsoben genannten Ordner speichern, wird eine geplante Aufgabe erstellt, die alle 30 Minuten ausgeführt wird. Die Zahl 1800direkt darüber </dict>gibt die Zeit in Sekunden an, wie oft die Aufgabe ausgeführt werden soll. Hier <string>/Users/yourusername/batt.sh</string>wird angegeben, welches Skript planmäßig ausgeführt wird. Sie müssen gehen <string>und </sting>intakt.

Die Zeile <string>com.me.BatteryInfo</string>ist der eindeutige Name der geplanten Aufgabe. Wenn Sie mehr als eine erstellen möchten, stellen Sie sicher, dass jede .plist hier einen eindeutigen Namen hat.

Als nächstes müssen Sie den Besitz der .plist in ändern root. Dies ist als Sicherheitsfunktion erforderlich (um zu verhindern, dass Software / Benutzer geplante böswillige Aufgaben erstellen, nehme ich an). Um den Besitz der Datei zu ändern, sudo chown root \Library\LaunchDaemons\yourtask.plistersetzen Sie yourtask.plist durch den tatsächlichen Dateinamen der von Ihnen erstellten .plist. Diese Aufgabe fordert Sie zur Eingabe eines Kennworts auf.

Jetzt müssen Sie das Skript erstellen, das regelmäßig ausgeführt wird. Sie müssen eine .sh-Datei (ein Bash-Skript) erstellen, um dem Computer mitzuteilen, was zu tun ist. Öffnen Sie zum Erstellen einer SH-Datei einen Texteditor für Programmierer, z. B. Sublime Text oder Komodo Edit . Verwenden Sie NICHT Textbearbeitung, da dies häufig Text zu Ihren Dateien hinzufügt, der Ihr Skript beeinträchtigen würde. Textbearbeitung sollte eigentlich nicht für Code verwendet werden.

Erstellen Sie ein Skript (.sh-Datei) mit dem folgenden Code.

#!/bin/sh

percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')

if [ $percent > 95 ]
    then
        echo 'charged.'
fi
exit 0

Ersetzen Sie sie echo 'charged.'durch die Terminalbefehle, die Sie ausführen möchten, wenn der Akku aufgeladen ist. open /Applications/Notes.appöffnet die Notes-Anwendung; Sie können das Verzeichnis ändern, um eine andere Anwendung zu öffnen.

$percent > 95Dies weist die nächste Zeile an, nur zu laufen, wenn der Akku mehr als 95aufgeladen ist. Sie können dies nach Belieben ändern. Der Akkuladestand unterscheidet sich hier häufig geringfügig von dem, was in der Menüleiste oben angezeigt wird. Wenn Sie "laufen möchten, wenn der Akku voll aufgeladen ist", empfehle ich, dies als> 95 zu belassen . Wenn Sie möchten, dass die Aufgabe ausgeführt wird, wenn Ihre Batterie beispielsweise unter 20% fällt, ändern Sie sie in$percent < 20

HINWEIS: Da dies eine geplante Aufgabe ist, wird Ihr Skript alle xpaar Minuten ausgeführt. Das heißt, wenn Sie open \Applications\Notes.appin Ihr Skript einfügen, wird die Notes-Anwendung jede xMinute gestartet (wenn Ihr Akku aufgeladen ist).

Diese Aufgabe wird auch dann ausgeführt, wenn niemand angemeldet ist.

Ich weiß, dass Sie diese Frage vor einiger Zeit gestellt haben, aber hoffentlich hilft dies jemandem.


2

Dies ist nicht Mac-spezifisch, aber Mozilla Aurora verfügt über eine integrierte API, die eine Vielzahl von batteriebezogenen Funktionen enthält. Man kann den Status des Akkus (ob er aufgeladen wird oder nicht), die Zeit, die der Akku zum Entladen / Laden des Akkus benötigt, und seinen Ladezustand ermitteln. Es gibt ein einfaches Beispiel für das Hinzufügen eines EventListener zum Aufrufen einer Funktion, wenn der Akkuladestand an einem bestimmten Punkt liegt.


Ich möchte, dass dies auf dem Betriebssystem basiert, daher brauche ich keine Internetverbindung oder einen geöffneten Browser usw. Nur etwas, das im Hintergrund passieren kann.
FaultyJuggler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.