J’ai modifié la lib utilisée en y ajoutant une fonction getBattery() qui renvoie un tableau avec le niveau de la batterie et le statut de l’alimentation ainsi que le plugin pour récupérer les infos mais je bloque sur un truc pour mettre à jour les commandes.
Les commandes sont les suivantes :
$battery = $this->getCmd(null, 'battery');
if (!is_object($battery)) {
$battery = new sonos3Cmd();
$battery->setLogicalId('battery');
$battery->setName(__('Batterie', __FILE__));
}
$battery->setGeneric_type('BATTERY');
$battery->setUnite('%');
$battery->setType('info');
$battery->setSubType('numeric');
$battery->setConfiguration('repeatEventManagement', 'never');
$battery->setEqLogic_id($this->getId());
$battery->save();
$power = $this->getCmd(null, 'power');
if (!is_object($power)) {
$power = new sonos3Cmd();
$power->setLogicalId('power');
$power->setName(__('Power', __FILE__));
}
$power->setGeneric_type('BATTERY_CHARGING');
$power->setType('info');
$power->setSubType('string');
$power->setConfiguration('repeatEventManagement', 'never');
$power->setEqLogic_id($this->getId());
$power->save();
La fonction qui récupère les infos :
public function getBattery(): array {
if ($parser = $this->getXml("/status/batterystatus",false)) {
$batteryDatas = $parser->getElementsByTagName('Data');
$this->batteryStatus['Level'] = $batteryDatas[1];
$this->batteryStatus['PowerSource'] = $batteryDatas[3];
$this->logger->debug("{$this->ip} battery: {$this->batteryStatus['Level']}");
$this->logger->debug("{$this->ip} powerSource: {$this->batteryStatus['PowerSource']}");
}
return $this->batteryStatus;
}
Et la mise à jour des commandes :
if ($eqLogic->getConfiguration('model') == 'ROAM'){
$batteryStatus = $controller->getBattery();
$battery = $batteryStatus['Level'];
log::add('sonos3', 'debug', 'Batt : ' . getType($battery));
$eqLogic->checkAndUpdateCmd('battery', $battery);
log::add('sonos3', 'debug', 'Batterie : ' . $battery);
$power = $batteryStatus['PowerSource'];
if($power == 'BATTERY'){
$eqLogic->checkAndUpdateCmd('power', 'Batterie');
log::add('sonos3', 'debug', 'Power : Batterie');
}
if($power == 'USB_POWER'){
$eqLogic->checkAndUpdateCmd('power', 'Secteur');
log::add('sonos3', 'debug', 'Power : Secteur');
}
}
Les valeurs sont bien présentes dans le tableau renvoyé par la fonction getBattery() mais j’ai l’impression que ca bloque à cause du type. Dans l’exemple ci-dessus, le « getType($battery) » me renvoi un type « object ». J’ai essayé de forcer le type avec (int)$battery ou intval($battery) mais dans ce cas, la valeur renvoyée est toujours 1.
Au niveau de la commande, je peux voir qu’elle se met bien a jour car les « Date collecte » et « Date Valeur » sont bien mises à jour mais la valeur de la commande reste vide ou passe à 1 en forçant avec (int) et intval().
D’ailleurs, on peut voir que pour la commande « power » lorsque je fais le test avec des string pour convertir les intitulés en français, ca passe bien, les valeurs sont bien là et la commande se met bien à jour.