Vai al contenuto

Informazioni nascoste sulla batteria del MacBook: come leggerle dal Terminale

Introduzione

La batteria del tuo MacBook è un sistema intelligente che misura se stesso in continuazione: conosce la tensione di ogni singola cella, la temperatura interna, la corrente che entra e quella che esce, e tiene traccia di quanto si è degradata rispetto al giorno in cui è uscita dalla fabbrica. Sa anche se le sue celle stanno invecchiando in modo uniforme o se una di esse sta cedendo prima delle altre — un segnale che permette di capire con largo anticipo la durata della batteria inizierà a calare in modo percettibile.

Nessuna di queste informazioni appare nell’interfaccia standard di macOS.

In questo articolo vedremo come accedere ai dati reali della batteria utilizzando il Terminale — uno strumento già presente in ogni Mac, che non richiede installazioni aggiuntive. Non è un’operazione complicata: si tratta di lanciare un comando, leggerlo riga per riga, e sapere cosa significa ciascun valore. Al termine dell’articolo, analogamente a quanto fatto per il caricabatterie, presenterò uno script che, una volta lanciato, illustrerà le informazioni sulla batteria in maniera semplice.

Accedere a questi dati può essere utile in diversi casi concreti. Se stai valutando l’acquisto di un Mac usato, i dati del Terminale ti dicono molto di più dei cicli dichiarati dal venditore: puoi verificare la capacità residua in mAh, controllare il bilanciamento tra le celle e leggere il numero di serie del pacco batteria per confrontarlo con i record Apple. Se hai già fatto sostituire la batteria e vuoi verificare la qualità del componente installato, gli stessi parametri ti dicono se è originale, se è calibrata correttamente e se le celle partono bilanciate. E se il tuo Mac è in uso da qualche anno, questi dati ti permettono di valutare con precisione lo stato di salute reale attraverso informazioni oggettive come la percentuale esatta di capacità rimasta rispetto al progetto originale.

Inizieremo dall’interfaccia grafica, per capire cosa offre e dove si ferma. Poi introdurremo ioreg, lo strumento del Terminale che interroga direttamente il chip di monitoraggio della batteria, e vedremo insieme come interpretare ogni dato che restituisce. Successivamente passeremo alla costruzione dello script e alla sua installazione.

1. La via più semplice: Informazioni di Sistema

Il punto di partenza è quello che fa chiunque quando vuole sapere qualcosa sul proprio Mac: tasto ⌥ (Option) tenuto premuto mentre si apre il menu Apple in alto a sinistra, poi Informazioni di Sistema… e infine la voce Alimentazione nella colonna laterale sinistra.

Il pannello che si apre raccoglie i dati principali in due blocchi: lo stato della batteria e le informazioni sul caricatore connesso.

Cosa otteniamo

Dalla sezione batteria:

  • Cicli di carica — il contatore dei cicli completi effettuati
  • Condizione — una valutazione qualitativa (Normale / Assistenza consigliata)
  • Stato attuale — La percentuale di carica
  • Capacità a carica completa — in alcuni recenti versioni di macOS, la quantità di mAh che è possibile caricare

Cosa manca

Il pannello Alimentazione non mostra alcune informazioni che sono comunque rilevabili dal firmwareche controlla i circuiti di gestione della batteria. Mancano:

  • La capacità residua in mAh
  • La tensione di lavoro delle singole celle
  • Il bilanciamento tra le celle — un indicatore precoce di degrado
  • La temperatura del pacco batteria
  • La corrente e la potenza istantanea
  • La tensione e la corrente effettivamente negoziate con il caricatore
  • Il numero di serie del pacco batteria e la sua data di produzione
  • Il numero di scritture sul chip di monitoraggio — un indicatore dell’intensità d’uso del firmware nel tempo

In pratica: Informazioni di Sistema è utile per una verifica rapida, ma non risponde a domande più precise come  quanta capacità ho perso rispetto al nuovo? o le mie celle sono ancora bilanciate nonostante l’usura? 

