ラップトップバッテリーの充電と放電のサイクルを制御するスクリプト

知っている人は、ラップトップのリチウムバッテリーを良好な状態に保つためには、40%の放電で電流に接続し、80%の充電で切断する必要があると言います。

多くのメーカーは、特定の割合に達したときにバッテリーへの電流の流れを「非アクティブ化」するオプションをバイオスに含めており、機器はその瞬間からの電流のみを使用しますが、私の特定のケースでは、 Lenovo IdeaPadU510にはそのオプションがありません。

Linuxでは、ソフトウェアレベルでこれを実行するアプリケーションや、バッテリーが特定の%に達したときにのみ通知するアプリケーションを知らないため、電流を接続および切断する必要があるときに通知する小さなスクリプトを作成することにしました。

ラップトップバッテリーの充電および放電サイクルを制御するためのスクリプト要件

最初に必要なのは、パッケージをインストールすることです ACPI 私たちのコンピューターで。 私の場合、ArchLinuxを使用しているので、実行する必要があります。

$ sudo pacman -S acpi

なぜACPIが必要なのですか? さて、私たちのバッテリーの状態を知るために。 それを実行すると、次のようなものが返されます。

leni ::〜»acpiバッテリー0:放電、76%、残り02:20:07

次は、通知を実行するファイルを作成します。私の場合は、フォルダー内に配置します。 〜/ .battery、そして私はそれに名前を付けました bat_notification.sh。 中に私は以下を入れました:

#!/bin/bash # # -*- ENCODING: UTF-8 -*- # このプログラムはフリーソフトウェアです。あなたはそれを再配布したり、 # その両方を行うことができます。 # フリーソフトウェア財団によって公開されている GNU 一般公衆利用許諾契約書の条項に基づいて、 # そのライセンスのバージョン 2 または (オプションで) # 以降のバージョンのいずれかに変更することができます。 # # このアプリケーションに変更を加える場合は、 # 必ず元の作成者に言及する必要があります。 # # DesdeLinux.net CC-BY-SA 2015 # 著者: ELAVdesdelinux.net> # バッテリーのステータスを取得しますが、パーセンテージのみを取得します。 BATTERY=`acpi | awk '{print $4}'` # 状態をテキスト ファイルに渡します: echo $BATERIA > tmp_bateria.txt # テキスト ファイルから不要な情報を削除します: RESULT=`cut -c 1-2 tmp_bateria.txt` if [ $ RESULT -ge 80 ]; then notification-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery "バッテリー通知" "電源を切ってください" elif [ $RESULT -le 40 ]; then notification-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery "バッテリー通知" "電源を接続してください" else $BATTERY > /dev/null fi

スクリプトがラップトップバッテリーの充電および放電サイクルを制御するためにどのように機能するか

それがどのように機能するかについての説明は内部にありますが、私はそれを簡単に説明します。

まず、 awk バッテリーからパーセント値を抽出するだけで、次のようなものが返されます。 76%、。 この結果はテキストファイルに転送され、後で不要な文字が削除され、数値のみが残ります。

ファイルに必要な権限を付与します。

$ chmod a+x ~/.bateria/bat_notificacion.sh

ArchLinuxの使用方法 システムD 古いものはありません crontabcronieをインストールします。 次に、スクリプトが常にバッテリーの状態をチェックするようにcrontabを編集します。

$ crontab -e

そして私は中に追加します:

#バッテリーチェック* * * * * cd /home/elav/.battery/ && ./bat_notification.sh

そして出来上がり、バッテリーのパーセンテージが40%以下、または80%以上の場合、次のような通知が表示されます。

バッテリー通知

