[Сценарий] Случайный выбор цвета

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

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

[Сценарий] Случайный выбор цвета

Сообщение Divan » Сб авг 08, 2020 2:07 pm

Сценарий для генерации случайного цвета. Посмотреть видео можете здесь

Код в PHP

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

$RandomColor;
function colour_random() {
  return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}
$RandomColor = colour_random();
setGlobal('Lamp.RGB', $RandomColor);
Код в PHP от SmoKE_xDDD, за что ему большое спасибо!!!

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

setGlobal('объект.свойство', sprintf( '%02X%02X%02X', rand(0, 255), rand(0, 255), rand(0, 255)));
Код в blockly
СпойлерПоказать
Блокли - случайный выбор цвета.JPG
Блокли - случайный выбор цвета.JPG (20.03 КБ) 3337 просмотров
Код кнопки и запуск сценария

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

<input name="кнопка" type="button" value="Рандомный выбор цвета" onclick="runScript('Рандомный выбор цвета');" />
Запуск сценария. Это можете вставить в любую кнопку.

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

onclick="runScript('Рандомный выбор цвета');"
Последний раз редактировалось Divan Сб авг 08, 2020 4:50 pm, всего редактировалось 2 раза.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 898 раз

Re: [Сценарий] Случайный выбор цвета

Сообщение SmoKE_xDDD » Сб авг 08, 2020 2:41 pm

В одну строку:

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

$color = sprintf( '%02X%02X%02X', rand(0, 255), rand(0, 255), rand(0, 255));
За это сообщение автора SmoKE_xDDD поблагодарил:
Divan (Сб авг 08, 2020 2:55 pm)
Рейтинг: 1.16%
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Сценарий] Случайный выбор цвета

Сообщение Divan » Сб авг 08, 2020 2:56 pm

SmoKE_xDDD писал(а):
Сб авг 08, 2020 2:41 pm
В одну строку:

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

$color = sprintf( '%02X%02X%02X', rand(0, 255), rand(0, 255), rand(0, 255));
а где указывается свойство объекта?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 898 раз

Re: [Сценарий] Случайный выбор цвета

Сообщение SmoKE_xDDD » Сб авг 08, 2020 3:10 pm

Divan писал(а):
Сб авг 08, 2020 2:56 pm
SmoKE_xDDD писал(а):
Сб авг 08, 2020 2:41 pm
В одну строку:

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

$color = sprintf( '%02X%02X%02X', rand(0, 255), rand(0, 255), rand(0, 255));
а где указывается свойство объекта?

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

setGlobal('Lamp.RGB', sprintf( '%02X%02X%02X', rand(0, 255), rand(0, 255), rand(0, 255)));
За это сообщение автора SmoKE_xDDD поблагодарил:
Divan (Сб авг 08, 2020 3:15 pm)
Рейтинг: 1.16%
Аватара пользователя
Djeday999
Сообщения: 45
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 6 раз
Поблагодарили: 9 раз

Re: [Сценарий] Случайный выбор цвета

Сообщение Djeday999 » Вт янв 25, 2022 9:54 pm

А как сделать random на HSV? У меня из Tuya приходит: 016603e803e8 (говорят такой вид hhhhssssvvvv). Попробовал переделать код тупо в два раза все умножить:

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

setGlobal('Lamp.RGB', sprintf( '%02X%02X%02X%02X%02X%02X', rand(0, 100), rand(0, 100), rand(0, 100), rand(0, 100), rand(0, 100), rand(0, 100)));
вроде работает, но в итоге получаются только цифры в цвете и в основном белый цвет. Как этот разброс (0, 100) переписать, чтобы и буквы и цифры были?
Замысел-то очень даже не плохой случайного выбора цвета. Заходишь на горшок, а там новый цвет освещения.
Аватара пользователя
xor
Сообщения: 2036
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 283 раза
Поблагодарили: 628 раз

Re: [Сценарий] Случайный выбор цвета

Сообщение xor » Ср янв 26, 2022 1:24 am

Djeday999 писал(а):
Вт янв 25, 2022 9:54 pm
А как сделать random на HSV? У меня из Tuya приходит: 016603e803e8 (говорят такой вид hhhhssssvvvv). Попробовал переделать код тупо в два раза все умножить:

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

setGlobal('Lamp.RGB', sprintf( '%02X%02X%02X%02X%02X%02X', rand(0, 100), rand(0, 100), rand(0, 100), rand(0, 100), rand(0, 100), rand(0, 100)));
вроде работает, но в итоге получаются только цифры в цвете и в основном белый цвет. Как этот разброс (0, 100) переписать, чтобы и буквы и цифры были?
Замысел-то очень даже не плохой случайного выбора цвета. Заходишь на горшок, а там новый цвет освещения.
в мдм есть 4 функции для работы с hsv, в том числе, и конвертация из ргб. если можно в ргб рандом сделать, то можно его и конвертировать
2022-01-26_01-20-43.png
2022-01-26_01-20-43.png (36.29 КБ) 1977 просмотров
Аватара пользователя
Djeday999
Сообщения: 45
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 6 раз
Поблагодарили: 9 раз

Re: [Сценарий] Случайный выбор цвета

Сообщение Djeday999 » Ср янв 26, 2022 8:42 am

Конвертер я состряпал исключительно для колорпикера объекта в ПУ

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

$color = gg('Rgb01.colorTuya');
$HSV=$color;

$H=hexdec(substr($HSV,0,4));
$S=hexdec(substr($HSV,4,4));
$V=hexdec(substr($HSV,8,4));

//$H = $H/360;
//$S = $S/1000;
//$V = $V/1000;
$S = $S/10;
$V = $V/10;
echo '<BR>-------<BR>';
echo 'H: ';
echo $H;
echo '<BR>-------<BR>';
echo 'S: ';
echo $S; 
echo '<BR>-------<BR>';
echo 'V: ';
echo $V;
echo '<BR>-------<BR>';
var_dump(hsv2rgb($H, $S, $V));


  function hsv2rgb($hue,$sat,$val) {
    $rgb = array(0,0,0);
    //calc rgb for 100% SV, go +1 for BR-range
    for($i=0;$i<4;$i++) {
      if (abs($hue - $i*120)<120) {
        $distance = max(60,abs($hue - $i*120));
        $rgb[$i % 3] = 1 - (($distance-60) / 60);
      }
    }
    //desaturate by increasing lower levels
    $max = max($rgb);
    $factor = 255 * ($val/100);
    for($i=0;$i<3;$i++) {
      //use distance between 0 and max (1) and multiply with value
      $rgb[$i] = round(($rgb[$i] + ($max - $rgb[$i]) * (1 - $sat/100)) * $factor);
    }
    $rgb['html'] = sprintf('#%02X%02X%02X', $rgb[0], $rgb[1], $rgb[2]); 
    sg('Rgb01.color', sprintf( '#%02X%02X%02X', $rgb[0], $rgb[1], $rgb[2]));
    return $rgb;

  }
Спасибо отдельное fandaymon.
Потом увидев как сделал молодец Divan (не без помощи конечно SmoKE_xDDD)) сценарий для генерации случайного цвета решил провернуть у себя, но не тут-то было. При его коде действительно меняется цвет формата #FF0009, но только в колорпикере объекта в ПУ, а в Tuya необходимо закидывать свой формат цвета HSV (или HSB его называют). Вот и заковырка получается.
Ответить