Acara berdasarkan tingkat pengisian daya baterai

11

Saya belum menemukan apa pun jadi saya berharap mungkin ada orang di sini yang punya ide.

Saya ingin memulai bahkan berdasarkan pada baterai pada laptop Apple mencapai tingkat pengisian tertentu, atau ketika baterai terisi penuh.

Saya tahu saya dapat menjalankan sesuatu secara berkala, memeriksa level baterai, dan memutuskan apa yang harus dilakukan, tetapi saya lebih suka jika didorong oleh peristiwa.

Patah Juggler
sumber

Jawaban:

5

Power Manager tidak gratis tetapi mendukung peristiwa pemicu berdasarkan level baterai (internal atau UPS). Acara dapat menjalankan skrip, meluncurkan aplikasi, atau melakukan tugas-tugas seperti mematikan.

Power Manager didorong oleh kejadian dan tidak melakukan polling untuk perubahan baterai.

Sebaliknya Power Manager menghubungkan ke lapisan IOKit OS X dan menunggu pembaruan dari perangkat keras. Acara dapat dipicu ketika tidak ada yang login; itu tidak bergantung pada pengguna aktif.

Power Manager - Jalankan skrip pada sisa baterai

Tugas Asisten Jadwal terintegrasi untuk melakukan ketika baterai turun ke tingkat tertentu, tetapi mereka dapat disesuaikan untuk memeriksa kenaikan persentase baterai atau sisa waktu.

Dua tulisan ini berbicara tentang sumber daya UPS, tetapi mereka dengan mudah disesuaikan untuk baterai internal MacBook Anda:

Pengungkapan: Saya seorang insinyur perangkat lunak di belakang Power Manager.

Graham Miln
sumber
3

Saya ingin ini berbasis OS, jadi saya tidak perlu koneksi internet atau browser terbuka dll. Hanya sesuatu yang bisa terjadi di latar belakang

Cara termudah untuk melakukannya adalah dengan sebuah aplikasi, tetapi di sini adalah bagaimana melakukannya hanya dengan perintah OS bawaan. Saya tahu Anda ingin ini dikendalikan oleh peristiwa, tetapi saya tidak yakin bagaimana mencapainya, jadi inilah salah satu cara untuk memeriksa tingkat baterai, kemudian melakukan sesuatu yang lain jika berada di atas / di bawah ambang batas.

Anda dapat mempertimbangkan suatu launchdproses, ini pada dasarnya adalah tugas yang dijadwalkan yang berjalan setiap xmenit. Mereka sering digunakan oleh pengguna tingkat lanjut, tetapi tidak terlalu sulit untuk diatur. Anda mengkonfigurasi tugas launchd terjadwal dengan file .plist yang Anda masukkan ke dalam direktori ini: Macintosh HD\Library\LaunchDaemonsdan ini adalah bagaimana Anda menyusun file .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>

Jika Anda menyimpan file itu seperti com.me.BatteryInfodalam LaunchDaemonsfolder yang disebutkan di atas, itu akan membuat tugas terjadwal yang berjalan setiap 30 menit. Angka,, 1800langsung di atas </dict>adalah waktu dalam detik seberapa sering Anda ingin tugas dijalankan. Di mana dikatakan <string>/Users/yourusername/batt.sh</string>adalah tempat Anda menentukan skrip mana yang berjalan sesuai jadwal. Anda harus pergi <string>dan </sting>tetap utuh.

Baris <string>com.me.BatteryInfo</string>adalah nama unik dari tugas yang dijadwalkan. Jika Anda ingin membuat lebih dari satu, pastikan masing-masing .plist memiliki nama unik di sini.

Hal selanjutnya yang perlu Anda lakukan adalah mengubah kepemilikan .plist menjadi root. Ini diperlukan sebagai fitur keamanan (untuk menghentikan perangkat lunak / pengguna yang membuat jadwal tugas jahat, saya kira). Untuk mengubah kepemilikan file, lakukan sudo chown root \Library\LaunchDaemons\yourtask.plist(ganti yourtask.plist dengan nama file sebenarnya dari .plist yang Anda buat). Tugas ini akan meminta kata sandi Anda.

Sekarang Anda perlu membuat skrip yang akan berjalan secara berkala. Anda perlu membuat file .sh (skrip bash) untuk memberi tahu komputer apa yang harus dilakukan. Untuk membuat file .sh, buka editor teks programer, seperti Sublime Text atau Komodo Edit . JANGAN gunakan Edit Teks, karena sering menambahkan teks ke file Anda yang akan mengganggu skrip Anda. Edit Teks tidak seharusnya digunakan untuk kode.

Buat skrip (file .sh) dengan kode berikut;

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

Ganti echo 'charged.'dengan perintah terminal yang ingin Anda jalankan ketika baterai diisi. open /Applications/Notes.appakan membuka aplikasi Notes; Anda dapat mengubah direktori untuk membuka aplikasi yang berbeda.

$percent > 95Ini memberitahu baris berikutnya untuk hanya berjalan ketika baterai lebih dari 95diisi. Anda dapat mengubah ini menjadi apa pun yang Anda inginkan. Level baterai di sini akan sering sedikit berbeda dengan apa yang ditampilkan di bilah menu di bagian atas. Jika Anda ingin 'berjalan saat baterai terisi penuh', saya sarankan membiarkan ini sebagai> 95 . Jika Anda ingin tugas dijalankan saat baterai Anda di bawah 20% misalnya, ubah ke$percent < 20

CATATAN: Karena ini adalah tugas yang dijadwalkan, skrip Anda akan berjalan setiap xbeberapa menit. Ini berarti jika Anda memasukkan open \Applications\Notes.appskrip Anda, aplikasi Notes akan mulai setiap xmenit (jika baterai Anda terisi)

Tugas ini akan berjalan bahkan jika tidak ada yang masuk.

Saya tahu Anda menanyakan pertanyaan ini beberapa waktu yang lalu, tetapi mudah-mudahan ini akan membantu seseorang.

Yusuf
sumber
2

Ini bukan khusus Mac, tetapi Mozilla Aurora memiliki API bawaan yang berisi berbagai fungsi terkait baterai. Seseorang dapat mendeteksi status baterai (apakah sedang diisi atau tidak), berapa lama lagi waktu yang diperlukan baterai untuk dikeluarkan / diisi, dan levelnya. Ada contoh sederhana tentang cara menambahkan EventListener untuk memanggil fungsi saat level baterai berada pada titik tertentu.

Andrew Ng
sumber
Saya ingin ini berbasis OS, jadi saya tidak perlu koneksi internet atau browser terbuka dll. Hanya sesuatu yang bisa terjadi di latar belakang.
FaultyJuggler