そしてこれはそれです..あなたがしたいどんな貢献、コード提案など、あなたは私のリポジトリを通してそれをすることができます Bitbucket.


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   ダーピー

    とても良いですね、試してみたいと思いますが、私は何よりもデスクトップ コンピュータを使用します :/
    XNUMX つ質問がありますが、一時ファイルはどこに保存されますか? 例えば家に置いてある場合、目に入らなくても済むようにその前に点を置いてもらえませんか? 😛

    1.    エラヴ

      まあ、私の場合は自宅の隠しフォルダー内でスクリプトを実行しているので、そのような問題はありません。 一時ファイルはスクリプトと一緒にホストされます。 😀

  2.   ナムレス

    スクリプトは優れていますが、ラップトップのバッテリーの問題について読んだことがありますが、100% 充電されたときにバッテリーが切断されるかどうかの問題がまだわかりません。
    わお、私は Lenovo を 2 年以上使っていますが、何の問題もありません (木をたたく): v
    要するに、バッテリーの問題が本当なのか、それとも単なる迷信なのか、誰かが説明してくれると良いでしょう。
    ご挨拶!

    1.    ブラックネット

      私は Dell Inspiron ラップトップを持っていますが、これはもう XNUMX 年前ですが、常に接続するようにしていますが、接続しなくてもバッテリーはまだ約 XNUMX 時間持続します (もちろん仕事の内容によって異なります)。 私はそれが素晴らしいアドバイスだと思います、私はそれをインストールしようとします...よろしく

  3.   スタッフ

    systemd を使用している場合 (ケースはありません。私も間違いました)、タイマーを使用でき、サードパーティのアプリケーションをインストールする必要はありません。

    https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

    バッテリーについては、OSに依存せずに、リチウムバッテリー自体の回路が限界に達すると充電を切断する、そうでない場合は確実に爆発することを理解しています 🙂
    そして、バッテリーの寿命を守るために常に容量の 40% だけを使用しなければならないとしたら、それはバッテリーが損傷しているのと同じことになります。
    100% に達したとき、またはその直前に充電器を外す必要がありますが、これはバッテリーにいわゆる「ストレス」がかかること (99% と 100% の間で充電プロセスを迅速に開始および終了すること) を避けるためだけです。

    1.    エラヴ

      そうですね、本当にわかりません、いろんな意見があって誰の意見を聞いたらいいのかわかりません。

      1.   

        まあ、それはあなたの PC なので、お好みのものを使用してください。ただし、さまざまな方法を知っておくことは常に良いことです 🙂

      2.   

        まあ、それはあなたの PC なので、好きなものを使用してください。y の代わりに x のものを使用するほうが良いと言う人は常にいます。

        Linuxには同じXDを行う方法がたくさんあります

        代替品について
        負荷を知るためのカーネル2.6からのACPIの代替品は次のとおりです。
        cat /sys/class/power_supply/BAT1/capacity

  4.  

    すべてのスケジュールされたタスクを XNUMX つのファイルに統合したいと考える人もいます。 これらのそれぞれのファイルを作成する代わりに。

    私にはちょっとやりすぎな気がします xD

    1.    エラヴ

      Systemd Cronを意味する場合、それは私には過度にさえ見えません。 自分の人生を複雑にするなんて方法。

  5.   コプロトク

    私は専門家ではありませんが、このテーマに関する非常に優れたドキュメントを次に示します。

    http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries

    http://batteryuniversity.com/learn/article/charging_lithium_ion_batteries

    よろしく

  6.   ThecaTony

    アイデアはとても良いです、ありがとう。

    acpi への依存を排除​​するには、雨がコメントに渡したバッテリー充電に関するデータを使用してスクリプトを調整する必要があります。
    私が奇妙だと思うのは、確立された制限を超えたら、繰り返し通知が到着し始めるということですよね? もしそうなら、追加のコントロールを追加する必要があります。

    #!/ bin / shを
    BATLVL=$(cat /sys/class/power_supply/BAT0/capacity)
    if [ $BATLVL -ge 80 ]; それから
    もしも [ ! -a /tmp/batwarn ]; それから
    Notice-send –urgency=critical –expire-time=5000 –app-name=Battery –icon=battery 「バッテリー通知」 「電源を切断してください」 ;
    touch /tmp /batwarn;
    fi
    elif [ $BATLVL -le 40 ]; それから
    もしも [ ! -a /tmp/batwarn ]; それから
    Notice-send –urgency=critical –expire-time=5000 –app-name=Battery –icon=battery 「バッテリー通知」 「電源を接続してください」
    touch /tmp /batwarn;
    fi
    ほかに
    [-a /tmp /batwarn]; それから
    rm -f /tmp/batwarn ;
    fi
    fi

    (上記はテストされていませんが、私はそれがうまくいくと思いますが)

    乾杯!"

    1.    エラヴ

      ご意見ありがとうございます。今すぐ試してお知らせします。

  7.   EDU

    ラップトップの温度を制御して和らげる方法を知っている人はいますか? YouTube でビデオを視聴すると、温度が摂氏 40 度以上に上昇し、マシンのリソースがより多く消費されます。

    1.    元気

      ファンの掃除には、掃除機などを使用すると効果的です。 分解して掃除するのはあなたのスキルと自分の作業に自信があるかどうかにかかっています。

      ファンベースも良好ですが、より多くの空気を移動させるため、ファンをできるだけ大きくします。
      数年前、Dell XPSを使用して、ベースがなければ作業は不可能でした。 暑くなるにつれて速度は遅くなり、さらに暑くなりました。 ファン付きのベースを使用すると、非常にまともに動作させることができました。

      お役に立てば幸いです。

  8.   ゴンザロマルティネス

    とても良い脚本です!

    私がしたことは、100で請求することでした。私はそれを取り出して、直接電流で使用しました。 近くに電源がなかったときにバッテリーを使用しました。

    今、Macでは私はできません

  9.   ルチアーノラガッサ

    こんにちは、あなたのアイデアはとても良いですね。私も同じアイデアを念頭に置いていると言いましたが、今あなたのスクリプトを見て、適切な場合にのみ警告が表示されるように調整して修正しました。 結果をお伝えします。

    status = acpi | awk '{print $ 3}' number = acpi | awk '{$ 4}' |を印刷しますCut -c 1-2 echo $STATUS $NUMBER% if [ "$STATUS"=="放電中," ] then if [ $NUMBER -le 40 ] then Notice-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery "バッテリー通知" "電源を接続してください" fi elif [ "$STATUS"=="充電中," ] then if [ $NUMBER -ge 80 ] then Notice -send --緊急=クリティカル -  expire-time = 5000 -app-name = battery -icon = battery "battery notification" "spitonnect power please" fi fi
    1.    エラヴ

      素晴らしいことですが、いくつかのコメントなどの提案で、今はこのように持っています。

      #!/bin/bash # # -*- ENCODING: UTF-8 -*- # このプログラムはフリーソフトウェアです。あなたはそれを再配布したり、 # その両方を行うことができます。 # フリーソフトウェア財団によって公開されている GNU 一般公衆利用許諾契約書の条項に基づいて、 # そのライセンスのバージョン 2 または (オプションで) # 以降のバージョンのいずれかに変更することができます。 # # このアプリケーションに変更を加える場合は、 # 必ず元の作成者に言及する必要があります。 # # DesdeLinux.net CC-BY-SA 2015 # 著者: ELAV  
      
      batlvl = $(cat/sys/class/power_supply/bat1/容量)[$ batlvl -ge 80]; 次に[! -a /tmp /batwarn]; その後、notify-send  -  urgency = crital- expire-time = 5000 -app-name = battery = battery "battery notification" "disconnect power please"; touch /tmp /batwarn; elif [$ batlvl -le 40]; 次に、[ ! -a /tmp/batwarn ]; 次に、notify-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery "バッテリー通知" "電源を接続してください" /tmp/batwarn をタッチします。 fi else if [ -a /tmp/batwarn ]; 次に rm -f /tmp/batwarn ; フィフィフィ
      1.    xxxtonixxx

        私が理解していないのは、値を保存しない空のファイルを作成する必要があること、また、検査する内容はスクリプトの実行時に検査する必要があり、その後で値を比較したりする必要がないため、何も保存する必要がないことです。スタイルのためなら何でも。 ファイルを作成することは最良の選択肢ではないと思います。 それをチェックポイントなどとみなすためにそれを作成しているので、それが一度以上実行されないか何かを実行しませんか?

    2.    ルチアーノラガッサ

      こんにちは、私が渡したソースにはいくつかのエラーがありましたが、きれいになったので、非常にうまく動作しているようです。

      status = acpi | awk '{print $3}' NUMBER=acpi | awk '{$ 4}' |を印刷しますCut -c 1-2 if expr match "$STATUS" "Discharging" then echo "Downloading $NUMBER%" if [ $NUMBER -le 40 ] then echo "電源をオンにしてください" Notice-send --urgency=critical -- expire-time=5000 --app-name=Battery --icon=battery "バッテリー通知" "電源を接続してください" fi elif expr match "$STATUS" "Charging" then echo "Charging $NUMBER% " if [ $NUMBER - ge 80 ] 次に echo "電源を切ってください" Notice-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery "バッテリー通知 " "電源を切ってください" fi fi
  10.   ジョニー127

    こんにちは、あなたの言っていることは、何よりも都市伝説です。 最近ラップトップを購入し、このテーマに関する情報を探し始めました。結論は、バッテリーを常に 100% まで充電し、再充電する前にできるだけ放電することです。

    バッテリーの耐用年数は x 回の充電サイクルであるため、充電すればするほど耐用年数は短くなります。

    富士通とモトローラのテクニカルサービスに連絡しましたが、どちらも上記のことを教えてくれました。 バッテリーを最大 80% までしか充電しないことや、x パーセンテージ以下で放電させないことを推奨するメーカーはありません。それは間違いです。繰り返しますが、バッテリーの全容量を最大限に活用するのが最善です。充電中と放電中。

    さらに、あなたが提案する制限を使用すると、バッテリーを頻繁に充電する必要があることになり、それもあまり意味がありません。

    上で説明したようにバッテリーが使用されるため、そのスクリプトを削除します。

    よろしく

  11.   アルマンドレジャー

    非常に興味深いトピックです。私にとって、通知は非常に便利に思えます。これはどのディストリビューションにも実装できる機能です。
    誰かがそれを Linux MInt に実装しましたか? それがどのように機能するかを見るのは興味深いでしょう。

    1.    スリムブックチーム

      良いです、
      Linuxミントの場合、Ubuntuのものを使用できます。ここにあります。
      https://slimbook.es/tutoriales/linux/45-script-linux-para-avisar-de-batearia-cargada
      敬具、
      スリムブックチーム

  12.   遠野

    いやあ、これはなんて良いブログなんだろう。今発見したんだ。約 15 日間 Ubuntu を試してみたんだけど、どれもとても面白くて、速くて、そして…要するに、私はこの世界とこのブログが本当に気に入っているんだ」私が訪れた場所は最高だと思います。

  13.   フレデリックリナックス

    そうですね、私は数か月前に JBattery を作成しました。これは同じことをグラフィカルに実行できる Java アプリで、最新バージョンではバッテリーの健康状態さえ知ることができます。 このプロジェクトについては、次のサイトで学ぶことができます。

    http://niconsystem.zz.mu/proyectos/jbattery

    1.    エラヴ

      面白い

  14.   デイビッド

    あなたのスクリプトからいくつかのことを学びました。 バッテリーについてはすでにいくつかの興味深い点を教えていただきましたが、私がバッテリーに関して重要だと思う点をいくつか書いておきます。 私はラジコンが好きです。私たちが使用している Lipo バッテリーは、より繊細ですが、ラップトップで使用されているリチウムに非常によく似ています。私たちの環境では、バッテリーの扱いにはもっと注意する必要があり、多少危険です (LiPo)。顔の目にかかるものなので、良い状態に保つことに関心があります。

    1.- 過放電または過負荷は絶対に行わないでください。 これはラップトップの回路によって適切に制御されています。そうでないと安全ではなくなり、メーカーは複数の恐怖を感じて市場から撤退することになります。 そのため、リチウム電池を搭載したデバイス (携帯電話など) は、電池が残り少なくなったときにのみオフになります。 負荷が 100% に達すると、最小メンテナンス電流が維持されます。 (モバイルを見てください。100% に達すると熱が減少します)。 最近のラップトップでは、接続されているときにバッテリーではなく電源入力から優先的に電力が供給されるため、たとえ 100% であっても接続したままにしても問題ありません。 もちろん、バッテリーの良好な状態を維持するには、最小値に達したためにバッテリーがオフになるのを防ぐのが良いですが、40% は過剰になります。 10~15%くらいあれば十分だと思います。

    2.- これらのバッテリーは熱により大幅に劣化します。充電して使用する場合は涼しい場所で行うことが望ましいです。放電は言うまでもなく、暑い場所よりも涼しい場所で充電する方が時間がかからない可能性があります。 。 問題は、ラップトップが非常に熱くなることです。温度を下げることができれば、さらに数分は続くでしょう。

    3.- バッテリーの充電回数は減らすほど良いです。 高品質のバッテリーの寿命はおよそ 1000 回以上の充電サイクルです。 丁寧に扱えば寿命は長くなりますが、乱暴に扱うと寿命が早くなってしまいます。 数年経つと、携帯電話やノートパソコンのバッテリーの持ちがどんどん減っていく様子を見てください。 20%から100%に請求すると、40〜80%よりもはるかに長く続きます。

    4.- 最新のラップトップの内部回路では、主に電源コンセントに接続されている場合、またはラップトップ モードの場合、バッテリー使用プロファイルを構成できます。 現在の接続に接続する場合は、その方法を設定します (残念ながら、これを行うメーカーのソフトウェアは Windows のみに付属していますが、BIOS で設定できる可能性があります)。実際、プラグイン モードでは、バッテリーが使用されていないときに最適に維持および保存される方法であるため、80%に達したときに負荷が切断されます。 充電は、バッテリーが約40%を下回ると開始されます。 これは私の好みの構成ですが、プラグを抜いて使用する必要がある場合は、バッテリーの初期残量が 80% になることに注意してください。 ポータブルモードにすると、100%まで充電されますが、私の記憶が正しければ、最小値(おそらく40〜60%の間)を下回るまで充電は開始されないため、完全に動作します。あなたが通常それでたくさん移動する場合、このモードでプラグインします。

    5.- 現在のテクノロジーは通常リチウムであるため、メモリー効果の影響を受けません。何年も前に BIOS に存在し、バッテリーをクリーンアップまたは回復するために数回の充電/放電サイクルを実行するオプションは、もはや意味がありません。 これはニッケルカドミウムの場合にはより意味があり、ニッケル水素の場合はそれほど意味がありませんが、リチウム (リチウム、ライフ、リポ) の場合は意味がありません。

    6.- 1 と 3 の内容を考慮すると、バッテリーは少しずつ放電しますので、放電した状態で長時間放置しないでください。 このスクリプトは、バッテリが「ラップトップ モード」になっているラップトップを使用していて、長期間使用しないままにする場合に警告する良い方法です。そのため、バッテリを約 80 ~ 85% に保つのが理想的です。彼らは時間の経過とともに充電をより良く保つので、実際には、購入したその日に届くはずです。

    注意点として、バッテリーの最後の 5% (95 ~ 100%) は充電にかなりのコストがかかるため、急いで何度も使用する場合は、100% に達するまで待つ価値はありません。わずか5%です。

    敬具、
    デイビッド。

    1.    エラヴ

      素晴らしい説明ありがとうございます

  15.   ファビアン

    こんにちは。他の通知と同じようにサウンドを再生する目的でヒントを増やしてスクリプトを編集しようとしていますが、再生されません。何が間違っているのか教えていただけますか。

    通知送信 -h 文字列:サウンドファイル:/usr/share/sounds/KDE-Sys-Error-Printing.ogg "テスト" "これは音声通知テストです"

  16.   ディエゴ

    良い…
    カット以上のもの

    結果=cut -c 1-2 tmp_bateria.txt

    TRをやるべきではないですか?

    結果=tr "%," " " < tmp_bateria.txt

    それ以外の場合はカットすると、バッテリーが 100 であれば 10 (-c 1-2) かかり、接続するよう求められます。
    ああ…私は自分自身に答えます。 このスクリプトを実行すると、100 に到達することはありません 🙂 現在、アダプターが接続されている私の場合と同様です:p
    ありがとう。

  17.   マリオ

    こんにちは。 素晴らしいスクリプトです。同様のことを考えていますが、電子充電コントローラーを使用する代わりに、たとえばバッテリーが 100% に達すると充電を停止し、電源から直接エネルギーを取得します。 たとえば、最大 80℅ まで充電するように選択すると、そのレベルに達すると、コントローラーはバッテリーへのエネルギーの送信を停止し、接続したり切断したりすることなく、電源からの電流のみを受け取ります。不必要なサイクルを費やし、同時にバッテリーは早期の劣化を避ける範囲で常に動作します。

  18.   ホセ・アルベルト・チャベス・アルバレス

    すみません、ラップトップの充電を無効にし、充電レベルが低いときにリレーをアクティブにするスクリプトを作成できると思いますか。