Per rispondere a queste domande serve scendere di un livello, e il Terminale è lo strumento giusto.

2. ioreg: il registro I/O di macOS

Cos’è

ioreg — abbreviazione di I/O Registry — è uno strumento a riga di comando incluso in ogni installazione di macOS. Non è un programma aggiuntivo, non va installato: è già presente tra i comandi disponibili del Terminale.

Il suo scopo è esporre il contenuto dell’I/O Registry, un albero gerarchico che il kernel di macOS costruisce e aggiorna in tempo reale per tenere traccia di tutta l’hardware connessoal sistema: processore, memoria, GPU, dischi, porte, e — quello che ci interessa — la batteria.

Ogni dispositivo hardware nel sistema occupa un nodo nell’albero. Ogni nodo ha un nome, un tipo, e un insieme di proprietà che descrivono lo stato corrente di quel dispositivo. ioreg permette di interrogare questo albero dalla riga di comando e di leggere quelle proprietà direttamente, senza passare per interfacce grafiche che filtrano e, spesso, approssimano e semplificano.

Come funziona il comando

La sintassi base è:

ioreg [opzioni]

Le opzioni che useremo:

  • -r — modalità ricorsiva: discende nell’albero a partire dal nodo trovato
  • -n NomeNodo — cerca nell’albero il nodo con quel nome specifico
  • | grep “parola” — filtra l’output tenendo solo le righe che contengono quella parola

Il nodo della batteria: AppleSmartBattery

Il nodo che ci interessa si chiama AppleSmartBattery. È il driver del kernel che gestisce la comunicazione con il chip di monitoraggio fisicamente saldato sulla scheda della batteria.

Il comando completo che useremo è:

ioreg -rn AppleSmartBattery

Da solo produce un output molto verboso — centinaia di righe. Lo filtreremo con grep o con awk per estrarre solo i campi che ci interessano. Ma prima vale la pena capire come il Mac ottiene quelle informazioni dal chip.

Il protocollo sottostante: SMBus e Smart Battery

La batteria del MacBook non è un componente passivo. Al suo interno, oltre alle celle al litio, c’è un microcontrollore dedicato — nei MacBook Intel tipicamente un chip Texas Instruments della serie BQ — che monitora in continuazione tensione, corrente, temperatura e stato di carica, e che calcola autonomamente parametri derivati come la capacità residua e il numero di cicli.

Questo chip comunica con il resto del sistema attraverso SMBus (System Management Bus), un bus seriale a due fili derivato da I²C e progettato specificamente per la comunicazione tra componenti di gestione dell’alimentazione. È un protocollo robusto ma vecchio e lento, d’altronde per il polline dei dati della batteria non servono velocità stratosferiche.

Il dialogo funziona secondo lo standard Smart Battery System (SBS), una specifica sviluppata negli anni Novanta da Duracell e Intel per standardizzare la comunicazione tra batterie intelligenti e i sistemi che le ospitano. Lo standard definisce un insieme di registri — indirizzi numerici — che il chip della batteria deve esporre. Il sistema operativo può leggere questi registri via SMBus per ottenere i parametri in tempo reale.

Alcuni dei registri definiti dallo standard SBS:

Registro Nome Contenuto
0x09 Current Corrente istantanea in mA
0x0A AverageCurrentI Corrente media degli ultimi 60 secondi
0x0D RelativeStateOfCharge Percentuale di carica (UISoc)
0x0F Voltage Tensione ai morsetti in mV
0x17 CycleCount Contatore dei cicli
0x18 DesignCapacity Capacità originale di progetto in mAh

Apple implementa lo standard SBS e vi aggiunge un layer proprietario per esporre parametri come CellVoltage, UISoc, ChemID. I blob BatteryData e PowerTelemetryData sono estensioni Apple non documentate pubblicamente, scritte e lette attraverso comandi manufacturer-specific che lo standard SBS prevede come spazio di espansione.

