Philips Hue, erreur à l'allumage

Tags: #<Tag:0x00007fc8cf2ae550>

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