Sự kiện dựa trên mức sạc pin


11

Tôi chưa tìm thấy gì cả nên tôi hy vọng có thể ai đó ở đây có ý tưởng.

Tôi muốn khởi động ngay cả dựa trên pin trên máy tính xách tay Apple đạt đến một mức sạc nhất định hoặc khi pin được sạc đầy.

Tôi biết tôi có thể có một cái gì đó chạy định kỳ, kiểm tra mức pin và quyết định những việc cần làm, nhưng tôi thích điều khiển sự kiện nếu có thể.

Câu trả lời:


5

Power Manager không miễn phí nhưng hỗ trợ kích hoạt các sự kiện dựa trên mức pin (bên trong hoặc UPS). Các sự kiện có thể chạy các tập lệnh, khởi chạy ứng dụng hoặc thực hiện các tác vụ như tắt máy.

Power Manager được điều khiển theo sự kiện và không thăm dò sự thay đổi của pin.

Thay vào đó, Power Manager nối vào lớp IOKit của OS X và chờ cập nhật từ phần cứng. Sự kiện có thể được kích hoạt khi không có ai đăng nhập; nó không phụ thuộc vào người dùng hoạt động.

Power Manager - Chạy tập lệnh trên pin còn lại

Các tác vụ Lịch trình Trợ lý tích hợp tập trung vào hiệu suất khi pin giảm xuống mức cụ thể, nhưng chúng có thể được điều chỉnh để kiểm tra mức tăng của phần trăm pin hoặc thời gian còn lại.

Hai bài đăng này nói về các nguồn năng lượng của UPS, nhưng chúng dễ dàng được điều chỉnh cho pin bên trong MacBook của bạn:

Tiết lộ: Tôi là một kỹ sư phần mềm đằng sau Power Manager.


3

Tôi muốn điều này dựa trên hệ điều hành, vì vậy tôi không cần kết nối internet hoặc trình duyệt mở, v.v. Chỉ cần điều gì đó có thể xảy ra trong nền

Cách dễ nhất để làm điều đó là với một ứng dụng, nhưng đây là cách thực hiện chỉ với các lệnh hệ điều hành tích hợp. Tôi biết bạn muốn nó được điều khiển theo sự kiện, nhưng tôi không chắc làm thế nào để thực hiện điều đó, vì vậy đây là một cách để kiểm tra mức pin, sau đó làm một việc khác nếu nó ở trên / dưới ngưỡng.

Bạn có thể xem xét một launchdquá trình, về cơ bản đây là một nhiệm vụ theo lịch trình chạy mỗi xphút. Chúng thường được sử dụng bởi người dùng cao cấp, nhưng không quá khó để thiết lập. Bạn định cấu hình tác vụ theo lịch trình launchd với tệp .plist mà bạn đặt vào thư mục này: Macintosh HD\Library\LaunchDaemonsvà đây là cách bạn cấu trúc tệp .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>

Nếu bạn lưu tệp đó như com.me.BatteryInfotrong LaunchDaemonsthư mục được đề cập ở trên, nó sẽ tạo một tác vụ theo lịch trình chạy cứ sau 30 phút. Số, 1800trực tiếp ở trên </dict>là thời gian tính bằng giây của tần suất bạn muốn tác vụ chạy. Nơi nó nói <string>/Users/yourusername/batt.sh</string>là nơi bạn chỉ định tập lệnh nào chạy theo lịch trình. Bạn phải rời đi <string></sting>nguyên vẹn.

Dòng <string>com.me.BatteryInfo</string>này là tên duy nhất của nhiệm vụ theo lịch trình. Nếu bạn định tạo nhiều hơn một, hãy đảm bảo mỗi .plist có một tên duy nhất ở đây.

Điều tiếp theo bạn cần làm là thay đổi quyền sở hữu của .plist thành root. Đây là một tính năng bảo mật (để ngăn chặn phần mềm / người dùng tạo các tác vụ độc hại theo lịch trình, tôi giả sử). Để thay đổi quyền sở hữu tệp, hãy thực hiện sudo chown root \Library\LaunchDaemons\yourtask.plist(thay thế yourtask.plist bằng tên tệp thực tế của .plist bạn đã tạo). Nhiệm vụ này sẽ nhắc bạn nhập mật khẩu.

Bây giờ bạn cần tạo tập lệnh sẽ chạy định kỳ. Bạn cần tạo một tệp .sh (tập lệnh bash) để báo cho máy tính biết phải làm gì. Để tạo tệp .sh, hãy mở trình soạn thảo văn bản cho lập trình viên, chẳng hạn như Sublime Text hoặc Komodo Edit . KHÔNG sử dụng Chỉnh sửa văn bản, vì nó thường thêm văn bản vào các tệp sẽ can thiệp vào tập lệnh của bạn. Chỉnh sửa văn bản không thực sự được sử dụng cho mã.

Tạo một tập lệnh (tệp .sh) với đoạn mã sau;

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

Thay thế echo 'charged.'bằng (các) lệnh đầu cuối bạn muốn chạy khi pin được sạc. open /Applications/Notes.appsẽ mở ứng dụng Ghi chú; bạn có thể thay đổi thư mục để mở một ứng dụng khác.

$percent > 95Điều này cho biết dòng tiếp theo chỉ chạy khi pin được sạc nhiều hơn 95. Bạn có thể thay đổi điều này thành bất cứ điều gì bạn muốn. Mức pin ở đây thường sẽ hơi khác với mức được hiển thị trong thanh menu ở trên cùng. Nếu bạn muốn 'chạy khi pin được sạc đầy', tôi khuyên bạn nên để mức này là> 95 . Nếu bạn muốn tác vụ chạy khi pin của bạn xuống dưới 20% chẳng hạn, hãy đổi nó thành$percent < 20

LƯU Ý: Vì đây là tác vụ theo lịch trình, tập lệnh của bạn sẽ chạy mỗi xsố phút. Điều này có nghĩa là nếu bạn đặt open \Applications\Notes.appbên trong tập lệnh của mình, ứng dụng Ghi chú sẽ bắt đầu mỗi xphút (nếu pin của bạn được sạc)

Nhiệm vụ này sẽ chạy ngay cả khi không có ai đăng nhập.

Tôi biết bạn đã hỏi câu hỏi này một thời gian trước đây, nhưng hy vọng điều này sẽ giúp được ai đó.


2

Đây không phải là dành riêng cho Mac, nhưng Mozilla Aurora có API tích hợp có chứa nhiều chức năng liên quan đến pin. Người ta có thể phát hiện trạng thái của pin (có sạc hay không), thời gian cần thiết để pin xả / sạc và mức độ của pin. Có một ví dụ đơn giản về cách thêm EventListener để gọi hàm khi mức pin ở một điểm nhất định.


Tôi muốn điều này dựa trên hệ điều hành, vì vậy tôi không cần kết nối internet hoặc trình duyệt mở, v.v. Chỉ cần một cái gì đó có thể xảy ra trong nền.
FaultyJuggler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.