Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

M1 Macの各種温度センサーから値を取得する

Posted on 8月 17, 2021 by Takaaki Naganoya

Mac内の各種温度センサーから値を取得するAppleScriptのM1 Mac(Apple Silicon Mac)の対応版です。

近年、macOSのCPU温度管理+放熱ファンの回転数制御がとってもいい加減で、AppleScriptからOSの機能を呼び出しまくるとCPU温度の加熱を心配する必要が出ていました(本当)。AppleScriptから高速にコントロールを行うとCPU温度が上昇し、サーマルスロットリングを引き起こしていました(本当)。

そのため、CPUの温度を計測する処理はけっこう重要なものになっていました。ちかごろは、バッチでまとまった処理を行うさいには、ループの一部でCPUの温度を計測して、異常過熱に備えるようになっています。

→ SMCkitで各種センサー値を取得する

M1 Macではそれほど温度の上昇は激しくはありませんが、製品ラインナップ中にはファンレス機(MacBook Air)もあるので、依然として温度センサーへのアクセスはAppleScriptによるバッチ処理でも必要となるはずです。

# 幸いにというか残念なことにというか、現在のM1 Mac+macOS 11.xではCocoaの機能呼び出し時にM1のIcestormで各種処理が行われてしまうために、心配するほどの異常過熱はなさそうです。速度がIntel Macよりも遥かに遅くなるので心配ありません(macOS 11時代の話。macOS 12でこれが改善されたために、Cocoaの機能を呼び出してもIntel Macを超えるスピードで処理できるようになった)

# 放熱ファンの回転数制御もできたらよかったのですが、そちらはなかなかAppleScriptからは呼べていません。TG Proの開発元にファン制御機能をAppleScriptから呼べるようにすることも提案しましたが、回転数を下げたままCPUをブン回すと異常加熱を起こすため、一律に強制ファン回転させることで対処することを逆に提案されました(つまり、提案が却下されたわけです)

その肝心のモジュールであるSMCWrapperがM1 Mac上では動かなくなっていました。理由の1つには、書かれた時代が古くてビルドできないこと。もう1つは、Intel MacとApple Silicon Macのハードウェア構成はそもそも別物なので、Intel Mac向けに書かれたプログラムでは必要なセンサーの値を取れなくなっていたことがあります。

「というわけで、M1 Mac上で温度センサーの値を取れません」

と、書こうとして「apple_sensors」のプロジェクトを見つけました。このプログラムを一部書き換え、センサー値の取得をループで行っていた部分を、1回で終了するようにしてバッチ処理の中で呼び出せるようにしてみました。

