Страница 1 из 2

Синхронизация RGB лампы с RGB лентой

Добавлено: Вс июл 21, 2019 11:25 am
Divan
Сейчас у меня выбор цветов работает по такой схеме (см. ниже). Скажите, как сделать так, чтобы при включении RGB лампы, RGB лампа включала такой же цвет как у RGB ленты? Как настроить синхронизацию цветов между RGB лентой и RGB лампой? Допустим, RGB лампа в настоящий момент выключена, а RGB лента включена и выбран цвет "Зеленый", пришло время, включаю RGB лампу и она должна загореться зеленым цветом, если RGB лента светилась синим цветом, то и RGB лампа должна включиться уже с синим цветом. Также хотелось бы сделать между ними связь, если RGB лента и RGB лампа включены, то где бы ни выбрал цвет, то между ними должен быть одинаковый цвет.

Для RGB ленты создал поле (SELECT) и:
Прописал данные:
  • Голубой
    Синий
    Розовый
    Оранжевый
    Зеленый
    Желтый
    Пурпурный
    Красный
    Морской
Прописал код:

Код: Выделить всё

switch($params["VALUE"]) {
  case Голубой:sg('Deepcool_RGB360.Голубой', 1);break;
  case Синий:sg('Deepcool_RGB360.Синий', 1);break;
  case Розовый:sg('Deepcool_RGB360.Розовый', 1);break;
  case Оранжевый:sg('Deepcool_RGB360.Оранжевый', 1);break;
  case Зеленый:sg('Deepcool_RGB360.Зеленый', 1);break;
  case Желтый:sg('Deepcool_RGB360.Желтый', 1);break;
  case Пурпурный:sg('Deepcool_RGB360.Пурпурный', 1);break;
  case Красный:sg('Deepcool_RGB360.Красный', 1);break;
  case Морской:sg('Deepcool_RGB360.Морской', 1);break;
   
} 

Для RGB лампы также создал поле (SELECT), прописал данные и код. (см. скриншот)

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Вс июл 21, 2019 11:55 am
SmoKE_xDDD
Какая то сложная реализация у вас.... Вызывайте сценарий или метод при изменении свойства цвета, а в сценарии/методе задавайте параметр в другой девайс...

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 6:14 pm
Divan
Немного сдвинулось с места. Добавив такой код (см. ниже), у меня при выборе цвета, на RGB лампе и ленте одновременно включается выбранный цвет. Теперь нужно понять, как сделать так, чтобы при включении RGB лампы, включился такой же свет как и у ленты. Допустим RGB лента горит зеленым светом, а RGB лампа пока выключена, как я ее включил, идет сравнение цветов между RGB лентой и лампой, и лампа включает зеленый цвет.

Код: Выделить всё

switch($params["VALUE"]) {
  
  case Голубой:
  	sg('Deepcool_RGB360.Голубой', 1);
  	sg('Gauss_RGB_лампа.DeepSkyBlue', 1); 
      break;
  
  case Синий:
  	sg('Deepcool_RGB360.Синий', 1);
  	sg('Gauss_RGB_лампа.Blue', 1);
  		break;
  
  case Розовый:
  	sg('Deepcool_RGB360.Розовый', 1);
  	sg('Gauss_RGB_лампа.Fuchsia', 1);
  		break;
   
} 
 

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 7:29 pm
SmoKE_xDDD
Divan писал(а):
Ср июл 24, 2019 6:14 pm
Немного сдвинулось с места. Добавив такой код (см. ниже), у меня при выборе цвета, на RGB лампе и ленте одновременно включается выбранный цвет. Теперь нужно понять, как сделать так, чтобы при включении RGB лампы, включился такой же свет как и у ленты. Допустим RGB лента горит зеленым светом, а RGB лампа пока выключена, как я ее включил, идет сравнение цветов между RGB лентой и лампой, и лампа включает зеленый цвет.

Код: Выделить всё

switch($params["VALUE"]) {
  
  case Голубой:
  	sg('Deepcool_RGB360.Голубой', 1);
  	sg('Gauss_RGB_лампа.DeepSkyBlue', 1); 
      break;
  
  case Синий:
  	sg('Deepcool_RGB360.Синий', 1);
  	sg('Gauss_RGB_лампа.Blue', 1);
  		break;
  
  case Розовый:
  	sg('Deepcool_RGB360.Розовый', 1);
  	sg('Gauss_RGB_лампа.Fuchsia', 1);
  		break;
   
} 
 