Il driver AppleSmartBattery legge continuamente questi registri, li elabora e li pubblica nell’I/O Registry — da cui ioreg li recupera e ce li mette a disposizione.

il flusso di lettura:

La catena completa è:

Celle → Chip TI (SMBus) → Driver AppleSmartBattery → I/O Registry → ioreg → noi

Ogni passaggio verso destra aggiunge un livello di astrazione e, inevitabilmente, un filtro. Informazioni di Sistema si trova all’estremo destro di questa catena e mostra solo quello che Apple ha deciso di esporre nell’interfaccia grafica. ioreg si ferma un passo prima: legge direttamente dall’I/O Registry, senza ulteriori filtri.

Il risultato è che con ioreg vediamo gli stessi dati grezzi che il sistema operativo usa internamente per prendere decisioni — decidere quando smettere di caricare, quando mostrare l’avviso di sostituzione, come stimare l’autonomia rimanente. Dati che normalmente restano sotto il cofano.

Nella tabella seguente sono riportati tutti i parametri che sono ricavabili con ioreg dalla lettura del nodo batteria, il significato di ogni parametro e il comando del Terminale da lanciare per leggerlo.

Voce Unità Significato Comando ioreg
Capacità e salute
Capacità di progetto (Design) mAh Capacità originale dichiarata dal produttore nel datasheet. Valore fisso per tutta la vita del dispositivo — il riferimento assoluto per calcolare la degradazione. ioreg -rn AppleSmartBattery | grep “DesignCapacity”
Capacità piena attuale (FCC) mAh Quanta carica riesce ad accumulare la batteria oggi. Diminuisce con i cicli e il tempo. Confrontato con il Design dà la salute reale: FCC ÷ Design × 100. ioreg -rn AppleSmartBattery | grep “FccComp1”
Capacità attuale (CurrentCapacity) mAh Carica presente nelle celle in questo momento. Varia continuamente durante uso e ricarica. ioreg -rn AppleSmartBattery | grep “CurrentCapacity”
SoC reale (chip) % Percentuale di carica calcolata direttamente dal chip di monitoraggio sulla base della carica fisica nelle celle. Dato grezzo, non filtrato. ioreg -rn AppleSmartBattery | grep “StateOfCharge”
SoC visibile (barra menu) % Percentuale che macOS mostra in menu bar. Apple applica un offset positivo deliberato: tende a essere più alta del SoC reale per ragioni di esperienza utente e per mascherare la carica ottimizzata. ioreg -rn AppleSmartBattery | grep “UISoc”
Tensione celle (3S) mV Tensione di ciascuna delle tre celle in serie che compongono il pacco batteria. Un delta elevato tra le celle (oltre 50–100 mV) indica sbilanciamento e degrado prematuro. ioreg -rn AppleSmartBattery | grep “CellVoltage”
Tensione pack mV Tensione totale del pacco batteria, somma delle tre celle. A piena carica si attesta intorno a 12.600 mV (circa 4.200 mV × 3). ioreg -rn AppleSmartBattery | grep “BatteryData” | grep -o ‘”Voltage”=[0-9]*’
Tensione totale mV Tensione letta dal registro LegacyBatteryInfo, campione istantaneo. Coincide sostanzialmente con la tensione pack. ioreg -rn AppleSmartBattery | grep “LegacyBatteryInfo”
Cicli e usura
Cicli di carica n Cicli equivalenti completati. Un ciclo corrisponde al consumo del 100% della capacità totale, anche distribuito su più sessioni. Non conta le volte che hai attaccato il cavo. ioreg -rn AppleSmartBattery | grep “CycleCount”
Cicli (BatteryData) n Stesso contatore di cicli letto dal registro BatteryData interno al chip. Solitamente coincide con il precedente; una discrepanza indica problemi di sincronizzazione firmware. ioreg -rn AppleSmartBattery | grep “BatteryData” | grep -o ‘”CycleCount”=[0-9]*’
Scritture flash gauge n Numero di volte che il chip di monitoraggio ha scritto sulla propria memoria flash per aggiornare i parametri di calibrazione. Misura l’intensità d’uso del firmware — invisibile da qualsiasi GUI. ioreg -rn AppleSmartBattery | grep “DataFlashWriteCount”
Corrente e potenza
Corrente istantanea mA Corrente in ingresso (positiva, batteria in carica) o in uscita (negativa, Mac a batteria) nell’istante della lettura. Valori negativi appaiono come grandi interi unsigned: il comando battery-info li riconverte automaticamente. ioreg -rn AppleSmartBattery | grep “Amperage”
Potenza batteria mW Potenza istantanea della batteria. 0 = equilibrio energetico (tutto dal caricatore). Negativa = scarica. Positiva = ricarica attiva. ioreg -rn AppleSmartBattery | grep “BatteryPower”
Potenza ingresso sistema mW Potenza totale che il sistema sta assorbendo dal caricatore in questo momento. Varia continuamente con il carico CPU/GPU. ioreg -rn AppleSmartBattery | grep “SystemPowerIn”
Corrente ingresso (adapter) mA Corrente misurata all’ingresso dal caricatore lato sistema, campionata dalla telemetria di potenza. ioreg -rn AppleSmartBattery | grep “SystemCurrentIn”
Tensione ingresso (adapter) mV Tensione misurata all’ingresso dal caricatore lato sistema. Può differire leggermente dalla tensione USB-PD negoziata per caduta di tensione sul cavo. ioreg -rn AppleSmartBattery | grep “SystemVoltageIn”
Caricatore connesso
Caricatore (Watts) W Potenza nominale massima dichiarata dal caricatore durante la negoziazione USB Power Delivery. ioreg -rn AppleSmartBattery | grep “AdapterDetails” | grep -o ‘”Watts”=[0-9]*’
Tensione USB-PD mV Tensione concordata tra Mac e caricatore via USB-PD. Tipicamente 20.000 mV (20 V) per caricatori da 60 W e oltre. ioreg -rn AppleSmartBattery | grep “AdapterVoltage”
Corrente USB-PD mA Corrente massima concordata via USB-PD. Moltiplicata per la tensione dà i watt effettivi disponibili sul contratto di alimentazione. ioreg -rn AppleSmartBattery | grep “AdapterDetails” | grep -o ‘”Current”=[0-9]*’
Tipo caricatore testo Stringa descrittiva del tipo di caricatore identificato dal kernel. “pd charger” = caricatore USB Power Delivery generico. Caricatori Apple originali mostrano descrizioni più specifiche. ioreg -rn AppleSmartBattery | grep “AdapterDetails” | grep -o ‘”Description”=”[^”]*”‘
Stato operativo
In carica Yes/No Il chip sta attivamente immettendo corrente nelle celle. Può essere No anche con il cavo attaccato se la batteria è piena o se la carica ottimizzata ha messo in pausa il ciclo. ioreg -rn AppleSmartBattery | grep “IsCharging”
Completamente carica Yes/No Il firmware considera la batteria al suo massimo. Con la carica ottimizzata attiva può diventare Yes all’80–90% fisico anziché al 100%. ioreg -rn AppleSmartBattery | grep “FullyCharged”
Alimentazione esterna Yes/No Un caricatore è fisicamente connesso. Non implica che stia caricando la batteria: il Mac potrebbe usare solo il caricatore per alimentare il sistema con la batteria ferma. ioreg -rn AppleSmartBattery | grep “ExternalConnected”
Tempo rimanente (stima) min Stima in minuti dell’autonomia residua a batteria, calcolata dal chip in base al consumo medio recente. Assente o 0 quando il Mac è collegato alla corrente. ioreg -rn AppleSmartBattery | grep “TimeRemaining”
Temperatura batteria °C Temperatura del pacco batteria convertita da decimi di Kelvin. Sopra i 40 °C il firmware riduce la corrente di carica per proteggere le celle dalla degradazione accelerata. ioreg -rn AppleSmartBattery | grep “Temperature”
Identità e chimica
Produttore batteria stringa Nome del produttore delle celle, letto dal registro SBS 0x20. I valori più comuni sui MacBook Intel sono “SMP” (Simplo Technology) e “ATL” (Amperex Technology). Utile per verificare l’originalità della batteria dopo una sostituzione. ioreg -rn AppleSmartBattery | grep “Manufacturer”
Modello chip gauge stringa Nome del dispositivo restituito dal chip di monitoraggio, registro SBS 0x21. Sui MacBook Intel è tipicamente il codice del chip Texas Instruments installato (es. “bq20z451”). Conferma quale gauge è fisicamente presente nella batteria. ioreg -rn AppleSmartBattery | grep “DeviceName”
ChemID (chimica celle) codice Codice interno Texas Instruments che identifica la chimica specifica delle celle. Il firmware lo legge per selezionare i parametri corretti di carica e stima della capacità residua. ioreg -rn AppleSmartBattery | grep “ChemID”
Seriale batteria stringa Numero di serie del pacco batteria, distinto dal seriale del Mac. Permette di verificare se la batteria è stata sostituita e con quale componente. ioreg -rn AppleSmartBattery | grep “BatteryData” | grep -o ‘”Serial”=”[^”]*”‘

