Нема описа

Marius d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
.gitignore d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
README.md d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
battery-saver.conf d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
battery-saver.sh d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
de.smallmountains.batterysaver.plist d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
install.sh d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља
uninstall.sh d52cfa4155 Apple Battery Saver: Abschaltung vor Tiefentladung пре 1 недеља

README.md

Apple Battery Saver

Schaltet einen Mac kontrolliert ab, bevor der Akku in die Tiefentladung gerät.

Ausgelöst wird auf Ladestand oder minimaler Zellspannung — je nachdem, was zuerst eintritt. Läuft still als LaunchDaemon im Hintergrund, ohne Menüleisten-Icon und ohne Abhängigkeiten.

Warum nicht einfach die Prozentanzeige?

Weil genau die das Problem verursacht.

Der Ladestand in Prozent ist kein Messwert, sondern eine Schätzung aus dem Kapazitätsmodell des Akkus. Dieses Modell muss der Akku regelmäßig nachkalibrieren. Tut er das nicht, driftet die Anzeige — und macOS trifft seine Abschaltentscheidung auf Basis falscher Zahlen.

Der Anlass für dieses Projekt war genau dieser Fall: Ein Akku meldete ein seit 53 Zyklen nicht mehr nachkalibriertes Kapazitätsmodell. macOS wurden zu hohe Restkapazitäten gemeldet, das Gerät lief über den sicheren Abschaltpunkt hinaus weiter, und die Zellen wurden bis auf 2,71 V entladen. Üblich ist eine Abschaltung bei 3,0–3,2 V. Die Schutzschaltung des Akkus verriegelte daraufhin dauerhaft — Totalausfall bei 58 Ladezyklen.

Die Zellspannung ist dagegen ein direkter physikalischer Messwert, unabhängig von jeder Kalibrierung. Sie ist deshalb hier der eigentliche Schutz; die Prozentgrenze ist nur der bequeme Auslöser für den Normalfall.

Schwellwerte

Stufe Bedingung Aktion
Warnung ≤ 20 % oder ≤ 3550 mV Mitteilung
Abschaltung ≤ 10 % oder ≤ 3400 mV Sauberes Herunterfahren

Ausgewertet wird immer die niedrigste Einzelzelle, nicht der Durchschnitt.

Zur Orientierung:

4300 mV   voll
3550 mV   ca. 25-30 %
3400 mV   ca. 10-15 %   <- Abschaltung
3000 mV   macOS schaltet üblicherweise selbst ab
2700 mV   Schutzschaltung verriegelt dauerhaft (Totalausfall)

Installation

git clone https://git.smallmountains.de/Marius/Apple-Battery-Saver.git
cd Apple-Battery-Saver
sudo ./install.sh

Installiert wird nach:

Datei Ziel
Programm /usr/local/bin/battery-saver.sh
Konfiguration /usr/local/etc/battery-saver.conf
LaunchDaemon /Library/LaunchDaemons/de.smallmountains.batterysaver.plist
Protokoll /var/log/battery-saver.log

Verwendung

battery-saver.sh --status      # Messwerte und Bewertung anzeigen
sudo battery-saver.sh --test   # Volle Logik simulieren, ohne abzuschalten
tail -f /var/log/battery-saver.log

Beispielausgabe von --status:

Netzteil angeschlossen : Yes
Ladestand              : 98 %
Packspannung           : 12897 mV
Zellspannungen         : 4301,4283,4311
Niedrigste Zelle       : 4283 mV

Schwellwerte
  Warnung    : <= 20 %  oder  <= 3550 mV
  Abschaltung: <= 10 %  oder  <= 3400 mV
  Auslösung nach 3 Messungen in Folge

Bewertung: am Netz - Überwachung pausiert

Konfiguration

Schwellwerte in /usr/local/etc/battery-saver.conf anpassen, danach neu laden:

sudo launchctl kickstart -k system/de.smallmountains.batterysaver

DRY_RUN=1 unterdrückt das Herunterfahren dauerhaft — es wird dann nur protokolliert und gewarnt. Sinnvoll, um das Verhalten erst einmal im Echtbetrieb zu beobachten.

Sicherheitsmechanismen

Ein Programm, das den Rechner abschalten darf, muss bei unklarer Datenlage stillhalten. Eingebaut sind deshalb:

  • Nur im Akkubetrieb. Hängt das Gerät am Netz, passiert nichts; der Zähler wird zurückgesetzt.
  • Mehrfachmessung. Erst nach drei aufeinanderfolgenden Messungen unter der Grenze wird abgeschaltet (bei 60 s Intervall also rund drei Minuten). Ein einzelner Ausreißer löst nichts aus.
  • Plausibilitätsprüfung. Unplausible Werte führen zu „keine Aktion" statt zu einer Abschaltung. Fehlt die Zellspannung, bleibt nur die Prozentgrenze aktiv.
  • Vorwarnung. Ab 20 % gibt es eine Mitteilung, damit noch selbst reagiert werden kann.
  • Konfigurationsprüfung. Unzulässige Schwellwerte (Zahlendreher, Buchstaben, vertauschte Warn-/Abschaltgrenzen) legen den Dienst still, statt ihn auslösen zu lassen. Ein HALT_MV=44000 statt 4400 würde sonst im Akkubetrieb sofort abschalten.
  • Sauberes Herunterfahren über System Events, damit Programme ihre Dokumente sichern können. Nur wenn keine GUI-Session existiert, wird hart abgeschaltet.

Grenzen

Der Dienst schützt nur im wachen Zustand. Liegt das Gerät zugeklappt und entlädt sich im Standby, läuft kein Prozess, der eingreifen könnte. Für längere Lagerung hilft nur echtes Hibernate oder Ausschalten.

Automatisches Herunterfahren kann ungespeicherte Arbeit kosten. Die Warnstufe bei 20 % ist die Gelegenheit, selbst zu reagieren.

Deinstallation

sudo ./uninstall.sh           # Konfiguration und Protokoll bleiben
sudo ./uninstall.sh --purge   # entfernt alles

Lizenz

MIT