Gestion de l'énergie

Non standard
Cette fonctionnalité n'est pas en voie de standardisation au W3C, mais elle est supportée par la plateforme Firefox OS. Bien que son implémentation puisse changer dans le futur et qu'elle n'est pas largement supportée par les différents navigateurs, elle est utilisable pour du code dédié aux applications Firefox OS.

Cette API est disponible sur Firefox OS pour des applications certifiées seulement.

Résumé

L'API de gestion de l'énergie, propose des outils pour gérer la consommation énergétique de l'appareil.

Gestion de l'énergie

L'API : Power Management , permet d'agir directement sur la consommation d'énergie (écran, processeur, etc...).
L'interface principale pour gérer l'alimentation est accessible
via navigator.mozPower qui est une instance de l'interface PowerManager.

Opérations d'alimentation de base

L'interface PowerManager permet de gérer la consommation énergétique d'un appareil grâce à de simples opérations.

Opérations globales d'alimentation

Il est possible d'éteindre l'appareil avec la méthode powerOff() ou de le redémarrer via la méthode reboot().

// Redémarre l'appareil.
navigator.mozPower.reboot();
// Eteint l'appareil.
navigator.mozPower.powerOff();

Opérations d'alimentation de l'écran

L'écran peut être éteint ou rallumé avec la propriété screenEnabled en lecture-écriture.

Mais il est aussi possible d'agir sur l'écran de manière plus précise, en changeant par exemple la luminosité avec la propriété screenBrightness en lecture-écriture. Cette propriété définit, sur une échelle de 0 à 1, quel est le niveau de luminosité du rétro-éclairage de l'écran (0 étant la luminosité minimale et 1 la luminosité maximale).

// Il est inutile de changer la luminosité si
// l'écran est éteint. 
if (navigator.mozPower.screenEnabled) {
  navigator.mozPower.screenBrightness = 0.5;
}

Opération sur la consommation du processeur

Même s'il n'est pas possible d'éteindre directement le processeur, il est cependant possible de dire s'il peut être arrêté ou, si l'écran est hors tension. Cela peut être défini avec la propriété : cpuSleepAllowed.
Elle détermine si le processeur se mettra en veille une fois que l'écran a été éteint (true) ou si le processeur continuera de fonctionner normalement (false), auquel cas l'appareil ne passera pas en veille.

Opérations d'alimentation avancées

L'énergie peut être mieux gérée lorsque l'application en charge de l'énergie est capable de recevoir des informations quant aux besoins énergétiques des applications tierces. La lecture d'une vidéo, par exemple, sera plus agréable si l'écran ne s'éteint pas automatiquement après quelques secondes de lecture.

Inhibiteur de mise en veille

Toute application peut faire une requête d'inhibition de la mise en veille.
Une requête d'inhibition de mise en veille est une façon d’empêcher l'appareil de mettre en veille ses ressources matérielles (écran, processeur, son etc...).  Cette requête peut être appelée grâce à la méthode navigator.requestWakeLock() .

L'inhibition de la mise en veille est requise pour des ressources spécifiques qui pourraient être indisponibles pour diverses raisons.
Par exemple, sur un appareil mobile, le gestionnaire d'énergie peut décider d'éteindre l'écran après une période d'inactivité pour économiser de l'énergie.

L'application qui gère une ressource vérifie la disponibilité de la mise en veille de la ressource associée, avant de la désactiver. Une page peut ainsi empêcher que l'économiseur d'écran s'active ou que l'écran s'éteigne.

Par défaut, Firefox OS autorise l'écran, le processeur, le wifi, à se mettre en veille. Néanmoins, toute application peut manipuler une ressource matérielle et définir sa propre politique de mise en veille pour cette ressource. Le gestionnaire de ressource peut décider par exemple d'ignorer la requête d’inhibition de mise en veille de l'écran demandée par des applications en arrière plan.

var lock = navigator.requestWakeLock('screen');

La méthode requestWakeLock retourne un objet contenant une propriété topic représentant, le nom de la ressource spécifique verrouilée ainsi qu'une methode unlock() qui peut être utiliser pour annuler manuellement l’inhibition. Notons que si l'application est close (réellement close et pas seulement en arrière plan) toutes les inhibitions seront libérées automatiquement.

Gérer un inhibiteur de mise en veille

Les applications certifiées, sont capables de gérer le blocage de mise en veille et d'être notifiées changements sur l'état de ce verrouillage. Toute application désirant gérer l'énergie doit en fait écouter tout changement de l'état du blocage de veille de l'écran et du processeur. Ceci peut être réalisé à l'aide de la méthode PowerManager.addWakeLockListener().
Il est également possible d’arrêter d'écouter les requêtes de verrouillage via la méthode PowerManager.removeWakeLockListener().

La méthode addWakeLockListener prends en paramètre une fonction de rappel (callback) acceptant deux paramètres : une première chaine de caractères représentant une ressource à gérer (dans notre cas l'écran, le processeur ou le wifi) et une seconde chaine de caractères représentant l'état du blocage de veille pour la ressoure concernée.

Le verrou de la mise en veille peut avoir trois états :

unlocked
Personne ne détient le verrou pour bloquer la veille de la ressource donnée
locked-foreground
Au moins une application détient le verrou et est visible.
locked-background
Au moins une application détient le verrou, cependant aucune d'entre elle n'est visible.
// Utilisé pour garder une trace du 
// dernier changement d'état de WakeLock.
var screenTimeout,

// Une référence sur le gestionnaire d'énergie.
    power = window.navigator.mozPower,

// Ici l'action pour gérer l'état du WakeLock.
    powerAction = {
  // Si il n'y a aucun WakeLock, on va suspendre l'appareil.
  // * Éteindre l'écran
  // * Permettre au processeur de se mettre en veille.
    unlocked: function suspendDevice() {
    power.cpuSleepAllowed = true;
    power.screenEnabled   = false;
  },
 
  // Si il y a un WakeLock mais les application qui le requièrent
  // sont toutes en arrière plan, on éteint juste l'écran.
  'locked-background': function shutOffOnlyScreen() {
    power.cpuSleepAllowed = false;
    power.screenEnabled   = false;
  },

  // En fin s'il n'y a pas d'application active, requérant un WakeLock,
  // et bien il n'y a rien à faire! 
 }
 
function screenLockListener(topic, state) {
  // Si la ressource désignée par le WakeLock n'est pas l'écran ne rien faire.
  if ('screen' !== topic) { return; }

  // Chaque fois que l'état de WakeLock change,
  // on arrête toute opération de gestion d'énergie en cours.
  window.clearTimeout(screenTimeout);

  // Si il y a une action définie pour l'état donnée.
  if (powerAction[state]) {
    // On retard l'action de 3s.
    screenTimeout = window.setTimeout(powerAction[state], 3000);
  }
}
// On s'assure que notre application de gestion de l'énergie écoute,
// tout les changements sur l'état de WakeLock d'une ressource donnée.
power.addWakeLockListener(cpuLockListener);
power.addWakeLockListener(screenLockListener);

 

Spécification

Cette API ne fait partie d'aucune spécification actuellement.

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight, darnuria
 Dernière mise à jour par : SphinxKnight,