Получить все свойства объекта, используя цикл найти свойство в котором свойство 1.

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 8:20 pm
SmoKE_xDDD
Divan писал(а):
Ср июл 24, 2019 6:14 pm
Немного сдвинулось с места. Добавив такой код (см. ниже), у меня при выборе цвета, на RGB лампе и ленте одновременно включается выбранный цвет. Теперь нужно понять, как сделать так, чтобы при включении RGB лампы, включился такой же свет как и у ленты. Допустим RGB лента горит зеленым светом, а RGB лампа пока выключена, как я ее включил, идет сравнение цветов между RGB лентой и лампой, и лампа включает зеленый цвет.

Код: Выделить всё

switch($params["VALUE"]) {
  
  case Голубой:
  	sg('Deepcool_RGB360.Голубой', 1);
  	sg('Gauss_RGB_лампа.DeepSkyBlue', 1); 
      break;
  
  case Синий:
  	sg('Deepcool_RGB360.Синий', 1);
  	sg('Gauss_RGB_лампа.Blue', 1);
  		break;
  
  case Розовый:
  	sg('Deepcool_RGB360.Розовый', 1);
  	sg('Gauss_RGB_лампа.Fuchsia', 1);
  		break;
   
} 
 
Накидал вам быстренько, не знаю насколько правильно лазить по БД, но код работает:

Код: Выделить всё

$search_obj = 'testObject';
//Найтем ID обьекта
$sql = SQLSelectOne("SELECT id FROM `objects` WHERE `TITLE` = '{$search_obj}'");
$obj_id = $sql['id'];
//Найдем значения свойства
$sql = SQLSelect("SELECT ID,TITLE FROM `properties` WHERE `OBJECT_ID` = '{$obj_id}'");
$prop_id = [];
foreach ($sql as $key => $value) {
 	//Запросим значения свойств
 	$sql = SQLSelectOne("SELECT VALUE FROM `pvalues` WHERE `OBJECT_ID` = '{$obj_id}' AND `PROPERTY_ID` = {$value['ID']}");
 	//Сформировали массив с ID свойств
 	array_push($prop_id, array('ID' => $value['ID'], 'TITLE' => $value['TITLE'], 'VALUE' => $sql['VALUE']));
}
В результате получите массив:

Код: Выделить всё

array(5) {
  [0]=>
  array(3) {
    ["ID"]=>
    string(4) "2257"
    ["TITLE"]=>
    string(4) "blue"
    ["VALUE"]=>
    string(1) "0"
  }
  [1]=>
  array(3) {
    ["ID"]=>
    string(4) "2258"
    ["TITLE"]=>
    string(5) "green"
    ["VALUE"]=>
    string(1) "0"
  }
  [2]=>
  array(3) {
    ["ID"]=>
    string(4) "2259"
    ["TITLE"]=>
    string(3) "red"
    ["VALUE"]=>
    string(1) "1"
  }
  [3]=>
  array(3) {
    ["ID"]=>
    string(4) "2260"
    ["TITLE"]=>
    string(6) "yellow"
    ["VALUE"]=>
    string(1) "0"
  }
  [4]=>
  array(3) {
    ["ID"]=>
    string(4) "2261"
    ["TITLE"]=>
    string(5) "white"
    ["VALUE"]=>
    string(1) "0"
  }
}
А дальше что хотите с ним делайте...
P.S. Я знаю про JOIN и т.д. просто так код понятнее для автора.

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 9:21 pm
Divan
Ух ты, спасибо что ответили ). Скажите, я правильно понимаю, что это запросы для БД, т.е нужно в БД сделать запросы и в итоге я получу массив?

Код: Выделить всё

$search_obj = 'testObject';
//Найтем ID обьекта
$sql = SQLSelectOne("SELECT id FROM `objects` WHERE `TITLE` = '{$search_obj}'");
$obj_id = $sql['id'];
//Найдем значения свойства
$sql = SQLSelect("SELECT ID,TITLE FROM `properties` WHERE `OBJECT_ID` = '{$obj_id}'");
$prop_id = [];
foreach ($sql as $key => $value) {
 	//Запросим значения свойств
 	$sql = SQLSelectOne("SELECT VALUE FROM `pvalues` WHERE `OBJECT_ID` = '{$obj_id}' AND `PROPERTY_ID` = {$value['ID']}");
 	//Сформировали массив с ID свойств
 	array_push($prop_id, array('ID' => $value['ID'], 'TITLE' => $value['TITLE'], 'VALUE' => $sql['VALUE']));
}

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 10:21 pm
SmoKE_xDDD
Divan писал(а):
Ср июл 24, 2019 9:21 pm
Ух ты, спасибо что ответили ). Скажите, я правильно понимаю, что это запросы для БД, т.е нужно в БД сделать запросы и в итоге я получу массив?

Код: Выделить всё

