35 votes

Comment récupérer les informations sur la puissance actuelle sous OS X ?

Existe-t-il un moyen de récupérer les informations sur la consommation actuelle en watts sous OS X Snow Leopard ? J'utilise un iMac de mi-2010, donc je ne cherche pas seulement des applications liées à la batterie.

Est-ce qu'OS X surveille au moins la consommation d'énergie ? Dois-je utiliser un lecteur externe entre le cordon d'alimentation et la prise ?

Je suis le plus Je suis intéressé par les solutions basées sur la ligne de commande/applescript pour une journalisation et des statistiques plus pratiques, mais je suis ouvert aux alternatives.


Les deux (@ bmike 's & @ michaelmichael ) sont sans aucun doute correctes. Le site méta-question La question était de savoir s'il y avait déjà des capteurs/lecteurs sur le PSU, qui fonctionneraient un peu comme le "kill-a-watt". Je sens que la réponse est "non".

Je sais, c'est probablement juste un rêve humide, mais un wattmètre à bord serait idéal pour que l'ordinateur puisse crier : "Regardez comme je suis écolo ; je n'utilise que ces watts !"


Ah !

@ Kerri Shotts suggéré Menus iStat 3 faire obtenir les relevés de wattage de un capteur ainsi que les statistiques en volts et en ampères. Les compteurs sont donc là, mais comment puis-je y accéder par programme ?


Bounty ! Une récompense sera accordée pour une solution solide de lecture de capteurs en ligne de commande ou pour la recommandation d'une solution exceptionnellement bonne. rd un logiciel tiers (avec des outils de statistiques et de données historiques au minimum).

Juste pour informer : le Menus 3 d'iStat mentionné ci-dessus liste les capteurs suivants liés à l'alimentation :

  • Capteurs de tension (Volts)
    • AC/DC
    • AC/DC
    • AC/DC Shunt
    • CPU
    • CPU 1.8V S0
    • CPU CTT
    • Module graphique
    • Mémoire
  • Capteurs de courant (Amps)
    • AC/DC
    • CPU
    • CPU VTT
    • Module graphique
  • Capteurs de puissance (Watts)
    • AC/DC
    • CPU
    • Module graphique

Il est indiqué "capteurs", mais ils pourraient être calculés comme @msanford l'a commenté. Comment puis-je mettre la main sur ces données de manière programmatique ?

7voto

michaelmichael Points 3321

IANAEE (je ne suis pas ingénieur électricien), mais d'après ce que j'ai compris, il n'est pas possible de mesurer avec précision la consommation électrique d'un ordinateur via un logiciel. La meilleure solution est de connecter votre Mac à un appareil tel qu'un Kill-a-Watt

Si vous êtes à la recherche d'une solution scriptable - et d'un projet intéressant - voici des instructions pour créer un système de surveillance de la puissance en watts sans fil, ou un " Tweet-a-Watt ".

7voto

serialx Points 151

J'ai fait un petit script basé sur la sortie du system_profiler. Il calcule la puissance en watts en utilisant la tension et les ampères donnés.

powerstat() {
    b=$(system_profiler SPPowerDataType)
    amp=$(echo "$b" | grep 'Amperage (mA):' | cut -d ':' -f 2 | xargs)
    volt=$(echo "$b" | grep 'Voltage (mV):' | cut -d ':' -f 2 | xargs)
    power=$(($amp * $volt / 1000))
    echo "$b" | grep --color=never -A 1 'Battery Information:'
    echo "$b" | grep --color=never -A 1 'Amperage (mA)'
    echo "      Total Power (mW): $power"
    echo ""
    echo "$b" | grep --color=never -A 99 'AC Charger Information:'
}

Ça donne quelque chose comme :

$ powerstat
    Battery Information:

      Amperage (mA): -552
      Voltage (mV): 12794
      Total Power (mW): -7062

    AC Charger Information:

      Connected: No
      Charging: No

En charge :

$ powerstat
    Battery Information:

      Amperage (mA): 1545
      Voltage (mV): 12850
      Total Power (mW): 19853

    AC Charger Information:

      Connected: Yes
      Wattage (W): 60
      Charging: No

6voto

Oskar Points 1242

Aucun capteur mesuré n'est présent dans l'alimentation.

La carte logique mesure la température à plusieurs endroits pour contrôler les ventilateurs et le CPU surveille la température pour réduire la fréquence d'horloge lorsqu'il devient plus chaud que les ventilateurs ne peuvent le refroidir.

Je suppose qu'une thèse de doctorat pourrait être réalisée sur l'intégration de la vitesse du ventilateur et de divers capteurs de température pour calculer la consommation d'énergie prévue. Il est possible d'obtenir un calcul et avec un peu de calibration, il pourrait même être assez précis.

En réalité, comme ces données ne sont pas exposées ou enregistrées, vous devrez peut-être effectuer des mesures externes. Les compteurs d'énergie domestiques décents coûtent entre 150 et 300 $ w

Vous pouvez louer ou acheter un appareil qui mesure la puissance de la prise et effectuer des tests pour voir combien d'énergie le mac consomme en une heure dans certaines conditions.

  • Off
  • Dormir
  • Au repos
  • Diverses charges CPU
  • CPU maximum, tout va bien

Vous pourriez ensuite les corréler avec le suivi de l'utilisation du CPU qui est trivial dans le temps en utilisant top et être capable d'additionner les choses.

Tout dépend de ce que vous voulez vraiment faire avec les données, à part apprendre comment le matériel fonctionne et avoir des graphiques sympas.

3voto

Luyer Points 21
// Build with: gcc psudata.cc -o psudata -framework IOKit
#include <stdio.h>
#include <string.h>
#include <IOKit/IOKitLib.h>

typedef struct {
  uint32_t key;
  char ignored[24];
  uint32_t size;
  char ignored2[10];
  char cmd;
  char ignored3[5];
  float val;
  char ignored4[28];
} smc_t;

int main(void) {
  mach_port_t mp;
  CFMutableDictionaryRef d;
  io_iterator_t it;
  io_object_t svc;
  io_connect_t ioc;
  smc_t req, resp;
  size_t sz = sizeof(resp);
  uint32_t vk  = ('V' << 24) + ('D' << 16) + ('0' << 8) + 'R';
  uint32_t ik  = ('I' << 24) + ('D' << 16) + ('0' << 8) + 'R';
  float v, i;

  IOMasterPort(MACH_PORT_NULL, &mp);
  d = IOServiceMatching("AppleSMC");
  IOServiceGetMatchingServices(mp, d, &it);
  svc = IOIteratorNext(it);
  IOObjectRelease(it);
  IOServiceOpen(svc, mach_task_self(), 0, &ioc);
  IOObjectRelease(svc);
  memset(&req, 0, sizeof(smc_t));
  memset(&resp, 0, sizeof(smc_t));
  req.cmd = 5;
  req.size = 4;
  req.key = vk;
  IOConnectCallStructMethod(ioc, 2, &req, sizeof(req), &resp, &sz);
  v = resp.val;
  req.key = ik;
  IOConnectCallStructMethod(ioc, 2, &req, sizeof(req), &resp, &sz);
  i = resp.val;
  IOServiceClose(ioc);

  printf("%fV %fA %fW\n", v, i, v*i);
  return 0;
}

3voto

shivsta Points 21
system_profiler SPPowerDataType | grep Wattage

Fait l'affaire pour moi sur MacBook Pro (15 pouces, 2016) !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X