Радио-управление nooLight

TiNNauR
Сообщения: 28
Зарегистрирован: Чт июн 30, 2016 5:58 pm
Благодарил (а): 18 раз
Поблагодарили: 0

Re: Радио-управление nooLight

Сообщение TiNNauR » Пн ноя 28, 2016 5:05 am

Доброе время суток всем участникам форума!
Помогите разобраться в чем проблема.
Свет НооЛайт. Пока есть два силовых блока. Один RGB-контроллер привязан на канал 1, и второй диммируемый привязан на канал 2. Если подавать команду
pi@raspberrypi:~ $ /usr/local/bin/noolitepc -api -off_ch 2
pi@raspberrypi:~ $ /usr/local/bin/noolitepc -api -off_ch 1
все работает, а также через МД
exec("noolitepc -api -on_ch 1"); при привязке этой строчки к кнопкам, а этой
exec('noolitepc -api -set_ch 1 '.$params['VALUE']); к слайдеру все прекрасно работает
Но, попробовал сделать разноцветный свет в коридоре, как упоминается в теме, и увы, не работает. Смотрел CONNECT(57)- msh555, и CONNECT(1)- SergeJey, скопировал все от туда, создал пока два объекта
NooLite_Objects.PNG
NooLite_Objects.PNG (25.48 КБ) 10795 просмотров
Свойства, методы, скопировал с выше указанных CONNECTов
Завел еще в УСТРОЙСТВАх в Noolite следующее:
Устройства NooLite.PNG
Устройства NooLite.PNG (30.55 КБ) 10795 просмотров
Данные такие:
NooLite_RGB_Данные.PNG
NooLite_RGB_Данные.PNG (33.24 КБ) 10795 просмотров
NooLite_Perimetr_Данные.PNG
NooLite_Perimetr_Данные.PNG (17.35 КБ) 10795 просмотров
Может я не совсем прав, но, я не понимаю как отправляется команда? Какому силовому блоку? В строчке exec("noolitepc -api -on_ch 1"); все понятно, блоку(каналу) №1, а вот если этой строчки нет, то….. не совсем понятно. Или объясните логику, где я делаю не так, или где еще нужно что-то добавить, ( свойства, объекты, и т.д.) Заранее спасибо!
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 139 раз
Контактная информация:

Re: Радио-управление nooLight

Сообщение ErmolenkoM » Пн ноя 28, 2016 8:21 am

TiNNauR писал(а): я не понимаю как отправляется команда? Какому силовому блоку? В строчке exec("noolitepc -api -on_ch 1"); все понятно, блоку(каналу) №1, а вот если этой строчки нет, то….. не совсем понятно. Или объясните логику, где я делаю не так, или где еще нужно что-то добавить, ( свойства, объекты, и т.д.) Заранее спасибо!
Приятно, когда кто-то смотрит твой коннект :-)
Первое. Какие бы ни были объекты и методы, конец всегда один: exec("noolitepc -api -on_ch 1");, ну или подобная команда. Поэтому городить огород из свойств и методов - преждевременно.
Сначала нужно убедиться что мы умеем устанавливать нужный цвет вручную из ПХП.
Я (msh555) и SergeJey используем разные драйвера, так что могу говорить только про свой. У меня так:

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

 
$cmdline='sleep 0.5; /usr/bin/noolitepc -api '.'-set_color_ch '.$this->getProperty("channel").' '.$r_value.' '.$g_value.' '.$b_value;
safe_exec($cmdline);
 
И что бы было понятно откуда это взялось: setColor зовет refresh, он зовет sendCommand(у класса NooLite)
За это сообщение автора ErmolenkoM поблагодарил:
TiNNauR (Ср ноя 30, 2016 6:57 am)
Рейтинг: 1.18%
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
sergejey
Site Admin
Сообщения: 4279
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1535 раз
Контактная информация:

Re: Радио-управление nooLight

Сообщение sergejey » Пн ноя 28, 2016 1:59 pm