{{sName:"PMGR SOC Die Temp Sensor1", sVal:33.1}, {sName:"PMU tdev5", sVal:-21.6}, {sName:"PMU tdie6", sVal:40.8}, {sName:"PMU tdev3", sVal:37.3}, {sName:"PMU2 TR1l", sVal:42.8}, {sName:"ANE MTR Temp Sensor1", sVal:30.0}, {sName:"PMU tdev6", sVal:36.5}, {sName:"ISP MTR Temp Sensor5", sVal:30.0}, {sName:"GPU MTR Temp Sensor4", sVal:30.0}, {sName:"PMU tdev8", sVal:36.4}, {sName:"PMU tdie8", sVal:40.0}, {sName:"PMU2 TR3b", sVal:41.8}, {sName:"SOC MTR Temp Sensor0", sVal:32.4}, {sName:"eACC MTR Temp Sensor3", sVal:29.9}, {sName:"pACC MTR Temp Sensor5", sVal:28.5}, {sName:"PMU TP3w", sVal:41.6}, {sName:"PMU2 TR1d", sVal:36.8}, {sName:"PMU tdie1", sVal:41.8}, {sName:"PMU2 TR5b", sVal:42.4}, {sName:"PMU tdev7", sVal:38.1}, {sName:"PMU tdev1", sVal:35.4}, {sName:"PMU2 TR3d", sVal:35.3}, {sName:"pACC MTR Temp Sensor9", sVal:32.7}, {sName:"PMU2 TR7b", sVal:41.3}, {sName:"PMU tdev4", sVal:-21.5}, {sName:"pACC MTR Temp Sensor7", sVal:32.5}, {sName:"PMU tdie5", sVal:40.7}, {sName:"PMU2 TR5d", sVal:36.3}, {sName:"pACC MTR Temp Sensor3", sVal:32.0}, {sName:"PMU tdie7", sVal:41.3}, {sName:"PMGR SOC Die Temp Sensor2", sVal:32.9}, {sName:"PMU2 TR2l", sVal:42.9}, {sName:"PMU tdie2", sVal:39.8}, {sName:"pACC MTR Temp Sensor8", sVal:33.2}, {sName:"PMU tcal", sVal:51.9}, {sName:"PMU2 TR0Z", sVal:51.9}, {sName:"PMU2 TR4b", sVal:42.5}, {sName:"pACC MTR Temp Sensor4", sVal:32.1}, {sName:"PMGR SOC Die Temp Sensor0", sVal:33.1}, {sName:"GPU MTR Temp Sensor1", sVal:30.0}, {sName:"eACC MTR Temp Sensor0", sVal:29.4}, {sName:"PMU tdie4", sVal:40.7}, {sName:"PMU2 TR2d", sVal:35.0}, {sName:"PMU2 TR6b", sVal:40.3}, {sName:"SOC MTR Temp Sensor2", sVal:33.1}, {sName:"PMU tdev2", sVal:35.9}, {sName:"SOC MTR Temp Sensor1", sVal:35.5}, {sName:"NAND CH0 temp", sVal:34.0}, {sName:"PMU2 TR4d", sVal:35.2}, {sName:"pACC MTR Temp Sensor2", sVal:31.7}, {sName:"PMU2 TR8b", sVal:40.3}}

ただ、自分のマシン以外にM1 Macを持っていないので、M1 Macをお持ちの方は動作するか確認してみてください。CPU Typeを見て、Intel Macでは実行を中断するようになっています。

–> Download M1 Temp sensor(Applet)

下記リストはバンドル内にセンサー値にアクセスするコマンドライン・プログラムを含んでいないため、実行しても無意味です。

追記:M1 Pro、M1 Max、M1 UltraなどM1の派生プロセッサではセンサー名称が異なっているとの報告があります。また、後継プロセッサでセンサー名称がそのまま変更されない保証はありません

AppleScript名:sensor.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2021/08/17
—
–  Copyright © 2021 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

–https://github.com/fermion-star/apple_sensors
–Temperature Sensor Monitor for Apple Silicon M1
property comPathPX : missing value

set cpuRes to getCPUType() of me
if cpuRes is not equal to "ARM64E" then
  display dialog "This is not Apple Silicon Mac"
  
return
end if

set tMin to getMINAppleSiliconMacSensorValue() of me
display dialog "Minimum Temp(Celsius):" & tMin as string

set tMax to getMAXAppleSiliconMacSensorValue() of me
display dialog "maximum Temp(Celsius):" & tMax as string

