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

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

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

Сообщение Divan » Вс июл 21, 2019 11:25 am

Сейчас у меня выбор цветов работает по такой схеме (см. ниже). Скажите, как сделать так, чтобы при включении 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), прописал данные и код. (см. скриншот)
Вложения
RGB лента.jpg
RGB лента.jpg (105.25 КБ) 3406 просмотров
RGB лампа.jpg
RGB лампа.jpg (142.71 КБ) 3406 просмотров
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Вс июл 21, 2019 11:55 am

Какая то сложная реализация у вас.... Вызывайте сценарий или метод при изменении свойства цвета, а в сценарии/методе задавайте параметр в другой девайс...
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

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

Сообщение 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;
   
} 
 
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Ср июл 24, 2019 7:29 pm

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.
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Ср июл 24, 2019 8:20 pm

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 и т.д. просто так код понятнее для автора.
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

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

Сообщение 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']));
}
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Ср июл 24, 2019 10:21 pm

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']));
}
Это готовый код - используйте где хотите, хоть в сценариях, хоть в методах...
За это сообщение автора SmoKE_xDDD поблагодарил:
Divan (Чт июл 25, 2019 2:00 pm)
Рейтинг: 1.16%
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Ср июл 24, 2019 10:38 pm

var_dump($prop_id) покажет содержимое массива
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

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

Сообщение Divan » Ср июл 24, 2019 10:51 pm

что-то я не совсем вас понимаю (. Можете написать как и куда нужно это все вставлять? Например: Сначала создаю сценарий с именем "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"
  }
}
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Ср июл 24, 2019 11:01 pm

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! обновил, кода побольше, но нагрузка поменьше.
Ответить