배터리 충전량에 따른 이벤트 아이디어가 있기를 바랍니다. 특정 충전 수준에 도달하거나

아직 아무것도 찾지 못했기 때문에 여기 누군가가 아이디어가 있기를 바랍니다.

특정 충전 수준에 도달하거나 배터리가 완전히 충전되었을 때 Apple 노트북의 배터리를 기준으로 짝수를 시작하고 싶습니다.

정기적으로 무언가를 실행하고 배터리 잔량을 확인하고해야 할 일을 결정할 수 있지만 가능하면 이벤트 중심을 선호합니다.



답변

Power Manager 는 무료가 아니지만 배터리 수준 (내부 또는 UPS)을 기반으로 트리거 이벤트를 지원합니다. 이벤트는 스크립트를 실행하거나 응용 프로그램을 시작하거나 종료와 같은 작업을 수행 할 수 있습니다.

Power Manager는 이벤트 중심이며 배터리 변경을 폴링하지 않습니다.

대신 Power Manager는 OS X의 IOKit 계층에 연결하여 하드웨어의 업데이트를 기다립니다. 아무도 로그인하지 않으면 이벤트가 트리거 될 수 있습니다. 활성 사용자에 의존하지 않습니다.

내장 된 일정 도우미 작업은 배터리가 특정 수준으로 떨어질 때 수행하는 데 중점을 두지 만 배터리 백분율의 증가 또는 남은 시간을 확인하기 위해 조정할 수 있습니다.

이 두 게시물은 UPS 전원에 대해 설명하지만 MacBook의 내장 배터리에 쉽게 적용 할 수 있습니다.

공개 : 저는 Power Manager의 소프트웨어 엔지니어입니다.


답변

나는 이것이 OS 기반이기를 원하므로 인터넷 연결이나 브라우저가 필요하지 않습니다. 백그라운드에서 발생할 수있는 것

가장 쉬운 방법은 응용 프로그램을 사용하는 것이지만 내장 OS 명령으로 만 수행하는 방법은 다음과 같습니다. 이벤트 중심이 되길 원하지만 그 방법을 잘 모르겠습니다. 배터리 수준을 확인하고 임계 값보다 높거나 낮은 경우 다른 방법을 사용하는 방법이 있습니다.

launchd프로세스를 고려할 수 있습니다. 기본적으로 매 x분 마다 실행되는 예약 된 작업입니다 . 고급 사용자가 자주 사용하지만 설정하기가 어렵지 않습니다. 이 디렉토리에 넣은 .plist 파일을 사용하여 시작된 예약 된 작업 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.BatteryInfo에서 파일을 저장하면 LaunchDaemons30 분마다 실행되는 예약 된 작업이 생성됩니다. 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(task.plist를 사용자가 만든 .plist의 실제 파일 이름으로 바꾸십시오). 이 작업은 암호를 묻습니다.

이제 정기적으로 실행될 스크립트를 작성해야합니다. 컴퓨터에 수행 할 작업을 알려주려면 .sh 파일 (bash 스크립트)을 만들어야합니다. .sh 파일을 만들려면 Sublime Text 또는 Komodo 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, 스크립트 안에 넣으면 1 x분 마다 Notes 애플리케이션이 시작됩니다 (배터리가 충전 된 경우)

이 작업은 아무도 로그인하지 않아도 실행됩니다.

나는 당신 이이 질문을 한참 전에 알고 있다는 것을 알고 있지만, 이것이 누군가를 도울 것입니다.


답변

이것은 Mac 전용이 아니지만 Mozilla Aurora에는 다양한 배터리 관련 기능이 포함 된 내장 API가 있습니다. 배터리 상태 (충전 여부), 배터리 방전 / 충전 시간 및 레벨을 감지 할 수 있습니다. 배터리 잔량이 특정 지점에있을 때 함수를 호출하기 위해 EventListener를 추가하는 방법에 대한 간단한 예가 있습니다.