directman

 
<<< Back

Колор-пикер для телеграм

В телеграмм нет возможности изменять цвета, поэтому приходится извращаться разными методами.

Данный пример показывает цветом устройства RGB и при нажатии на кнопку предлагает установить новое значение.

Команда:

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();

//$off = json_decode('"'.'\ud83c\udf11'.'"');
//$on = json_decode('"'.'\uD83C\uDF15'.'"');
//u263c

$black = json_decode('"'.'\ud83c\udf11'.'"'); 
$orange = json_decode('"'.'\ud83c\udf4a'.'"');
$blue = json_decode('"'.'\ud83d\udd35'.'"'); 
$green = json_decode('"'.'\ud83d\udc9a'.'"');  
$red = json_decode('"'.'\u2764\ufe0f'.'"');   
$white = json_decode('"'.'\ud83d\udd4a'.'"');  
$grey = json_decode('"'.'\ud83d\udc7b'.'"');    
$pink = json_decode('"'.'\ud83d\ude08'.'"');   
$yellow = json_decode('"'.'\ud83c\udf15'.'"');  

//ud83c\udf11
$class='SRGB';
$objects=getObjectsByClass("SRGB");
//print_r($objects);
foreach($objects as $obj) {
    $state = $off;
     if (gg($obj['TITLE'].".color ") )
         $state = $on;
 $color=gg($obj['TITLE'].".color ");

 $arr =str_split($color, 2);
$r=hexdec($arr[0]);
$g=hexdec($arr[1]);
$b=hexdec($arr[2]);
$textcolor=rgb2text($r, $g,$b);

if ($textcolor=='зеленый') $char=$green;
if ($textcolor=='желтый') $char=$yellow;
if ($textcolor=='синий') $char=$blue; 
if ($textcolor=='красный') $char=$red;
if ($textcolor=='черный') $char=$black; 
if ($textcolor=='голубой') $char=$blue; 
if ($textcolor=='фиолетовый') $char=$violet;  
if ($textcolor=='розовый') $char=$pink;  

$option[] = $telegram_module->buildInlineKeyboardButton($text=$char." ".getObject($obj['TITLE'])->description,"","Callback_rgb_select_".$obj['TITLE'],"");
}

$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $telegram_module->buildInlineKeyBoard($option);

    $content = array('chat_id' => $chat_id, 'text' => "Устройства: ".$class, 'reply_markup' => $keyb, 'parse_mode' => 'HTML');
$telegram_module->sendContent($content); 

function rgb2text($r,$g,$b){
//определяем, что сейчас за цвет
//http://www.manhunter.ru/webmaster/1028_opredelenie_osnovnogo_cveta_izobrazheniya_na_php.html

// Перевести RGB в HSV
$R=($r/255);
$G=($g/255);
$B=($b/255);

$maxRGB=max(array($R, $G, $B));
$minRGB=min(array($R, $G, $B));
$delta=$maxRGB-$minRGB;

// Цветовой тон
if ($delta!=0) {
    if ($maxRGB==$R) {
        $h=(($G-$B)/$delta);
    }
    elseif ($maxRGB==$G) {
        $h=2+($B-$R)/$delta;
    }
    elseif ($maxRGB==$B) {
        $h=4+($R-$G)/$delta;
    }
    $hue=round($h*60);
    if ($hue<0) { $hue+=360; }
}
else {
    $hue=0;
}

// Насыщенность
if ($maxRGB!=0) {
    $saturation=round($delta/$maxRGB*100);
}
else {
    $saturation=0;
}

// Яркость
$value=round($maxRGB*100);

// Яркость меньше 30%
if ($value<30) {
    // Черный
//    $color='#000000';
$textcolor='черный';
}
// Яркость больше 85% и насыщенность меньше 15%
elseif ($value>85 && $saturation<15) {
    // Белый
//    $color='#FFFFFF';
$textcolor='белый';

}
// Насыщенность меньше 25%
elseif ($saturation<25) {
    // Серый
//    $color='#909090';
$textcolor='серый';
}
// Определить цвет по цветовому тону
else {
    // Красный
    if ($hue>320 || $hue<=40) {
//        $color='#FF0000';
$textcolor='красный';
    }
    // Розовый
    elseif ($hue>260 && $hue<=320) {
//        $color='#FF00FF';
$textcolor='розовый';
    }
    // Синий
    elseif ($hue>190 && $hue<=260) {
//        $color='#0000FF';
$textcolor='синий';
    }
    // Голубой
    elseif ($hue>175 && $hue<=190) {
//        $color='#00FFFF';
$textcolor='голубой';
    }
    // Зеленый
    elseif ($hue>70 && $hue<=175) {
//        $color='#00FF00';
$textcolor='зеленый';
    }
    // Желтый
    else {
//        $color='#FFFF00';
$textcolor='желтый';
    }

}
return $textcolor;
}