$search_obj = 'testObject';
//Найтем ID обьекта
$sql = SQLSelectOne("SELECT id FROM `objects` WHERE `TITLE` = '{$search_obj}'");
$obj_id = $sql['id'];
//Найдем значения свойства
$sql = SQLSelect("SELECT ID,TITLE FROM `properties` WHERE `OBJECT_ID` = '{$obj_id}'");
$prop_id = [];
foreach ($sql as $key => $value) {
 	//Запросим значения свойств
 	$sql = SQLSelectOne("SELECT VALUE FROM `pvalues` WHERE `OBJECT_ID` = '{$obj_id}' AND `PROPERTY_ID` = {$value['ID']}");
 	//Сформировали массив с ID свойств
 	array_push($prop_id, array('ID' => $value['ID'], 'TITLE' => $value['TITLE'], 'VALUE' => $sql['VALUE']));
}
Это готовый код - используйте где хотите, хоть в сценариях, хоть в методах...

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 10:38 pm
SmoKE_xDDD
var_dump($prop_id) покажет содержимое массива

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 10:51 pm
Divan
что-то я не совсем вас понимаю (. Можете написать как и куда нужно это все вставлять? Например: Сначала создаю сценарий с именем "RGB лампа - сверка цветов", вставляю этот код в раздел PHP и привязываю к объекту RGB лампа, которая будет сканировать объект RGB лента, так?

Код: Выделить всё

$search_obj = 'RGB лента';
//Найтем ID обьекта
$sql = SQLSelectOne("SELECT id FROM `objects` WHERE `TITLE` = '{$search_obj}'");
$obj_id = $sql['id'];
//Найдем значения свойства
$sql = SQLSelect("SELECT ID,TITLE FROM `properties` WHERE `OBJECT_ID` = '{$obj_id}'");
$prop_id = [];
foreach ($sql as $key => $value) {
 	//Запросим значения свойств
 	$sql = SQLSelectOne("SELECT VALUE FROM `pvalues` WHERE `OBJECT_ID` = '{$obj_id}' AND `PROPERTY_ID` = {$value['ID']}");
 	//Сформировали массив с ID свойств
 	array_push($prop_id, array('ID' => $value['ID'], 'TITLE' => $value['TITLE'], 'VALUE' => $sql['VALUE']));
}

А этот код куда вставлять?

Код: Выделить всё

array(5) {
  [0]=>
  array(3) {
    ["ID"]=>
    string(4) "2257"
    ["TITLE"]=>
    string(4) "blue"
    ["VALUE"]=>
    string(1) "0"
  }
  [1]=>
  array(3) {
    ["ID"]=>
    string(4) "2258"
    ["TITLE"]=>
    string(5) "green"
    ["VALUE"]=>
    string(1) "0"
  }
  [2]=>
  array(3) {
    ["ID"]=>
    string(4) "2259"
    ["TITLE"]=>
    string(3) "red"
    ["VALUE"]=>
    string(1) "1"
  }
  [3]=>
  array(3) {
    ["ID"]=>
    string(4) "2260"
    ["TITLE"]=>
    string(6) "yellow"
    ["VALUE"]=>
    string(1) "0"
  }
  [4]=>
  array(3) {
    ["ID"]=>
    string(4) "2261"
    ["TITLE"]=>
    string(5) "white"
    ["VALUE"]=>
    string(1) "0"
  }
}

Re: Синхронизация RGB лампы с RGB лентой

Добавлено: Ср июл 24, 2019 11:01 pm
SmoKE_xDDD
Divan писал(а):
Ср июл 24, 2019 10:51 pm
что-то я не совсем вас понимаю
Да, тяшко без хотя - бы базовых знаний php =)
Давайте я вам еще вариант подкину - попроще.
1) Создаете CRON задание с php кодом

Код: Выделить всё

if(gg('Deepcool_RGB360.Голубой') == 1 || gg('Gauss_RGB_лампа.DeepSkyBlue') == 1) {
	if(gg('Gauss_RGB_лампа.DeepSkyBlue') != 1) {
		sg('Gauss_RGB_лампа.DeepSkyBlue', 1);
	}
	if(gg('Deepcool_RGB360.Голубой') != 1) {
		sg('Deepcool_RGB360.Голубой', 1);
	}
}
if(gg('Deepcool_RGB360.Синий') == 1 || gg('Gauss_RGB_лампа.Blue') == 1) {
	if(gg('Gauss_RGB_лампа.Blue') != 1) {
		sg('Gauss_RGB_лампа.Blue', 1);
	}
	if(gg('Deepcool_RGB360.Синий') != 1) {
		sg('Deepcool_RGB360.Синий', 1);
	}
}


.............и так далее по примеру
Криво, медленно, можно проще, но работать должно.

UPD! обновил, кода побольше, но нагрузка поменьше.