У меня в коннекте довольно старый код -- постепенно перехожу на модуль Noolite, который доступен из маркета. В это модуле реализована поддержка как Windows, так и Linux-драйверов, плюс в нём не надо вызывать методы Refresh и вообще выделять отдельный класс под ноолайт-блоки. Для цвета там используется отдельная команда, совместимая по формату с селектором цвета для меню.
За это сообщение автора sergejey поблагодарил:
TiNNauR (Ср ноя 30, 2016 6:57 am)
Рейтинг: 1.18%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
TiNNauR
Сообщения: 28
Зарегистрирован: Чт июн 30, 2016 5:58 pm
Благодарил (а): 18 раз
Поблагодарили: 0

Re: Радио-управление nooLight

Сообщение TiNNauR » Ср ноя 30, 2016 6:41 am

Приятно, когда кто-то смотрит твой коннект :-)
Ха, у людей, кто придумал и создал МД, кто написал сам дрова на приемник под линуха, ….. стОит чему то поучиться. По крайней мере, посмотреть что они уже сделали, и как?, а уж потом, если не понятно, то задать пару вопросов.)
Но, так как сейчас я в контракте, и не всегда есть инет(до этого постарался скачать сайты http://majordomo.smartliving.ru и http://connect.smartliving.ru, на свой ноут, но скачалось не полностью, некоторые темы только на половину, так что не все могу прочитать ) то задать вопросы тоже не всегда получается.
Спасибо за ответ, воспользуюсь ситуацией пока есть инет и сразу задам следующий вопрос. Сори.
Вы пишите:
конец всегда один: exec("noolitepc -api -on_ch 1");
Это то я понимаю, как я и писал, если эту строчку вбивать в код на кнопку, ну или в сценарий, а потом выполнить этот сценарий, то все работает.
Но, к этому концу, видимо , моя система не приходит)))) и я вместе с ней)).
В итоге, на выходе подстановок всех переменных должна получиться именно такая строчка. И вот вопрос: Если рассмотреть мою строчку
pi@raspberrypi:~ $ /usr/local/bin/noolitepc -api -off_ch 1
и ту, что Вы прислали , как пример( она у меня тоже есть, это родительский метод всего класса NooLite, только она у меня такая:
$cmdline='sleep 0.5; /usr/bin/noolitepc -api '.$params['command'];
safe_exec($cmdline); )

Если я правильно понял, то:
скрипт1.PNG
скрипт1.PNG (17.01 КБ) 10739 просмотров
в строчку забиты переменные, они по очереди подставляются и в итоге получается, да, то, что Вы написали, но…по ходу, у меня получается, что все есть кроме указания канала( на рис. Какой именно канал). Вот где оно берется, от куда, как система подставляет это значение, или я его должен ей где-то указать?
Сначала нужно убедиться что мы умеем устанавливать нужный цвет вручную из ПХП.
Наверное, не умеем мы(((.
И что бы было понятно откуда это взялось: setColor зовет refresh, он зовет sendCommand(у класса NooLite)
От куда это взялось я то понял, поднимаясь вверх по методам к родительскому, а вот может нужно для RGB указать свой sendCommand?
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 139 раз
Контактная информация:

Re: Радио-управление nooLight

Сообщение ErmolenkoM » Ср ноя 30, 2016 7:16 am

TiNNauR писал(а): все есть кроме указания канала( на рис. Какой именно канал). Вот где оно берется, от куда, как система подставляет это значение, или я его должен ей где-то указать?
Эта функция возвращает значение свойства объекта

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

$this->getProperty("channel")
читать здесь:
http://majordomo.smartliving.ru/Main/Pr ... gFunctions
За это сообщение автора ErmolenkoM поблагодарил:
TiNNauR (Чт дек 01, 2016 6:41 am)
Рейтинг: 1.18%
aka msh555
Cubian на Cubietruck, Connect
TiNNauR
Сообщения: 28
Зарегистрирован: Чт июн 30, 2016 5:58 pm
Благодарил (а): 18 раз
Поблагодарили: 0

Re: Радио-управление nooLight

Сообщение TiNNauR » Чт дек 01, 2016 6:49 am

Я извиняюсь, но, еще раз здравствуйте!)))
Значится так, попробовал сделать такое : в меню управления сделал слайдер,настройки такие:
Настройки слайдера.PNG
Настройки слайдера.PNG (18.32 КБ) 10707 просмотров
на код слайдера вбил вот это, для проверки:
safe_exec(' /usr/local/bin/noolitepc -api -set_ch 1 '.$params['VALUE']);
результат – работает, меняет яркость.
Поменял строчку на :
safe_exec(' /usr/local/bin/noolitepc -api -set_ch' .$this->getProperty("channel")' '.$params['VALUE']);
результат-не работает, игрался с кавычками и пробелами, никак.
при этом в свойстве объекта указал канал 1
св-ва NooL_LivingRoom_RGB1.PNG
св-ва NooL_LivingRoom_RGB1.PNG (20.06 КБ) 10709 просмотров
Ну и ошибка
23:12:31 DEBUG [root]: Error menu item code: safe_exec(' /usr/local/bin/noolitepc -api -set_ch' .$this->getProperty("channel")' '.$params['VALUE']); (at /var/www/lib/general.class.php:553)
В какую сторону подскажите двигаться? Или я опять не правильно все понял? Если не работает вот это, то и остальное( цвет и т.д не будет работать). Заранее спасибо!
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 139 раз
Контактная информация:

Re: Радио-управление nooLight

Сообщение ErmolenkoM » Чт дек 01, 2016 7:23 am

TiNNauR писал(а): в меню управления сделал слайдер,настройки такие:
на код слайдера вбил вот это, для проверки:
safe_exec(' /usr/local/bin/noolitepc -api -set_ch 1 '.$params['VALUE']);
результат – работает, меняет яркость.
Поменял строчку на :
safe_exec(' /usr/local/bin/noolitepc -api -set_ch' .$this->getProperty("channel")' '.$params['VALUE']);

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

$this->getProperty("channel")
Эта штука работает только в коде методов объекта.

Для вызова из меню нужно использовать

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

gg('Имя_объекта.Имя_свойства'); 
За это сообщение автора ErmolenkoM поблагодарил:
TiNNauR (Пт дек 02, 2016 5:28 am)
Рейтинг: 1.18%
aka msh555
Cubian на Cubietruck, Connect
TiNNauR
Сообщения: 28
Зарегистрирован: Чт июн 30, 2016 5:58 pm
Благодарил (а): 18 раз
Поблагодарили: 0

Re: Радио-управление nooLight

Сообщение TiNNauR » Пт дек 02, 2016 5:43 am

Приветствую всех участников форума.
Опять обращаюсь за помощью. Наверное, уже надоел?))). Значит , так
Код:
$this->getProperty("channel")