Callback:

$sw = false;

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//$telegram_module->sendMessageToAll($callback);
//$telegram_module->sendMessageToAll(substr($callback,0,12));
//$telegram_module->sendMessageToAll(substr($callback,15));

if (substr($callback,0,19) == 'Callback_rgb_select')
{
$telegram_module->sendMessageToAll(substr($callback,20)); 
$color=array();
$color["black"]=json_decode('"'.'\ud83c\udf11'.'"'); 
$color["orange"]= json_decode('"'.'\ud83c\udf4a'.'"');
$color["blue"] = json_decode('"'.'\ud83d\udd35'.'"'); 
$color["green"] = json_decode('"'.'\ud83d\udc9a'.'"');  
$color["red"] = json_decode('"'.'\u2764\ufe0f'.'"');   
$color["white"] = json_decode('"'.'\ud83d\udd4a'.'"');  
$color["grey"] = json_decode('"'.'\ud83d\udc7b'.'"');    
$color["pink"] = json_decode('"'.'\ud83d\ude08'.'"');   
$color["yellow"] = json_decode('"'.'\ud83c\udf15'.'"');  

//print_r($objects);
foreach($color as $obj=>$key) {
//$telegram_module->sendMessageToAll($obj.$key);    
    //$option[] = $this->buildInlineKeyboardButton($text=$obj['key'],"","CallbackMode_rejim_".$obj['TITLE'],"");
 $option[] = $this->buildInlineKeyboardButton($text=$key,"","Callback_rgb_set_".substr($callback,20).'_'.$obj,"");
}

$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);
$this->editMessage($chat_id,$message_id,"Выберите цвет:",$keyb);

}

if (substr($callback,0,16) == 'Callback_rgb_set')
{
 $ar=explode('_',$callback);
  $color=$ar[4];
 $obj=$ar[3];
$telegram_module->sendMessageToAll('Устанавливаем цвет '.$color.' для '.$obj) ;

 if ($color=='yellow') $newcolor='ffff00';
 if ($color=='black') $newcolor='000000';
 if ($color=='red') $newcolor='ff0000';
 if ($color=='green') $newcolor='00ff00';
 if ($color=='orange') $newcolor='ffa500';
 if ($color=='white') $newcolor='ffffff';
 if ($color=='grey') $newcolor='c0c0c0';
 if ($color=='pink') $newcolor='ff00ff';
 if ($color=='blue') $newcolor='0000ff';

setglobal($obj.'.color', $newcolor);

}

//  cm(substr($callback,15).".switch");

Discuss (4) (6)