Digitando sul Terminale il comando riportato nell’ultima colonna della tabella, otterrete la lettura del parametro compiutamente descritto dai valori presenti nella stessa riga.

Costruiamo il comando battery-info

Interrogare ioreg ogni volta che si vuole controllare la batteria funziona, ma è scomodo: il comando è lungo, l’output grezzo è verboso, e i valori come la temperatura — espressa in decimi di Kelvin — richiedono un calcolo di conversione per diventare fruibili.

La soluzione è trasformare tutto questo in una funzione permanente del Terminale: un comando che ho chiamato   battery-info, che produce in output una tabella formattata con tutti i valori già convertiti nelle unità corrette, ordinati e allineati in colonne.

Questo è possibile grazie a .zshrc, il file di configurazione che il Terminale legge ogni volta che si apre una nuova finestra. Tutto quello che si inserisce in quel file diventa disponibile in ogni sessione.

Come funziona lo script

Lo script definisce una funzione chiamata battery-info che esegue tre operazioni in sequenza.

Prima stampa un’intestazione con la data e l’ora della rilevazione — utile se si vuole confrontare misurazioni prese in momenti diversi, per esempio sotto carico e a riposo.

Poi lancia ioreg -rn AppleSmartBattery e passa l’output a awk, un linguaggio di elaborazione del testo incluso in ogni Mac. Il blocco awk percorre riga per riga l’output di ioreg, riconosce i campi che ci interessano e li estrae con precisione, navigando dentro i blob nidificati come BatteryData, PowerTelemetryData e AdapterDetails. Il risultato viene ordinato alfabeticamente e formattato in colonne pulite tramite column, che allinea automaticamente i valori indipendentemente dalla lunghezza delle etichette.

