A homebridge plugin that get macOSX information
npm install homebridge-macosx-info
See changelog
homebridge-macosx-info is homebridge plugin for Apple HomeKit, get and return somes systems informations from macOSX computer.
Such as :
* updateTime
* Temperature (C°)
* Fan speed (rpm)
* Uptime
* show how long system has been running
* Load average (%)
* the load average of the system over the last 1, 5, and 15 minute
* Free Mem (Mo)
* Disk avalable (%)
* Users (nb)
* CPU Power consumption (Watt)
You can see below screenshots for illustrate homebridge-macos-info plugin.
!homebridge-macos-info, Eve., screenshot
>Screenshots are taken from the Elgato Eve.app
json
{
"updateTime":"Fri May 31 19:35:36 CEST 2019",
"temperature":31.3,
"fan":1797,
"power":1.25,
"uptime":"up 13:21",
"load":"2.52 2.17 2.07",
"freemem":639.96,
"disk":"50",
"user":2
}
`
Prerequisites
Install Homebrew (Homebrew installs the stuff you need that Apple didn’t)*
* Install node.js on macOS
* Install Homebridge on macOS
Install Homebridge Config UI X on macOS (optional)*
* Install Eve.app on iOS (for all availables plugin function), or it's possible to used "Home" app, but only on macOSX Majave and iOS (all plugin function aren't availables on this app !)
* Enable NOPASSWD for user in /etc/sudoers fileInstallation
Used npm tool to install homebridge-macosx-info, and execute the command line below`console
npm i homebridge-macosx-info
`Configuration
$3
Add this lines in config.json
`json
"accessories": [
{
"accessory": "MacOSXSysInfo",
"name": "macOSX Info",
"file": "/tmp/_homebridge-macosx-info.json",
"serial": "042-03-000",
"consumption": true,
"user": true,
"updateInterval": 60000
}
],
`| Parameter | Note | Optionnal | value |
|-----------------|------|-----------|-------|
|
accessory | Name of accessory|No|MacOSXSysInfo|
| name | a human-readable name for your plugin|No|macOSX Info|
| file | .json respons file|yes|default : /tmp/_homebridge-macosx-info.json|
| updateInterval| is time in ms of data update|yes|default : null|
| consumption| true for log CPU Consumption|yes|default : null|
| user| true for log Users number|yes|default : null|
>Note :
>1. The
index.js call shell script. You can find this script in the repository in /src/sh directory
>2. It's possible that you can change the path of homebridge-macosx-info.sh in readUptime function on index.js script
`js
async function readUptime() {
const exec = require('child_process').exec;
var script = await exec('/usr/local/lib/node_modules/homebridge-macosx-info/src/sh/homebridge-macosx-info.sh',
(error, stdout, stderr) => {
if (error !== null) {
//this.log("exec error: " + ${error});
}
});
};
`
$3
1. You can change path of temporary .json files -> var JSON_DATA_FILE
2. You can change path and option of check_osx_smc binary -> var CHECK_OSX_SMC`sh
DIR=$(dirname $0)
JSON_DATA_FILE=/tmp/_homebridge-macosx-info.json # path of .json respons file
CHECK_OSX_SMC=$DIR/../../bin/check_osx_smc # path of check_osx_smc binaryfunction sys_mon()
{
# See the hardware compatibility -> https://github.com/jedda/OSX-Monitoring-Tools/blob/master/check_osx_smc/known-registers.md
# See README -> https://github.com/jedda/OSX-Monitoring-Tools/blob/master/check_osx_smc/README.md
read -a fields <<<
$CHECK_OSX_SMC -s c -r TA0P,F0Ac -w 70,5200 -c 85,5800
_temp=${fields[7]//,/.}
_fan=${fields[8]} _time=
date
read -a fields <<< sudo powermetrics -i 500 -n1 --samplers cpu_power | grep "CPUs+GT+SA" | sed 's/Intel energy model derived package power (CPUs+GT+SA): //g'
_power=${fields[0]//W/} _uptime=
uptime
_load=$_uptime _uptime=${_uptime%users} ; _uptime=${_uptime%,} ; _uptime=${_uptime#up} ; _uptime=${_uptime%,} ; _uptime=${_uptime#*up} ; _uptime="up ${_uptime# }"
_load=${_load#*load averages: }
_user=
who | wc -l
_user="${_user// /}" read -a fields <<<
vm_stat | perl -ne '/page size of (\d+)/ and $size=$1; /Pages\s+([^:]+)[^\d]+(\d+)/ and printf("%-16s % 16.2f Mi\n", "$1:", $2 * $size / 1048576)' | grep "free:" ; _freemem=${fields[1]}
read -a fields <<< df -h / | grep / ; _disk=${fields[4]//%/} echo '{"updateTime":"'${_time}'","temperature":'${_temp:5:4}',"fan":'${_fan:5:4}',"power":'${_power}',"uptime":"'${_uptime}'","load":"'${_load}'","freemem":'${_freemem:0:6}',"disk":"'${_disk}'","user":'${_user}'}' > $JSON_DATA_FILE
}
`
$3
`sh
root and users in group wheel can run anything on any machine as any user
root ALL = (ALL) ALL
%admin ALL = (ALL) ALL
ALL=NOPASSWD: ALL
`
>Note :
You must change the user by the user who run homebridge in your system$3
Combine the two commands in a terminal to restart homebridge background process -
launchctl unload ~/Library/LaunchAgents/com.homebridge.server.plist
- launchctl load ~/Library/LaunchAgents/com.homebridge.server.plist>Note :
This commands are only avalable for macOS
Todo
- [x] Generate all the measures in a .json file [[#3]](https://github.com/ad5030/homebridge-macosx-info/issues/3)
- [x] Worked on performance
- [x] Use only sh built-in (no sed & no awk) [[#4]](https://github.com/ad5030/homebridge-macosx-info/issues/3)Known bugs
- [x] Uptime error in "homebridge-macosx-info" after more than one day ! [[#1]](https://github.com/ad5030/homebridge-macosx-info/issues/1)
- [x] Temparature and fan mesures don't work on all Apple mac hardware. Used now check_osx_smc` binary. You can see the hardware compatibility here [[#2]](https://github.com/ad5030/homebridge-macosx-info/issues/2)