Ajout infos sur la batterie pour la Sonos Roam (et Move ?)

Bonjour,

Il semble possible de récupérer les informations concernant la valeur de la batterie (« level ») et si elle est en charge ou non (« PowerSource »).

Serait-il possible d’ajouter ces infos dans le plugin pour la Roam (A voir si les infos sont identiques pour la Move)?

Voici ce que renvoit le fichier XML lorsqu’elle est sur batterie :

image

Et lorsqu’elle est en charge :

image

A dispo s’il y a besoin d’informations complémentaires.

Merci.

C’est peut être plus simple avec cette URL qui donne juste l’info qui nous interesse.

image

En attendant, le plugin script fait le job.

image

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.

Toujours pas de nouvelle sur la remontée de la batterie ? :confused:
J’ai toujours pas de commande info lié à ça

Bonjour,
Le code du plugin étant public il ne faut pas hesiter a faire un PR meme incomplet au pire je prendrais du temps pour le completer mais la j’ai voulu le faire et je ne sais meme ou mettre les fonctions (le fichier ou elles vont) donc impossible pour moi de vous aider ou meme de le publier en beta.

OK j’essayerai à l’occasion ^^