Il risultato è una tabella come questa:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  🔋 STATO BATTERIA — 16/06/2026 23:35:50

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Capacità attuale (CurrentCapacity)  7850 mAh
Capacità di progetto (Design)       8790 mAh
Capacità piena attuale (FCC)        7850 mAh
ChemID (chimica celle)              8978
Cicli (BatteryData)                 161
Cicli di carica                     161
Corrente ingresso (adapter)         0 mA
Corrente istantanea                 -2049 mA  (scarica)
Corrente USB-PD                     4438 mA
Modello chip gauge                  bq40z651
Potenza batteria                    0 mW  (in equilibrio)
Potenza ingresso sistema            0 mW
Produttore batteria                 DSY
Scritture flash gauge               16291
Seriale batteria                    F5D0412GY88K7LQCS
SoC reale (chip)                    57 %
SoC visibile (barra menu)           59 %
Tensione celle (3S)                 8798,8682,8785 mV
Tensione ingresso (adapter)         0 mV
Tensione pack                       11311 mV
Tensione totale                     11189 mV
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Dove si trova il file .zshrc e come aprirlo
.zshrc si trova nella cartella home dell’utente. Il punto iniziale nel nome indica che è un file nascosto: non appare nel Finder con la visualizzazione predefinita, ma esiste ed è accessibile dal Terminale.

