SMCWrapperをCocoa Framework化してAppleScriptから呼びやすいように書き換えた「SMCKit.framework」を呼び出して、CPUの温度や放熱ファンの回転数を取得するAppleScriptです。
AppleScriptからCocoaを呼び出して高速処理を行っていたら、CPUの温度が上がりすぎて焦ったことがありました。これは、対策をしておいたほうがよいでしょう。
Macの放熱ファン制御&温度管理ソフトウェアで、最近評判がいいのはTunabelly Softwareの「TG Pro」。
ただし、これはAppleScriptから制御できるタイプのソフトウェアではなかったので、別の手段を探してみました(MacBook Proの放熱強化のためには利用しています)。
SMC(System Management Controller)からCPUの温度を取得するオープンソースのプログラム「SMCWrapper」を見つけたのですが、すでにメンテナンスされておらず、しかもAppleScriptから呼び出しやすい構造になっていなかったため、Cocoa Framework化しただけで手元に放置してありました。
— Created 2017-07-28 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "SMCKit"
set numberOfFuns to current application’s NSString’s new()
current application’s SMCWrapper’s readKey:"FNum" asString:(numberOfFuns)
★Click Here to Open This Script
↑こんな風に呼んでは、動かないことを確認していました(↑は本当に動きません)。
CPUの温度は取得できたほうがよさそうだったので、SMCWrapperにAppleScriptから呼び出しやすいようにメソッドを追加して呼び出してみました。
–> Download SMCKit.framework(To ~/Library/Frameworks/)
readKeyAsString: というメソッドだけ新設して使っていますが、けっこう便利です。
AppleScript名:SMCkitのじっけん v2.scptd |
— Created 2018-08-21 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" use framework "SMCKit" –https://github.com/FergusInLondon/SMCWrapper –I turned the SMCWrapper into Cocoa Framework and change it to call from AppleScript set smc to current application’s SMCWrapper’s sharedWrapper() –FNum => Number of Fans set a0Res to (smc’s readKeyAsString:"FNum") as list of string or string –as anything –> 2 — TC0P => CPU Temperature set a1Res to smc’s readKeyAsString:"TC0P" –> 57.125 — F0Ac => Fan0 Actual RPM set a2Res to smc’s readKeyAsString:"F0Ac" –> 5891.00 — F0Mn => Min RPM set a3Res to smc’s readKeyAsString:"F0Mn" –> 5888.00 — F0Mx => Max RPM set a4Res to smc’s readKeyAsString:"F0Mx" –> 5940.00 if a0Res ≥ 2 then — F1Ac => Fan1 Actual RPM set a5Res to smc’s readKeyAsString:"F1Ac" –> 5439.00 — F1Mn => Min RPM set a6Res to smc’s readKeyAsString:"F1Mn" –> 5440.00 — F1Mx => Max RPM set a7Res to smc’s readKeyAsString:"F1Mx" –> 5940.00 end if |
2018年に書いた価値あるScript – AppleScriptの穴 says:
[…] ・CPUの温度、放熱ファンの回転数を取得する MacBook Proでデモを行っている最中に、AppleScriptを走らせて遅くなる現象に直面することがままありました。よくよく調べてみたら、長大なApple […]