Эта штука работает только в коде методов объекта.
Следовательно, для проверки: ставил команду say(); в каждом методе перед его кодом и потом в конце, чтоб убедиться в…
И что бы было понятно откуда это взялось: setColor зовет refresh, он зовет sendCommand(у класса NooLite)
…в этом. Все работает, вродь, как и должно. Всегда Алиса проговаривает фразу, и даже если строчка say(); в конце метода sendCommand. И, даже проговаривает каждый час( когда срабатывает скрипт проверки времени и изменения цвета). Но, цветовые часы как не работали, так и не работают. Посему, видимо я задаю не совсем корректно вопрос. Приведу пример( это как автомобиль – можно рассказывать часами о том, как тепловая энергия топлива преобразуется в механическую, дальше передается трансмиссией на колеса и дальше благодаря силе трения машина едет) это теория. Но, если не рассказать, что нужно открыть дверь, сесть за руль, вставить ключ зажигания, завести двигатель, проделать необходимые манипуляции с трансмиссией то, машина и дальше будет стоять на месте. Вот так и я стою на месте, теория есть, а что нужно сделать чтобы они заработали, не знаю, потому как пробую почти в слепую что-то делать. Там что-то менять, там что-то менять. И не знаю где правильно, потому что если бы знал что именно так, то уже б копался ПОЧЕМУ не работает. Почти уверен, что не работает именно эта строчка
$this->getProperty("channel"). не подставляет значение канала в .....как Вы уже писали - в конце должно быть это...
конец всегда один: exec("noolitepc -api -on_ch 1");, ну или подобная команда.
по видимому, в конце этого не получается((
Если можно, пожалуйста, помогите разобраться, опишите как настроить: и свойства объекта( может там что-то я не добавил, а для Вас это очевидные вещи). Может еще где какие настройки. В общем куда смотреть и что и как должно быть, чтобы они работали ( ну и вообще НооЛайт) через методы.
Типа:
1, должно быть в таких настройках такое.
2. Должно в св-вах быть это.
3. В объекте должны быть такие методы и свойства.
4. И т.д.
И , потом, еще, как и где проверить что это или что-то еще не работает.
Debug выдал следующее:
22:00:06 DEBUG [root]: Executing: sleep 0.5; /usr/local/bin/noolitepc -api -set_color_ch 100 (at /var/www/lib/general.class.php:553)
22:00:02 DEBUG [root]: Executing (exclusive): echo "включаю цветовые часы в коридоре" | RHVoice-test -p Anna+CLB (at /var/www/lib/general.class.php:553)

Заранее, большое спасибо!
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 139 раз
Контактная информация:

Re: Радио-управление nooLight

Сообщение ErmolenkoM » Пт дек 02, 2016 7:57 am

TiNNauR писал(а): Опять обращаюсь за помощью.
...
Учитесь отлаживать программу. Это полезный навык, наряду с программированием. В общих чертах: делим код на логические блоки, проверяем, что каждый блок работает как задумывалось. При необходимости, на время отладки упрощаем блоки, добавляем отладочную информацию. Таким образом ВСЕГДА можно конкретизировать ошибку и обычно этого достаточно для того что бы понять как ее исправить. Добавление отладочной информации позволяет решить две задачи: узнать что и в каком порядке выполняется(иногда вызов пра-родительских методов неочевиден) и второе - увидеть какие значения параметров и переменных используются и передаются. Проще всего отладочную инфу выводить так:

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

say('ИмяМетода_или_другие_понятные_слова а='.gg('блаблаобъект.а').' $peremennaya='.$peremennaya);
 
Ну и еще совет - старайтесь идти от простого к сложному. Сделайте ПРОСТО. Не нужны вам наследование и прочее. Создайте ОДИН класс. В нем один объект. Значения захардкодьте в метод. Когда заработает - будите вносить изменения. Это называется рефакторинг. А сейчас вы ленитесь пройти весь путь, и спрашиваете почему у вас не работает конечный результат. Мажордомо - это постоянный процесс кодинга, а не копирование к себе чужих скриптов.

Ну и в заключение.
Debug выдал следующее:
22:00:06 DEBUG [root]: Executing: sleep 0.5; /usr/local/bin/noolitepc -api -set_color_ch 100 (at /var/www/lib/general.class.php:553)
попробуйте в терминале выполнить /usr/local/bin/noolitepc -api -set_color_ch 100 скорее всего не заработает. Должно быть что-то типа

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

/usr/local/bin/noolitepc -api -set_color_ch 1 100 100 100

разберитесь почему нет канала и где еще 2 цвета. Отладка вам в помощь.

ну и попробуйте воспользоваться советом Сергея - используйте модуль.
За это сообщение автора ErmolenkoM поблагодарил:
TiNNauR (Сб дек 03, 2016 2:08 am)
Рейтинг: 1.18%
aka msh555
Cubian на Cubietruck, Connect
TiNNauR
Сообщения: 28
Зарегистрирован: Чт июн 30, 2016 5:58 pm
Благодарил (а): 18 раз
Поблагодарили: 0

Re: Радио-управление nooLight

Сообщение TiNNauR » Вт дек 06, 2016 5:33 am

Всем доброе время суток! Опять вопрос ко всем участникам форума.
Ну и еще совет - старайтесь идти от простого к сложному. Сделайте ПРОСТО. Не нужны вам наследование и прочее. Создайте ОДИН класс. В нем один объект. Значения захардкодьте в метод.
Вот как раз если захардкодить значения, то все получается. Одним словом, по-простому все работает, вот хотелось бы сделать что-то не простое, зачем тогда все эти возможности( я смотрел CONNECTы других людей и видел, что у них может Алиса) если их не использовать.
Учитесь отлаживать программу. Это полезный навык, наряду с программированием.
Прошу меня извинить, но я инженер-механик, и, некоторые вещи, которые очевидны для других людей, для меня - первый раз вижу и слышу( информатика была только в школе). Посему поступаю как умею, копирую к себе код и настройки других людей у которых работает, и потом методом тыка и изменения некоторых величин и переменных( до этого пытаюсь разобраться методом логики хоть что это за величины ) смотрю что меняется в итоге, и на что же они все таки влияют. Может этот путь не легкий и не совсем правильный, но по другому я не умею, к сожалению. Вот и приходится задавать , может , глупые вопросы. Сейчас ситуация такая
01:00:05 DEBUG [root]: Executing: sleep 0.5; /usr/local/bin/noolitepc -api -set_color_ch 1 (at /var/www/lib/general.class.php:553)
Еще раз спасибо!
Канал появился, а вот переменных значений цвета – нету. Заметил такое. Если в методе sendCommand добавить в начало такие строчки
$r_value =$this->getProperty("R");
$g_value =$this->getProperty("G");
$b_value =$this->getProperty("B");

т.е. поставить их перед этой строчкой
$cmdline='sleep 0.5; /usr/local/bin/noolitepc -api '.'-set_color_ch '.$this->getProperty("channel").' '.$r_value.' '.$g_value.' '.$b_value;
safe_exec($cmdline);

то в итоге ( значения R,G,B из свойства объекта присваиваются переменным $r_value, $g_value, $b_value ) выполняется команда и все работает. А если нет, то нет. Предполагаю, что , не знаю как точно выразиться, но: после последнего метода , в данном случае метода -refresh ( там эти переменные формируются таким путем
$r_value=round((255*$r/$sum)*$brightness/100);)
, значения переменных не держаться в памяти, и оно их ПРОСТО не подставляет, потому что в памяти нет значений переменных( может я не прав, может не совсем понимаю логику программирования и не правильно объяснил), но если в конце метода sendCommand написать следующее say($r_value,3); без принудительной подстановки переменных , то DEBUG пишет следующее:
01:00:10 DEBUG [root]: Executing (exclusive): echo "" | RHVoice-test -p Anna+CLB (at /var/www/lib/general.class.php:553) пустые кавычки, нету ничего.
А если принудительно присвоить переменным значения, то
20:27:01 DEBUG [root]: Executing: sleep 0.5; /usr/local/bin/noolitepc -api -set_color_ch 1 000 050 100 (at /var/www/lib/general.class.php:553)
20:26:58 DEBUG [root]: Executing (exclusive): echo "000" | RHVoice-test -p Anna+CLB (at /var/www/lib/general.class.php:553)
.цвет меняется, часы работают, все проговаривает.
Вот куда смотреть в этой уже ситуации, где копать? Заранее спасибо!).
И еще вопрос по поводу цвета, можно же обойтись и без такой затейливой процедуры формирования цвета
$r_value=round((255*$r/$sum)*$brightness/100);)
Просто изначально задать цвет в формате 000 000 000( имея ввиду значения от 0до 255). Цвет выбрать, на пример, в ворде или екселе, там есть цветовая шкала, она пишет значения цвета, типа так, выбрал цвет, посмотрел в значения RGB и вставил в метод check. А если через слайдер смотреть, то в настройках слайдера выбрать мин.зн.0 а макс.зн. 255
color1.PNG
color1.PNG (35.49 КБ) 10619 просмотров
color2.PNG
color2.PNG (39.25 КБ) 10619 просмотров
Ответить