set tList to getAppleSiliconMacSensorValues() of me
–> {{sName:"PMGR SOC Die Temp Sensor1", sVal:33.3}, {sName:"PMU tdev5", sVal:-21.5}, {sName:"PMU tdie6", sVal:41.2}, {sName:"PMU tdev3", sVal:37.6}, {sName:"PMU2 TR1l", sVal:43.1}, {sName:"ANE MTR Temp Sensor1", sVal:30.0}, {sName:"PMU tdev6", sVal:37.3}, {sName:"ISP MTR Temp Sensor5", sVal:30.0}, {sName:"GPU MTR Temp Sensor4", sVal:30.0}, {sName:"PMU tdev8", sVal:36.9}, {sName:"PMU tdie8", sVal:38.7}, {sName:"PMU2 TR3b", sVal:40.5}, {sName:"SOC MTR Temp Sensor0", sVal:32.8}, {sName:"eACC MTR Temp Sensor3", sVal:29.1}, {sName:"pACC MTR Temp Sensor5", sVal:29.3}, {sName:"PMU TP3w", sVal:41.8}, {sName:"PMU2 TR1d", sVal:37.5}, {sName:"PMU tdie1", sVal:42.8}, {sName:"PMU2 TR5b", sVal:42.4}, {sName:"PMU tdev7", sVal:38.7}, {sName:"PMU tdev1", sVal:35.7}, {sName:"PMU2 TR3d", sVal:35.9}, {sName:"pACC MTR Temp Sensor9", sVal:32.5}, {sName:"PMU2 TR7b", sVal:42.0}, {sName:"PMU tdev4", sVal:-21.5}, {sName:"pACC MTR Temp Sensor7", sVal:35.2}, {sName:"PMU tdie5", sVal:41.6}, {sName:"PMU2 TR5d", sVal:36.7}, {sName:"pACC MTR Temp Sensor3", sVal:34.2}, {sName:"PMU tdie7", sVal:40.8}, {sName:"PMGR SOC Die Temp Sensor2", sVal:33.5}, {sName:"PMU2 TR2l", sVal:42.0}, {sName:"PMU tdie2", sVal:40.0}, {sName:"pACC MTR Temp Sensor8", sVal:34.5}, {sName:"PMU tcal", sVal:51.9}, {sName:"PMU2 TR0Z", sVal:51.9}, {sName:"PMU2 TR4b", sVal:42.9}, {sName:"pACC MTR Temp Sensor4", sVal:33.4}, {sName:"PMGR SOC Die Temp Sensor0", sVal:33.4}, {sName:"GPU MTR Temp Sensor1", sVal:30.0}, {sName:"eACC MTR Temp Sensor0", sVal:30.5}, {sName:"PMU tdie4", sVal:41.6}, {sName:"PMU2 TR2d", sVal:35.8}, {sName:"PMU2 TR6b", sVal:40.8}, {sName:"SOC MTR Temp Sensor2", sVal:35.0}, {sName:"PMU tdev2", sVal:36.2}, {sName:"SOC MTR Temp Sensor1", sVal:35.6}, {sName:"NAND CH0 temp", sVal:34.0}, {sName:"PMU2 TR4d", sVal:35.7}, {sName:"pACC MTR Temp Sensor2", sVal:32.0}, {sName:"PMU2 TR8b", sVal:42.9}}

return tList

–最も値が小さなセンサー値を返す
on getMINAppleSiliconMacSensorValue()
  checkComPath() of me
  
  
set smcRes to do shell script comPathPX
  
set {aList, bList} to paragraphs of smcRes
  
  
set b1List to parseByDelim(bList, ", ") of me
  
set b1List to items 1 thru -2 of b1List
  
  
–マイナス値のデータを無視する
  
set b2List to {}
  
repeat with i in b1List
    set j to contents of i
    
if j > 0 then
      set the end of b2List to j
    end if
  end repeat
  
  
set maxRes to minimumFromList(b2List) of me
  
return maxRes as real
end getMINAppleSiliconMacSensorValue

–最も値が大きなセンサー値を返す
on getMAXAppleSiliconMacSensorValue()
  checkComPath() of me
  
  
set smcRes to do shell script comPathPX
  
set {aList, bList} to paragraphs of smcRes
  
  
set b1List to parseByDelim(bList, ", ") of me
  
set b1List to items 1 thru -2 of b1List
  
  
set maxRes to maximumFromList(b1List) of me
  
return maxRes as real
end getMAXAppleSiliconMacSensorValue

–すべてのセンサー名と値を取得
on getAppleSiliconMacSensorValues()
  checkComPath() of me
  
  
set smcRes to do shell script comPathPX
  
set {aList, bList} to paragraphs of smcRes
  
  
set a1List to parseByDelim(aList, ", ") of me
  
