Я связывал, а в чем у вас трудность?
Не меняет цвет с сайта яндекс, не могли бы описать процесс
Не совсем понял суть. Не могли бы подробнее описать проблему: что вы делаете, что ожидаете получить, что получаете вместо этого?
Например:
Я подключил диммер к контроллеру, настроил Алису, написал промежуточное правило для конвертирования хекса в rgb, полученные RGB значения шлю в топик диммера. Диммер меняет цвет.
Ожидаю: получить от Яндекса HEX,
Получаю: Яндекс присылает HSL
Не могли бы Вы предоставить код правила, я понял в чем проблема.
Мы одно и то же обсуждаем:
Может быть у Вас есть пример где то в базе знаний как это реализовать? Подскажите пожалуйста
Вот сейчас для пожего вопроса набросал скрипт:
Можно использовать функцию оттуда для установки строки из трех целых.
С разложением в RGB справитесь?
Спасибо, да
var rule_RGB_device_light_lounge_color = defineRule('RGB_device_light_lounge_color', { whenChanged: 'light_lounge/Цвет', then: function (newValue, devName, cellName){ var timer_loc = null; switch(newValue){ //красный case 16714250 : newValue = '255;0;0'; break; //изумрудный case 16729907 : newValue = '255;127;80'; break; //оранжевый case 16727040 : newValue = '255;127;0'; break; //салатовый case 13303562 : newValue = '153;255;153'; break; //желтый case 16740362 : newValue = '255;255;0'; break; //зеленый timer_loc = setTimeout(function(){ if (newValue != '0;0;0'){ dev['light_lounge/Цвет'] = newValue; dev['light_RGB/Цвет над фартуком'] = newValue; dev['light_RGB/Цвет над телевизором'] = newValue; dev['light_lounge/Подсветка в гостиной'] = true; initColorRGB('light_lounge/Цвет'); } else { dev['light_lounge/Цвет'] = newValue; dev['light_RGB/Цвет над фартуком'] = '0;0;0'; dev['light_RGB/newValue'] = '0;0;0'; dev['light_lounge/Подсветка в гостиной'] = false; } },500); } });
Поставьте перед switch вывод в лог значения и типа newValue. Очень даже можнет быть что это строка.
А зачем вообще case?
Ну проще ж можно:
//01_14_test_01.js
var newValue = 16714250;
//var newValue = 255;
strHexValue = newValue.toString(16)
log.info ("strHexValue=",strHexValue)
while (strHexValue.length<6){
strHexValue="0"+strHexValue;
}
log.info ("full strHexValue=",strHexValue)
intR =parseInt("0x"+strHexValue.slice(0, 2))
intG =parseInt("0x"+strHexValue.slice(2, 5))
intB =parseInt("0x"+strHexValue.slice(4, 6))
outStringRGB = intR.toString()+";"+intG.toString()+";"+intB.toString()
log.info ("outStringRGB=",outStringRGB)
Это строка. В Вашем коде надо что то править? В своем я в кавычки взял
case ‘16714250’ :
newValue = ‘255;0;0’;
break;
Разобрался, что делает Ваш код. Спасибо!
Да, если строка - тогда надо (возможно сначала в целое преобразовать. Да, сейчас увидел что комментарии не скопировал к коду. Моя вина. В общем - для истории. Берем присланное “целое” (или из строки типа ‘16714250’ преобразуем). Переводим в строку шестнадцатеричного вида, потом эту строку при необходимости дополняем ведущими “0” до 6 символов.
Получившуюся строку “делим” на три, по два символа. Уже из - преобразуем в десятичное целое, а его в “строчный” вид.
Case используем потому что, есть нюанс возможно не хватает знаний. Описываю:
Кнопкой подключенной к di dr 16 я включаю последний цвет из 10 описанных в коде. При удержании я перебираю эти 10 цветов (для удобства). А теперь с Вашим кодом у меня проблема возникает, я с яндекса передал цвет(либо выбрал в веб интерфейсе wirenboard), он у меня не описан например в 10 начальных и кнопка не может включить, так как не знает что включать.
Вопрос, может была такая реализация: Кнопка при удержании перебирает основные 10 цветов, а при однократном нажатии включает последний любой цвет?
Да, конечно. Сохраните эти “цвета” в массиве, например
mColours = ["165543", "022222", "333333"]; //массив строк с цветами
var curColour = mColours.length; // Переменная, указывающая на текущий цвет. Сразу установим ее в длину массива чтоы при первом вызове - срабатывал "нулевой" цвет
log.info("Первый элемент:",mColours[0])
log.info("второй элемент:",mColours[1])
function setcolourfromlist(){
curColour++; //Инкремент переменной
if (curColour > mColours.length){ //текущее значение переменной больше длины массива
curColour = 0; // Переходим к нулевому
}
// тут устанавливаем новый цвет вызовом вашей функции. Новый цвет передаем Colours[curColour]
//Добавьте вызов функции установки
}
И вызывайте функцию при “долгом” удержании кнопки.
При регистрации плагин требует oAuthToken. Где его взять. Или скажем по другому: как правильно настроить плагин?
При регистрации где?
Подозреваю, что вы не зарегистрировали модуль на самом сервисе NodeRed Home
Смотрите здесь:
https://support.wirenboard.com/t/re-upravlenie-alisoj/6815
Все дальнейшие вопросы лучше задавайте в профильном чате