Управление Алисой

Я связывал, а в чем у вас трудность?

Не меняет цвет с сайта яндекс, не могли бы описать процесс

Не совсем понял суть. Не могли бы подробнее описать проблему: что вы делаете, что ожидаете получить, что получаете вместо этого?

Например:
Я подключил диммер к контроллеру, настроил Алису, написал промежуточное правило для конвертирования хекса в 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);
  }
});

Не срабатывает, что то не так. Не подскажите? Не передает новое значение из case

Поставьте перед 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;

Разобрался, что делает Ваш код. Спасибо!

1 Like

Да, если строка - тогда надо (возможно сначала в целое преобразовать. Да, сейчас увидел что комментарии не скопировал к коду. Моя вина. В общем - для истории. Берем присланное “целое” (или из строки типа ‘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

Все дальнейшие вопросы лучше задавайте в профильном чате

1 Like