set b1List to parseByDelim(bList, ", ") of me
  
  
set a1List to items 1 thru -2 of a1List
  
set b1List to items 1 thru -2 of b1List
  
  
set aLen to length of a1List
  
set outList to {}
  
  
repeat with i from 1 to aLen
    set aDat to contents of item i of a1List
    
set bDat to contents of item i of b1List
    
set the end of outList to {sName:aDat, sVal:bDat as real}
  end repeat
  
  
return outList
end getAppleSiliconMacSensorValues

on checkComPath()
  if my comPathPX = missing value then
    set mePath to (path to me) as string
    
set comPath to mePath & "Contents:Resources:temp_sensor2"
    
set my comPathPX to quoted form of (POSIX path of comPath)
  end if
end checkComPath

on parseByDelim(aData, aDelim)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set dList to text items of aData
  
set AppleScript’s text item delimiters to curDelim
  
return dList
end parseByDelim

–最小値を取得する
on minimumFromList(nList)
  script o
    property nl : nList
  end script
  
  
set min to item 1 of o’s nl
  
repeat with i from 2 to (count nList)
    set n to item i of o’s nl
    
if n < min then set min to n
  end repeat
  
return min
end minimumFromList

–最大値を取得する
on maximumFromList(nList)
  script o
    property nl : nList
  end script
  
  
set max to item 1 of o’s nl
  
repeat with i from 2 to (count nList)
    set n to item i of o’s nl
    
if n > max then set max to n
  end repeat
  
return max
end maximumFromList

on getCPUType()
  set cpuStr to CPU type of (system info)
  
set aInd to (offset of " " in cpuStr)
  
if aInd = 0 then return cpuStr
  
set cpuStr to text 1 thru (aInd – 1) of cpuStr
  
return cpuStr
end getCPUType

★Click Here to Open This Script 

More from my site

  • iCalendarファイルの作成iCalendarファイルの作成
  • 国民の祝日を求める v7国民の祝日を求める v7
  • display drop dialogライブラリをv1.5にアップデートdisplay drop dialogライブラリをv1.5にアップデート
  • Pixelmator Proで2つの書類のレイヤー表示状態をシンクロPixelmator Proで2つの書類のレイヤー表示状態をシンクロ
  • 指定のアプリケーションの実行アーキテクチャを変更指定のアプリケーションの実行アーキテクチャを変更
  • 画像をExcelのワークシート上に配置画像をExcelのワークシート上に配置
(Visited 932 times, 1 visits today)
Posted in System | Tagged 11.0savvy Apple Silicon Mac | Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • macOS 13.6.5 AS系のバグ、一切直らず
  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • CotEditorで2つの書類の行単位での差分検出
  • Apple純正マウス、キーボードのバッテリー残量取得
  • macOS 15, Sequoia
  • Cocoa-AppleScript Appletランタイムが動かない?
  • macOS 14の変更がmacOS 13にも反映
  • ディスプレイをスリープ状態にして処理続行
  • 初心者がつまづきやすい「log」コマンド
  • Adobe AcrobatをAppleScriptから操作してPDF圧縮
  • 与えられた文字列の1D Listのすべての順列組み合わせパターン文字列を返す v3(ベンチマーク用)
  • macOS 13 TTS環境の変化について
  • macOS 14、英語環境で12時間表記文字と時刻の間に不可視スペースを入れる仕様に
  • メキシカンハットの描画
  • 新刊発売 AppleScript最新リファレンス v2.8対応
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • 2023年に書いた価値あるAppleScript
  • 指定のWordファイルをPDFに書き出す
  • 可変次元のベクトルに対応したコサイン類似度計算
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (586) 10.15savvy (436) 11.0savvy (280) 12.0savvy (200) 13.0savvy (122) 14.0savvy (70) 15.0savvy (40) CotEditor (62) Finder (50) iTunes (19) Keynote (109) NSAlert (60) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (19) NSImage (41) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (117) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (65) Pages (50) Safari (44) Script Editor (24) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • diff
  • drive
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC