Philips Hue, erreur à l'allumage

Tags: #<Tag:0x00007f28364c0eb8>

Bonjour,
J’ai remarqué un fonctionnement embêtant lorsque l’on allume des lampes avec la commande On.
Celle-ci ne reprend pas son état antérieur.
Pour corriger cela j’ai effectué quelques correctifs dans la fonction execute du plugin.
Celui-ci n’étant pas disponible en github je ne peux pas pousser les modifications, voici donc la fonction ici.
Les modifications concernent surtout le placement du On et du TransitionTime.

Cédric

public function execute($_options = null) {
		if ($this->getType() != 'action') {
			return;
		}
		$eqLogic = $this->getEqLogic();
		$hue = philipsHue::getPhilipsHue();
		if ($eqLogic->getConfiguration('category') == 'sensor') {
			$sensors = philipsHue::sanitizeSensors($hue->getSensors());
			if (!isset($sensors[$eqLogic->getConfiguration('id')])) {
				return;
			}
			$sensor = $sensors[$eqLogic->getConfiguration('id')];
			foreach ($sensor as $mine) {
				foreach ($this->getConfiguration('toUpdate') as $value) {
					if (isset($value['onType']) && $value['onType'] != $mine->getType()) {
						continue;
					}
					$toSet = $value['value'];
					if (isset($value['valueType'])) {
						switch ($value['valueType']) {
							case 'boolean':
							$toSet = (boolean) $value['value'];
							break;
							case 'int':
							$toSet = (int) $value['value'];
							break;
						}
					}
					if ($value['type'] == 'config') {
						$command = new \Phue\Command\UpdateSensorConfig($mine);
						$command = $command->configAttribute($value['key'], $toSet);
						$hue->sendCommand($command);
					}
				}
			}
			return;
		}
		$transition = $eqLogic->getCmd(null, 'transition_state');
		$transistion_time = 0;
		if (is_object($transition)) {
			$transistion_time = $transition->execCmd(null, 2);
			if ($transistion_time !== 0) {
				$transition->event(0);
			}
		}
		$transistion_time = ($transistion_time == 0) ? 1 : $transistion_time;
		

		switch ($eqLogic->getConfiguration('category')) {
			case 'light':
			$command = new \Phue\Command\SetLightState($eqLogic->getConfiguration('id'));
			break;
			case 'group':
			$command = new \Phue\Command\SetGroupState($eqLogic->getConfiguration('id', 0));
			break;
			default:
			return;
		}
		//$command->transitionTime($transistion_time);

		$command->on(true);
		if ($this->getLogicalId() != 'animation' && $eqLogic->getCache('current_animate', 0) == 1) {
			$eqLogic->stopAnimation();
		}
		switch ($this->getLogicalId()) {
			case 'on':
			$command->on(true);
			$command->transitionTime($transistion_time);
			//$command->brightness(255);
			//$command->rgb(255, 255, 255);

			break;
			case 'off':
			//if ($eqLogic->getConfiguration('model') != "LWB004") {
			//$command->effect('none');
			//}
			//$command->alert('none');
			$command->on(false);
			break;
			case 'luminosity':
			if ($_options['slider'] == 0) {
				if ($eqLogic->getConfiguration('model') != "LWB004") {
					$command->effect('none');




				}
				$command->alert('none');
				$command->on(false);
			} else {
				$command->brightness($_options['slider']);
				$command->transitionTime($transistion_time);
			}
			break;
			case 'color_temp':
			$command->colorTemp((int) $_options['slider']);
			$command->transitionTime($transistion_time);

			break;
			case 'color':
			if ($_options['color'] == '#000000') {
				if ($eqLogic->getConfiguration('model') != "LWB004") {
					$command->effect('none');







				}
				$command->alert('none');
				$command->on(false);
			} else {
				list($r, $g, $b) = str_split(str_replace('#', '', $_options['color']), 2);
				$command->rgb(hexdec($r), hexdec($g), hexdec($b));
				$command->transitionTime($transistion_time);
			}
			break;
			case 'alert_on':
			$command->alert('lselect');
			break;
			case 'alert_off':
			$command->alert('none');
			break;
			case 'rainbow_on':
			$command->effect('colorloop');
			$command->transitionTime($transistion_time);

			break;
			case 'rainbow_off':
			$command->effect('none');
			$command->transitionTime($transistion_time);

			break;
			case 'transition':
			if (is_object($transition)) {
				$transition->event($_options['slider']);
			}

			return;
			case 'scene':
			$command->scene($_options['select']);
			$command->transitionTime($transistion_time);

			break;
			case 'animation':
			$eqLogic->animation($_options['title'], $_options['message']);
			$command->transitionTime($transistion_time);

			return;

		}
		$hue->sendCommand($command);
	}

Bonjour
Merci pour le retour j’ai fait ces modifications il me semble il y a quelques semaines sur la beta ça sera donc dans la prochaine stable du plugin

Super, en effet je suis en stable.
Je te tiens au courant dans la prochaine version si c’est bon chez moi.

Merci,
Cédric

En faite je viens de regarder mes modifications sont deja en stable, maintenant un on fait :

$command->transitionTime($transistion_time);
$command->on(true);

Hum étrange que je l’ai pas eu, tant que le transition time n’est pas mis par défaut.
Ce qui pose le souci est surtout dans le cas du off ou le transition time ne dois pas être placé il me semble autrement la lampe ne reprendra pas son dernier état lors de l’appel du on.

Dans ton code tu as aussi le transitionTime pour moi les 2 code sont identiques

La différence est surtout la suppression du transition time pour toutes les commandes avant le switch case. Il est donc placé comme toi pour le On mais dans le case du Off on ne le fait plus avec cela.

Et sans le transition Time au off ya plus de soucis de perte d’état quand tu rallume la lampe ?

Tout à fait.

Ok je note et je ferais la correction, merci pour les tests j’aurais jamais trouvé je pense.

Merci à toi, si tu as besoin d’autres infos n’hésite pas.

Voila je viens de pousser une stable qui supprime le transition time, si tu peux me confirmer que tout est bon ca serait top.

Salut,
Oui ça fonctionne !

Merci

Super merci pour le retour

Bonjour,
concernant les transitions des allumages ou extinctions des Hue, il semble que cela ne fonctionne plus depuis quelques jours, est ce que une modification du plugin entraine des modifications a faire dans mes scénarios ?

cas d’exemple, je lance mon scénario “bonne nuit”, mon lightstrip sous mon lit s’allume en rouge a 180/255 et doit durant 20min baisser la luninositer jusque a extinction.
cela ne fonctionne plus depuis la précédente mise à jour. 02

Dans cet exemple j’ai modifié la valeur de la durée a 10sec pour des raisons de tests.
Merci a vous de vos éclaircissements à ce sujet
Ciao

Salut,
Je ne suis pas sur que l’enchaînement est correct.
Tant que tu n’utilises pas la commande Off cela ne change rien depuis l’ancienne version.
Je vois ta transition mais où est ta commande de luminosité à 0 pour éteindre avec la transition ?

Merci de la réponse,
Justement avant mettre la transition vers OFF n’était pas requise si ?
Je vais Scénariser cela pour voir. Merci du retour
je vous donnerai un feedback