Per aprirlo con TextEdit

open -e ~/.zshrc   

A questo punto ci sono tre situazioni possibili

Caso 1 — Il file non esiste

Su alcune installazioni pulite di macOS il file .zshrc non è ancora stato creato. Per verificarlo:

ls -la ~/.zshrc

Se il Terminale risponde con No such file or directory, il file non esiste. Si crea con:

touch ~/.zshrc

touch è un comando che crea un file vuoto se non esiste, oppure ne aggiorna la data di modifica se esiste già. Dopo averlo creato, si può aprire normalmente con nano.

Caso 2 — Il file esiste ed è vuoto o non contiene altri comandi personalizzati

È il caso più semplice. Si apre con TextEdit, si incolla il blocco dello script in fondo al file, si salva e si esce. Per rendere immediatamente attiva la funzione senza riaprire il Terminale:

source ~/.zshrc

source rilegge il file di configurazione nella sessione corrente. Da questo momento battery-info è disponibile in qualsiasi finestra del Terminale.

Caso 3 — Il file esiste e contiene già personalizzazioni

Questo è un caso comune su Mac usati da qualche tempo. Il file potrebbe contenere alias, variabili d’ambiente, configurazioni di strumenti come homebrew, nvm o conda, o altri comandi personalizzati: se hai seguito il mio articolo precedente(LINK), per esempio, hai probabilmente creato tu stesso il comando “caricabatterie” che valuta le condizione dell’alimentatore collegato al MacBook.

In questo caso la regola è semplice: aggiungere il blocco in fondo al file, dopo tutto quello che c’è già. Le funzioni zsh non interferiscono con alias o variabili definiti altrove, e l’ordine all’interno del file non ha importanza per i nostri scopi.:


Come installare lo script

Il modo più rapido, è copiare e incollare lo script in fondo a, file .zshrc dopo averlo aperto con TextEdit con il comando:

open -e ~/.zshrc   

Attenzione! Prima di fare qualunque cosa con TextEdit impostate il tipo di file su solo testo. Per farlo, una volta lanciato il programma premete insieme i tasti ⌘, ⌥ e T oppure scegliete l’a voce corrispondente dal menu Formato. Solo dopo aver selezionato con questa modalità potrete aggiungere in coda al file, il testo del comando.

Dopo l’aggiunta, chiudete TextEdit e ricaricate la configurazione con il comando:

source ~/.zshrc

Quindi,  verificate che la funzione sia disponibile:

battery-info

Se tutto è andato bene, appare la tabella con i dati della batteria.

Una nota sull’aggiornamento

Se in futuro si vuole modificare la funzione — aggiungere un campo, cambiare la formattazione, correggere qualcosa — la procedura è aprire .zshrc con TextEdit, trovare il blocco battery-info(), modificarlo, salvare, e rieseguire source ~/.zshrc. Le modifiche diventano attive immediatamente nella sessione corrente e in tutte le nuove finestre del Terminale aperte da quel momento in poi.
il testo da incollare è il seguente:

# ─────────────────────────────────────────────
# battery-info: stato dettagliato batteria e caricatore
# Uso: battery-info
# Compatibile con macOS BSD awk
# ─────────────────────────────────────────────