See also:
2021-03-02 Добавляем новые или недостающие метрики управления устройств в модуле zigbee2mqtt
2021-02-16 Установка Majordomo на JetHUB D1
2021-02-02 Shelly 1
2020-09-30 Команды для назначения владельцев папок
2020-09-16 Собираем список ip вызывных панелей с поддержкой SIP
2020-07-03 Получаем безопасный доступ к Web странице MajorDoMo
2020-04-24 Установка MajorDoMo на synology в 3 клика
2020-02-13 Настройка модуля zigbee2mqtt для работы с zigbee2mqtt или шлюзом sls zigbee gateway
2020-02-13 Настройка модуля zigbee2mqtt для работы с zigbee2mqtt или шлюзом sls zigbee gateway
2020-01-25 Команды для настройки прав пользователей на папку с majordomo
2020-01-23 Отключаем строгий режим MYSQL штатными средствами
2019-10-12 Подключаем светодиодные ленты к контроллеру MegaD
2019-10-11 Варианты интеграции электроприводов
2019-09-30 Выбор источников сигнала телевизоров LG 2013
2019-09-29 Узнаем версию дистрибутива linux
2019-09-24 Установка необходимых пакетов в xpenology через docker
2019-09-16 Примеры разметки Markdown
2019-09-14 Краткий обзор выключателей, в том числе Sonoff T4EU1C
2019-09-13 Сценарий для канала @MajorDoMo_feed
2020-03-26 Опыт установки Synology DSM
2019-09-09 Делаем majordroid лаунчером андройд по-умолчанию.
2019-09-04 Реализация сценария "кто-то пришел"
2019-09-02 Отправляем график hightcharts свойства любого объекта в телеграмм
2019-09-17 Автономная сигнализация на базе контроллера megad-2561
2019-08-27 Управление громкостью терминалов через телеграмм
2019-08-26 Полноценная консоль в браузере (wetty)
2019-08-16 Точечное регулирование радиаторов отопления
2019-08-18 Собираем голосовой помощник на базе WM8960 Audio HAT и raspberry pi zero w
2019-08-13 Общедоступная ссылка с закатом, рассветом и текущей погодой
2019-07-24 Самый дешевый вариант видеонаблюдения
2019-07-22 Запуск MajorDroid на одноплатниках, старых планшетах, телефонах.
2019-07-22 Запуск Majordroid на старом железе
2019-07-15 Устанавливаем opencv и необходимые библиотеки на ubuntu 18.04 без использования python
2019-07-05 Решение проблемы Incorrect integer value: '' for column 'ID' at row 1
2019-07-04 О приборах учета и удаленном снятии показаний (вода и газ)
2019-07-04 О приборах учета и удаленном снятии показаний (электричество)
2019-07-03 Конвертируем rs-485 в TCP-IP
2019-06-24 Наблюдение за радиационной обстановкой в регионе
2019-06-06 Меню пылесоса Xiaomi в телеграмм
2019-06-06 Удобный просмотр данных сенсоров через телеграмм
2019-06-06 Просмотр камер через телеграмм
2019-06-06 Управление светом через телеграмм
2019-05-06 Список символов emoji
2019-04-17 Установка z-way на Ubuntu
2019-04-16 Решение проблемы ERROR 1040 (HY000): Too many connections
2018-09-09 Список домофонов с IP интерфейсом
2018-08-29 Список кондиционеров с wifi
2018-08-29 Список доступных к покупке IP колонок
2018-07-15 Интеграция датчика Mi flora plant к системе УД MAJORDOMO
2018-06-13 Полезные команды для работы с git
2018-05-27 преобразование html страниц в картинку и отправка в телеграмм
2018-05-24 Полезные sql запросы
2018-05-23 Создание образа nand памяти orange pi plus2
2018-05-16 Команды для работы с базой данных напрямую
2018-04-13 Индикаторы о заряде батареек без использования картинок
2018-04-06 Установка и настройка python на windows для работы систем распознавания
2018-04-05 Распознавание лиц подходящих к двери людей с помощью ip камеры и открытие двери, если нейросеть признала своего
2018-04-04 Управление таймерами выключения света
2018-04-04 Управление RGB контроллером на базе ESP8266
2018-04-03 Увеличение разрешения китайских камер на чипе hi3516c H264
2018-03-13 Использование колонки google home в качестве терминала Majordomo
2018-03-13 Установка и подключение rtl usb донгла для чтения датчиков температуры и кнопок 433 мгц
2018-03-13 Настройка брокера MQTT
2018-02-17 Проект "умная входная дверь"
2018-02-11 Отправка всех значений свойства объекта в телеграм
2017-12-21 получение адреса по GPS координатам
2017-12-21 получение / передача GPS координат сервису livegps.com
2017-12-21 чтение мгновенных данных U,P, I электросчетчика милур 104
2017-12-21 Получение координат с маяков и gsm сигнализаций starline-online.ru

Екатеринбург, Россия

На форуме: directman66