Zdarzenie oparte na poziomie naładowania baterii

11

Jeszcze niczego nie znalazłem, więc miałem nadzieję, że ktoś tutaj wpadł na pomysł.

Chcę uruchomić parzystą baterię na laptopie Apple, która osiąga określony poziom naładowania lub gdy bateria jest w pełni naładowana.

Wiem, że mogę okresowo coś uruchamiać, sprawdzać poziom naładowania baterii i decydować, co robić, ale wolę, jeśli to możliwe, sterować zdarzeniami.

Wadliwy Żongler
źródło

Odpowiedzi:

5

Power Manager nie jest darmowy, ale obsługuje wyzwalanie zdarzeń na podstawie poziomów baterii (wewnętrznych lub UPS). Zdarzenia mogą uruchamiać skrypty, uruchamiać aplikacje lub wykonywać zadania, takie jak zamykanie.

Power Manager jest sterowany zdarzeniami i nie sprawdza pod kątem zmian baterii.

Zamiast tego Power Manager łączy się z warstwą IOKit OS X i czeka na aktualizacje ze sprzętu. Zdarzenia mogą być wyzwalane, gdy nikt nie jest zalogowany; nie zależy od aktywnego użytkownika.

Power Manager - Uruchom skrypt na pozostałej baterii

Wbudowane zadania Asystenta harmonogramu koncentrują się na wykonywaniu, gdy bateria spadnie do określonego poziomu, ale można je dostosować, aby sprawdzić wzrost procentu baterii lub pozostałego czasu.

Te dwa posty mówią o źródłach zasilania UPS, ale można je łatwo dostosować do wewnętrznej baterii komputera MacBook:

Ujawnienie: Jestem inżynierem oprogramowania w Power Manager.

Graham Miln
źródło
3

Chcę, aby było to oparte na systemie operacyjnym, więc nie potrzebuję połączenia z Internetem ani otwartej przeglądarki itp. Po prostu coś, co może się zdarzyć w tle

Najłatwiej to zrobić za pomocą aplikacji, ale oto jak to zrobić tylko za pomocą wbudowanych poleceń systemu operacyjnego. Wiem, że chcesz, aby był sterowany zdarzeniami, ale nie jestem pewien, jak to zrobić, więc oto jeden ze sposobów sprawdzania poziomu baterii, a następnie robienia czegoś innego, jeśli jest powyżej / poniżej progu.

Możesz rozważyć launchdproces, jest to w zasadzie zaplanowane zadanie uruchamiane co xminutę. Są często używane przez zaawansowanych użytkowników, ale nie są zbyt trudne do skonfigurowania. Konfigurowane uruchomione zaplanowane zadanie konfiguruje się za pomocą pliku .plist, który umieszcza się w tym katalogu: Macintosh HD\Library\LaunchDaemonsi w ten sposób tworzona jest struktura pliku .plist;

<?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>

Jeśli miałbyś zapisać ten plik jak com.me.BatteryInfow LaunchDaemonswyżej wspomnianym folderze, utworzyłoby to zaplanowane zadanie, które będzie uruchamiane co 30 minut. Liczba 1800bezpośrednio powyżej </dict>to czas w sekundach określający częstotliwość uruchamiania zadania. Tam, <string>/Users/yourusername/batt.sh</string>gdzie jest napisane , określa się, który skrypt uruchamia się zgodnie z harmonogramem. Musisz wyjść <string>i </sting>nietknięty.

Linia <string>com.me.BatteryInfo</string>to unikalna nazwa zaplanowanego zadania. Jeśli masz zamiar zrobić więcej niż jeden, upewnij się, że każdy .plist ma tutaj unikalną nazwę.

Następną rzeczą, którą musisz zrobić, to zmienić własność .plist na root. Jest to wymagane jako funkcja bezpieczeństwa (zakładam, że oprogramowanie / użytkownicy nie mogą tworzyć zaplanowanych szkodliwych zadań). Aby zmienić własność pliku, wykonaj: sudo chown root \Library\LaunchDaemons\yourtask.plist(zamień yourtask.plist na rzeczywistą nazwę pliku .plist, który utworzyłeś). To zadanie wyświetli monit o podanie hasła.

Teraz musisz utworzyć skrypt, który będzie działał okresowo. Musisz utworzyć plik .sh (skrypt bash), aby powiedzieć komputerowi, co ma robić. Aby utworzyć plik .sh, otwórz edytor tekstów dla programistów, taki jak Sublime Text lub Komodo Edit . NIE używaj edycji tekstu, ponieważ często dodaje on do plików tekst, który zakłócałby twój skrypt. Tak naprawdę nie należy używać edycji tekstu w kodzie.

Utwórz skrypt (plik .sh) z następującym kodem;

#!/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

Zamień echo 'charged.'na komendę terminalową, którą chcesz uruchomić, gdy bateria jest naładowana. open /Applications/Notes.appotworzy aplikację Notes; możesz zmienić katalog, aby otworzyć inną aplikację.

$percent > 95Mówi to, że następny wiersz ma działać tylko wtedy, gdy akumulator jest więcej niż 95naładowany. Możesz zmienić to na co tylko chcesz. Poziom naładowania baterii często będzie nieznacznie różnić się od tego, co wyświetla się na pasku menu u góry. Jeśli chcesz „uruchomić, gdy bateria jest w pełni naładowana”, zalecam pozostawienie tej wartości jako> 95 . Jeśli chcesz na przykład uruchomić zadanie, gdy poziom naładowania baterii spadnie poniżej 20%, zmień go na$percent < 20

UWAGA: Ponieważ jest to zaplanowane zadanie, skrypt będzie uruchamiany co xkilka minut. Oznacza to, że jeśli umieścisz open \Applications\Notes.appw skrypcie, aplikacja Notes uruchomi się co xminutę (jeśli bateria jest naładowana)

To zadanie zostanie uruchomione, nawet jeśli nikt nie jest zalogowany.

Wiem, że zadałeś to pytanie jakiś czas temu, ale mam nadzieję, że to komuś pomoże.

Joseph
źródło
2

Nie jest to specyficzne dla komputerów Mac, ale Mozilla Aurora ma wbudowany interfejs API, który zawiera wiele funkcji związanych z baterią. Można wykryć stan baterii (czy jest ładowany czy nie), ile czasu zajmie rozładowanie / naładowanie baterii oraz jej poziom. Istnieje prosty przykład dodania EventListener w celu wywołania funkcji, gdy poziom naładowania akumulatora osiągnie określony poziom.

Andrew Ng
źródło
Chcę, aby było to oparte na systemie operacyjnym, więc nie potrzebuję połączenia z Internetem ani otwartej przeglądarki itp. Po prostu coś, co może się zdarzyć w tle.
Wadliwy Żongler