battery-info() {
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " 🔋 STATO BATTERIA — $(date '+%d/%m/%Y %H:%M:%S')"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

ioreg -rn AppleSmartBattery | awk '
# Soglia oltre la quale un intero uint64 va interpretato come negativo.
# 2^63 = 9223372036854775808
BEGIN { UINT64_MAX = 18446744073709551615; THRESHOLD = 9223372036854775808 }

# Converte uint64 -> intero con segno (complemento a due a 64 bit)
function signed64(n, s) {
s = n + 0
if (s > THRESHOLD) s = s - UINT64_MAX - 1
return s
}

function val(str, key, raw) {
if (match(str, key "\"=(-?[0-9]+)")) {
raw = substr(str, RSTART + length(key) + 2, RLENGTH - length(key) - 2)
return raw
}
return ""
}
function valstr(str, key, s, e) {
# Formato blob interno: key"="value"
if (match(str, key "\"=\"[^\"]+\"")) {
s = RSTART + length(key) + 3
e = RSTART + RLENGTH - 2
return substr(str, s, e - s + 1)
}
# Formato top-level: key" = "value" (con spazi attorno a =)
if (match(str, key "\" = \"[^\"]+\"")) {
s = RSTART + length(key) + 5
e = RSTART + RLENGTH - 2
return substr(str, s, e - s + 1)
}
return ""
}

/LegacyBatteryInfo/ { legacy = 1 }
/BatteryData/ { bdata = 1 }
/PowerTelemetryData/ { telem = 1 }
/AdapterDetails" = \{/ { adapt = 1 }

# ── LegacyBatteryInfo ──
legacy && /Capacity"=/ {
v = val($0, "Capacity"); if (v != "") printf "Capacità attuale (CurrentCapacity):%s mAh\n", v
}
legacy && /Voltage"=/ {
v = val($0, "Voltage"); if (v != "") printf "Tensione totale:%s mV\n", v
}
legacy && /Amperage"=/ {
v = val($0, "Amperage")
if (v != "") {
s = signed64(v)
if (s < 0)
printf "Corrente istantanea:%d mA (scarica)\n", s
else if (s == 0)
printf "Corrente istantanea:0 mA (in equilibrio)\n"
else
printf "Corrente istantanea:%d mA (in carica)\n", s
}
}
legacy && /"Cycle Count"=/ {
if (match($0, "Cycle Count\"=([0-9]+)")) {
v = substr($0, RSTART + 13, RLENGTH - 13)
printf "Cicli di carica:%s\n", v
}
legacy = 0
}

# ── BatteryData ──
bdata && /DesignCapacity"=/ {
v = val($0, "DesignCapacity"); if (v != "") printf "Capacità di progetto (Design):%s mAh\n", v
}
bdata && /FccComp1"=/ {
v = val($0, "FccComp1"); if (v != "") printf "Capacità piena attuale (FCC):%s mAh\n", v
}
bdata && /StateOfCharge"=/ {
v = val($0, "StateOfCharge"); if (v != "") printf "SoC reale (chip):%s %%\n", v
}
bdata && /UISoc"=/ {
v = val($0, "UISoc"); if (v != "") printf "SoC visibile (barra menu):%s %%\n", v
}
bdata && /CycleCount"=/ {
v = val($0, "CycleCount"); if (v != "") printf "Cicli (BatteryData):%s\n", v
}
bdata && /"Voltage"=/ {
v = val($0, "Voltage"); if (v != "") printf "Tensione pack:%s mV\n", v
}
bdata && /CellVoltage/ {
if (match($0, /\([0-9,]+\)/)) {
v = substr($0, RSTART+1, RLENGTH-2)
printf "Tensione celle (3S):%s mV\n", v
}
}
bdata && /DataFlashWriteCount"=/ {
v = val($0, "DataFlashWriteCount"); if (v != "") printf "Scritture flash gauge:%s\n", v
}
bdata && /ChemID"=/ {
v = val($0, "ChemID"); if (v != "") printf "ChemID (chimica celle):%s\n", v
}
bdata && /"Serial"="/ {
v = valstr($0, "Serial"); if (v != "") printf "Seriale batteria:%s\n", v
bdata = 0
}

