устаревший вариант, последняя более простая для пользователя реализация - https://connect.smartliving.ru/tasks/288.html
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Переработаный (чутка) скрипт от Сергея
В сойствах RGB создаем свойство brightness
В модуле xiaomihome следуем настройкам на скрине
Скрипт gateColorAction
if (isset($params['color'])) {
//sg('Rgb01.color', $params['color']);
cm('Rgb01.setColor', array('color'=> $params['color'])); //Устанавливаем цвет по требованию
setTimeout('xiColorReset', 'runScript(\'gateColorAction\');', 5); //Устанавливаем вызов скрипта через 5 сек.
return;
} elseif (gg('NobodyHomeMode.active') == 1) { //Никого нет дома
$color = '000000';
//sg('Rgb01.color', $color);
cm('Rgb01.setColor', array('color'=> $color)); //Выключаем подсветку
} elseif (gg('NobodyHomeMode.active') == 2) { //Все спят
$color = 'ff8c00';
//sg('Rgb01.color', $color);
cm('Rgb01.setColor', array('color'=> $color));
if (gg('Rgb01.brightness') != 25) {
sg('Rgb01.brightness', 25); //Яркость
}
} else {
$color = '00ff00';
$redFound = 0;
$systemColor = gg('System.stateColor');
if ($systemColor == 'red') {
$color = 'ff0000';
$redFound = 1;
}
}
if (!$redFound) {
$states = array('System', 'Communication');
foreach($states as $state) {
if (gg($state . '.stateColor') == 'yellow') {
$color = 'ffaa00';
}
}
//sg('Rgb01.color', $color);
cm('Rgb01.setColor', array('color'=> $color)); //Устанавливаем цвет в соответствии с условиями выше
if (gg('Rgb01.brightness') != 50) {
sg('Rgb01.brightness', 50); //Яркость
}
}
setTimeout('xiColorReset', 'runScript(\'gateColorAction\');', 60); //Устанавливаем вызов скрипта через 60 сек.
Пример установки цвета по требованию
runScriptSafe('gateColorAction', array('color'=> ff8000));
или со средней температуры по квартире (из метода перевода температуры в цвет от Багира)
runScriptSafe('gateColorAction', array('color'=> $hcolor));
сам метод TempHEX (привязан на изменение свойства)
$x = $this->getProperty('TempAvg');
if ($x < 12) {$x = 12;} elseif ($x > 30) {$x = 30;}
//расчет величины цветовой шкалы
$x = round(($x-12) * 42, 5);
//$hcolor = '#';
//расчет r
$y = $x - 255;
if ($y < 0) {$y = 0;} elseif ($y > 255) {$y = 255;}
$y = dechex($y);
if (strlen($y) == 1) {$y = '0' . $y;}
$hcolor = $hcolor . $y;
//расчет g
$y = 255 - $x;
if ($y < 0) {$y = 0;} elseif ($y > 255) {$y = 255;}
$y = dechex($y);
if (strlen($y) == 1) {$y = '0' . $y;}
$hcolor = $hcolor . $y;
//расчет b
$y = 765 - $x;
if ($y < 0) {$y = 0;} elseif ($y > 255) {$y = 255;}
$y = dechex($y);
if (strlen($y) == 1) {$y = '0' . $y;}
$hcolor = $hcolor . $y;
//установить свойство цвета температуры
$this->setProperty('TempHEX', $hcolor);
//callMethodSafe('Data.absoluteHumidity');
runScriptSafe('gateColorAction', array('color'=> $hcolor));
Полезное:
БЗ
Нижний Тагил, Россия
На форуме: Logrus