バッテリー充電レベルに基づくイベント


11

私はまだ何も見つけていないので、ここの誰かがアイデアを持っているかもしれないと思っていました。

Appleラップトップのバッテリーが一定の充電レベルに達したとき、またはバッテリーが完全に充電されたときに、バッテリーに基づいて均等にキックオフしたい。

定期的に何かを実行し、バッテリーレベルをチェックし、何をすべきかを決定できることは知っていますが、可能であればイベントドリブンの方が好きです。

回答:


5

Power Managerは無料ではありませんが、バッテリーレベル(内部またはUPS)に基づいてイベントをトリガーできます。イベントは、スクリプトを実行したり、アプリケーションを起動したり、シャットダウンなどのタスクを実行したりできます。

Power Managerはイベント駆動型であり、バッテリーの変更をポーリングしません。

代わりに、Power ManagerはOS XのIOKitレイヤーにフックし、ハードウェアからの更新を待ちます。誰もログインしていないときにイベントをトリガーできます。アクティブなユーザーに依存しません。

Power Manager-バッテリー残量でスクリプトを実行する

組み込みのスケジュールアシスタントタスクは、バッテリーが特定のレベルまで低下したときに実行することに焦点を合わせていますが、バッテリーの割合や残り時間の増加をチェックするために調整できます。

次の2つの投稿ではUPS電源について説明していますが、MacBookの内蔵バッテリーに簡単に適合できます。

開示:私はPower Managerの背後にいるソフトウェアエンジニアです。


3

私はこれをOSベースにしたいので、インターネット接続やブラウザを開くなどは必要ありません。バックグラウンドで発生する可能性のあることだけです

最も簡単な方法はアプリケーションを使用することですが、組み込みのOSコマンドのみを使用して行う方法があります。イベントドリブンにしたいのですが、それを実現する方法がわからないので、ここでバッテリーレベルをチェックし、しきい値を上回ったり下回ったりした場合に何か他のことを行う方法を紹介します。

あなたはlaunchdプロセスを考えるかもしれません、これは基本的に毎x分実行されるスケジュールされたタスクです。多くの場合、上級ユーザーが使用しますが、セットアップするのはそれほど難しくありません。このディレクトリに配置する.plistファイルを使用して、launchdスケジュール済みタスクをMacintosh HD\Library\LaunchDaemons構成します。これが.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>

上記com.me.BatteryInfoLaunchDaemonsフォルダーにそのファイルを保存すると、30分ごとに実行されるスケジュールされたタスクが作成されます。1800真上の数値は、</dict>タスクを実行する頻度の秒単位の時間です。それが言うところ<string>/Users/yourusername/batt.sh</string>は、スケジュールで実行するスクリプトを指定する場所です。<string>その</sting>ままにしておく必要があります。

<string>com.me.BatteryInfo</string>は、スケジュールされたタスクの一意の名前です。複数作成する場合は、各.plistに一意の名前を付けてください。

次に行う必要があるのは、.plistの所有権をに変更することrootです。これはセキュリティ機能として必要です(スケジュールされた悪意のあるタスクを作成するソフトウェア/ユーザーを停止するために、私は推測します)。ファイルの所有権を変更するには、実行しますsudo chown root \Library\LaunchDaemons\yourtask.plist(yourtask.plistを、作成した.plistの実際のファイル名に置き換えます)。このタスクでは、パスワードの入力を求められます。

ここで、定期的に実行するスクリプトを作成する必要があります。.shファイル(bashスクリプト)を作成して、コンピューターに何をするかを指示する必要があります。.shファイルを作成するには、Sublime TextKomodo Editなどのプログラマーテキストエディターを開きます。多くの場合、スクリプトに干渉するテキストをファイルに追加するため、テキスト編集は使用しないでください。テキスト編集は実際にはコードに使用しないでください。

次のコードを使用してスクリプト(.shファイル)を作成します。

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

echo 'charged.'バッテリーが充電されたときに実行したいターミナルコマンドに置き換えます。open /Applications/Notes.appNotesアプリケーションを開きます。ディレクトリを変更して別のアプリケーションを開くことができます。

$percent > 95これにより、次の行は、バッテリーが95充電されたときにのみ実行されるようになります。これは任意に変更できます。ここのバッテリーレベルは、多くの場合、上部のメニューバーに表示されるものとわずかに異なります。「バッテリーが完全に充電されたときに実行する」場合は、これを> 95のままにしておくことをお勧めします。たとえば、バッテリーが20%を下回ったときにタスクを実行したい場合は、それを$percent < 20

注:これはスケジュールされたタスクであるため、スクリプトはx分単位で実行されます。これはopen \Applications\Notes.app、スクリプト内に配置すると、Notesアプリケーションがx数分ごとに起動することを意味します(バッテリーが充電されている場合)

このタスクは、誰もログインしていない場合でも実行されます。

しばらく前にこの質問をしたことは知っていますが、うまくいけば誰かの助けになるでしょう。


2

これはMac固有ではありませんが、Mozilla Auroraにはさまざまなバッテリー関連機能を含む組み込みAPIがあります。バッテリーの状態(充電中かどうか)、バッテリーの放電/充電にかかる時間、およびそのレベルを検出できます。バッテリーレベルが特定のポイントにあるときに関数を呼び出すEventListenerを追加する方法の簡単な例があります。


私はこれをOSベースにしたいので、インターネット接続やブラウザを開く必要はありません。バックグラウンドで発生する可能性のあることだけです。
FaultyJuggler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.