# ── PowerTelemetryData ──
telem && /SystemPowerIn"=/ {
v = val($0, "SystemPowerIn")
if (v != "") { s = signed64(v); if (s >= 0) printf "Potenza ingresso sistema:%d mW\n", s }
}
telem && /SystemVoltageIn"=/ {
v = val($0, "SystemVoltageIn"); if (v != "") printf "Tensione ingresso (adapter):%s mV\n", v
}
telem && /SystemCurrentIn"=/ {
v = val($0, "SystemCurrentIn"); if (v != "") printf "Corrente ingresso (adapter):%s mA\n", v
}
telem && /BatteryPower"=/ {
v = val($0, "BatteryPower")
if (v != "") {
s = signed64(v)
if (s == 0)
printf "Potenza batteria:0 mW (in equilibrio)\n"
else if (s < 0)
printf "Potenza batteria:%d mW (scarica)\n", s
else
printf "Potenza batteria:%d mW (ricarica)\n", s
}
telem = 0
}

# ── AdapterDetails ──
adapt && /Watts"=/ {
v = val($0, "Watts"); if (v != "") printf "Caricatore (Watts):%s W\n", v
}
adapt && /AdapterVoltage"=/ {
v = val($0, "AdapterVoltage"); if (v != "") printf "Tensione USB-PD:%s mV\n", v
}
adapt && /"Current"=/ {
v = val($0, "Current"); if (v != "") printf "Corrente USB-PD:%s mA\n", v
}
adapt && /Description"="/ {
v = valstr($0, "Description"); if (v != "") printf "Tipo caricatore:%s\n", v
adapt = 0
}

# ── Campi top-level ──
/\"Temperature"=/ {
v = val($0, "Temperature")
if (v != "") printf "Temperatura batteria:%.1f °C\n", (v / 10) - 273.15
}
/\"IsCharging"=/ { if (match($0, /IsCharging"=(Yes|No)/)) { v=substr($0,RSTART+12,RLENGTH-12); printf "In carica:%s\n", v } }
/\"FullyCharged"=/ { if (match($0, /FullyCharged"=(Yes|No)/)) { v=substr($0,RSTART+14,RLENGTH-14); printf "Completamente carica:%s\n", v } }
/\"ExternalConnected"=/ { if (match($0, /ExternalConnected"=(Yes|No)/)) { v=substr($0,RSTART+20,RLENGTH-20); printf "Alimentazione esterna:%s\n", v } }
/\"TimeRemaining"=/ { v = val($0, "TimeRemaining"); if (v != "") printf "Tempo rimanente (stima):%s min\n", v }

# ── Identità produttore (top-level, registro SBS 0x20 e 0x21) ──
/Manufacturer" = "/ {
v = valstr($0, "Manufacturer"); if (v != "") printf "Produttore batteria:%s\n", v
}
/DeviceName" = "/ {
v = valstr($0, "DeviceName"); if (v != "") printf "Modello chip gauge:%s\n", v
}
' | sort -t: -k1,1 | column -t -s ":"

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
}

Conclusioni

La batteria è uno dei componenti fondamentali di un MacBook, i comandi di cui vi ho parlato in questo articolo vi aiuteranno  a verificarne lo stato di funzionamento ottenendo una notevole ricchezza di informazioni senza bisogno di installare App di terze pari.

Non esitate a chiedere informazioni nei commenti e, per favore, condividete. questo post sui social: facendo conoscere ApplePhilosophy mi aiutate a tenere in vita questo progetto.

 

Claudio Di Tursi

 

In questo periodo ci sono parecchie offerte del negozio ufficiale di Apple su Amazon: dai un occhiata, clicca qui: LINK ALLE OFFERTE

Offerte Apple Maggio 2026

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *