首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >AirBattery - 在Mac上实时监控所有苹果设备电量

AirBattery - 在Mac上实时监控所有苹果设备电量

原创
作者头像
qife122
发布2025-10-10 22:02:41
发布2025-10-10 22:02:41
2270
举报

项目简介

AirBattery 是一款功能强大的 macOS 应用程序,专门设计用于监控和显示您所有苹果设备的电池使用情况。通过创新的"Nearbility Engine"技术,它能够自动搜索并显示周边支持设备的电量信息,无需复杂的配置过程。无论是 iPhone、iPad、Apple Watch 还是其他蓝牙设备,AirBattery 都能在 Dock 栏、状态栏或小组件中实时展示它们的电池状态。

功能特性

  • 多设备电池监控:自动检测并显示 iPhone、iPad、Apple Watch 等苹果设备的电池电量
  • 多种显示方式:支持在 Dock 栏、状态栏和小组件中显示电池信息
  • 智能设备发现:基于"Nearbility Engine"自动搜索周边设备,无需手动配置
  • Nearcast 功能:支持在局域网内查看其他 Mac 及其外设的电量信息
  • 实时状态栏图标:可配置为实时显示电量图标,类似系统原生风格
  • 设备隐藏管理:可根据需要隐藏特定设备,随时恢复显示
  • 蓝牙设备支持:通过蓝牙权限获取周边设备数据包并解析电池信息

安装指南

系统要求

  • macOS 11.0 及更高版本

安装方法

方法一:直接下载

前往 发布页面 下载最新版安装文件。

方法二:Homebrew 安装

代码语言:bash
复制
brew install lihaoyun6/tap/airbattery

使用说明

基础使用

  1. 启动 AirBattery 后,默认会同时显示在 Dock 栏和状态栏上
  2. 应用程序会自动搜索所有支持隔空电量获取的设备
  3. 点击 Dock 图标、状态栏图标或添加小组件即可查看设备电量

高级功能

  • 在偏好设置中可切换状态栏图标为实时电量显示
  • 使用 Dock 栏菜单或状态栏菜单隐藏/显示特定设备
  • 利用 Nearcast 功能查看局域网内其他设备的电量状态

核心代码解析

蓝牙设备电池数据解析

代码语言:bash
复制
# 从系统日志中提取蓝牙设备的电池信息
PRED='subsystem == "com.apple.bluetooth" AND (category == "CBStackDeviceMonitor" OR category == "Server.GATT") AND (eventMessage CONTAINS "Battery" OR eventMessage CONTAINS "statedump: 0x001A" OR eventMessage CONTAINS "statedump: 0x001D")'

# 查询系统日志获取蓝牙设备数据
data=$(/usr/bin/nice -n 19 /usr/bin/log show $STYLE $LVL --predicate "$PRED" --last "$WINDOW")

# 解析电池信息并生成JSON格式输出
for i in `echo "$data"|grep "Battery"|grep -v "VID 0x004C"`
do
    time=`echo $i|awk '{print $1"T"$2}'`
    name=`echo $i|grep -o ", Nm '.*', PID"|sed "s/, Nm '//g;s/', PID//g"`
    type=`echo $i|grep -o ", DvT [A-z]*"|sed "s/, DvT //g"`
    batt=`echo $i|grep -o ", Battery M [+-]*[0-9]*%"|grep -o "\d*"`
    stat=`echo $i|grep -o ", Battery M [+-]*[0-9]*%"|grep -Eo "\+|\-"`
    mac=`echo $i|grep -o ", BDA [A-z0-9:]*"|sed "s/, BDA //g"`
    
    # 输出格式化JSON数据
    echo "{\"time\": \"$time\", \"vid\": \"$vid\", \"pid\": \"$pid\", \"type\": \"$type\", \"mac\": \"$mac\", \"name\": \"$name\", \"level\": $batt, \"status\": \"$stat\"}"
done

Apple Pencil 电池监控

代码语言:bash
复制
# 查询Apple Pencil的电池信息
data=`$syslog $type -u $id --process SpringBoard -m '"Accessory Category" = Pencil;' -T SpringBoard`

# 解析电池容量和充电状态
batt=`echo "$data"|grep "Current Capacity"|grep -o "[0-9]*"|sed -n '$p'`
stat=`echo "$data"|grep "Is Charging"|grep -o "[0-9]*"|sed -n '$p'`
model=`echo "$data"|grep "Product ID"|grep -o "[0-9]*"|sed -n '$p'`
vendor=`echo "$data"|grep "Vendor ID"|grep -v Source|grep -o "[0-9]*"|sed -n '$p'`

# 输出Pencil设备信息
echo "{\"level\": $batt, \"status\": $stat, \"model\": \"$model\", \"vendor\": \"$vendor\"}"

设备特征值数据解析

代码语言:bash
复制
# 解析GATT特征值数据获取设备信息
devData=`echo "$data"|grep -E "statedump: 0x001A Characteristic Value|statedump: 0x001D Characteristic Value"|grep -o "\[[A-z0-9 ]*\]"|sed 's/\[ //g;s/ \]//g'|awk '{if (NR%2==1) {line=$0} else {print line, $0}}'|awk 'length($0) == 23'`

# 结合系统蓝牙配置信息完善设备数据
btData=`/usr/sbin/system_profiler SPBluetoothDataType`
for i in `paste -d ' ' <(echo "$times") <(echo "$devData")`
do
    # 提取设备VID、PID并匹配设备名称
    vid=`echo $i|awk '{print "0x"$4$3}'`
    pid=`echo $i|awk '{print "0x"$6$5}'`
    name=`echo "$btData"|grep -B3 $pid|sed -n '1p'|sed 's/^ *//g;s/:$//g'`
    type=`echo "$btData"|grep -A5 $pid|grep "Minor Type: "|sed 's/^ *Minor Type: //g'`
done

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目简介
  • 功能特性
  • 安装指南
    • 系统要求
    • 安装方法
  • 使用说明
    • 基础使用
    • 高级功能
  • 核心代码解析
    • 蓝牙设备电池数据解析
    • Apple Pencil 电池监控
    • 设备特征值数据解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档