Страница 17 из 19

Re: Модуль Noolite

Добавлено: Пт мар 01, 2019 7:48 pm
crazy_russian_bear
ilvas писал(а):
Ср фев 27, 2019 2:48 pm
crazy_russian_bear писал(а):
Сб сен 22, 2018 8:24 pm
У меня тоже мдм стоит на малине. Все ок работает. От ноолайт у меня MTR64 UART. Силовой блок я к нему подключил - все замечательно управляется. ...
Как Вы это сделали, дружище? Куда глянули? Ни в ветке форума, ни на видео по ноолайту про MTR64 UART ни слова.
И в коннекте не могу достучаться с простой просьбой настроить такую комбинацию.
Я подключал через переходник USB-UART. В настройках модуля выбираете /dev/ttyUSB0

Re: Модуль Noolite

Добавлено: Ср апр 10, 2019 8:03 pm
Дмитрий Иванов
Всем привет!
Пособирал по данному модулю баги и прежде чем запостить в коннект Сергею, решил описать их здесь, что бы найти (или не найти) подтверждение у других пользователей модуля.
Исходные данные:
Система установлена на Linux Debian 9, платформа PC Celeron n3050 2 ядра.
Обнаруженные баги:
1. MTRF в режиме приема имеет 64 канала - от 0-63. Под windows в программе nooLite ONE каналы нумеруются от 1 до 64, а в командах передается от 0 до 63. В МажорДоМо под линукс как нумеруются каналы так и передаются команды, но привязать к нулевой ячейке ничего не возможно. Даже привязав к этой ячейке пульт в программе nooLite ONE в мажордомо ни какой реакции, хотя светодиод на приемнике мигает. Модуль ноолайт просто не интерпритирует нулевую ячейку приемника. В итоге, для подключения пультов(выключателей) и датчиков можно пользоваться только каналами с 1-го по 63й. При работе с силовыми блоками данной проблемы не возникает - нулевой канал на передачу работает.

2. Трансивер MTRF предполагает привязку 64 устройств по протоколу Noolite и 64 устройств по протоколу Noolite-F. Таким образом можно привязать 64 выключателя (Noolite) и 64 силовых блока (Noolite-F). Проблема в том, что данный сценарий можно реализовать, только если сначала создать в модуле ноолайт каналы приёмников, привязав к ним устройства, а только потом силовые блоки. Так как если сначала создать силовой блок (F), например на первом канале, то потом на первый канал невозможно будет привязать радиопульт. Просто не появляется поле с данными, хотя на самом деле все привязалось.

3. (не до конца проверено) Радиопульты PK315 могут работать как в режиме switch, когда при нажатии и последующем отпускании кнопки отправляется команда Switch, так и в режиме on/off когда при нажатии кнопки подается команда on, а при размыкании off (для работы с обычными выключателями не имеющих возвратных пружин). Так вот, при связке PK315, работающем в режиме on/off и SUF-1-300 (в режиме F), при привязке их на один номер канала в МД столкнулся с проблемой: При привязке силового блока и радиопульта к объекту MD через свойство status, возник бесконечный цикл приема-передачи на привязанном канале. Однако, если пульт перевести в режим switch (соответсвенно кнопка пульта вызывает метод switch), то данная проблема не возникает (оба устройства на одном номере канала). Предположительно, если устройства на разных номерах каналов, то такая проблема не возникает (так и не проверил, оставил в режиме switch)...

4.Высокая загрузка CPU циклом noolite - 18-20 процентов. Надо отметить, что у меня довольно много устройств ноолайт (около 30 каналов на приём занято радиопультами/датчиками и 22 канала на передачу занято силовыми блоками).
Cycle_noolite.php.jpg
Cycle_noolite.php.jpg (114.39 КБ) 7225 просмотров
Если у кого есть мысли мысли по данным вопросам - пишите.
Спасибо!

Re: Модуль Noolite

Добавлено: Ср июл 10, 2019 7:10 am
I_I_Imonder
Друзья, поведайте кто как управляет RGB силовым блоком? включить выключить получается, а вот остальные плюшки нет(
Алиса на линуксе

Re: Модуль Noolite

Добавлено: Вс авг 25, 2019 8:36 pm
Krinopotam
Добрый день!

Поднял Majordomo на Ubuntu 18.04+NginX.
Подключил MTRF-64-USB и настроил плагин ноолайт как Serial port:/dev/ttyUSB0.
У меня все силовые блоки серии F, плюс 10-ти канальный силовой блок SRF-10-1000.
Все работает.
Но заметил особенность - задержка примерно в 5 секунд до исполнения следующей команды после предыдущей.
Например, включаем лампочку - она включается моментально. Но если сразу же ее попытаться выключить или попробовать включить другую, то реакция будет только через 5 секунд.
Такое ощущение, что где-то в модуле стоит принудительная задержка после каждой команды.
На других устройствах, управляемых другими модулями такого не наблюдается. Под Windows с nooLite One такого поведения тоже не было.

Можно ли как-то убрать или уменьшить данную задержку между командами?

Re: Модуль Noolite

Добавлено: Пн авг 26, 2019 12:02 am
xor
Krinopotam писал(а):
Вс авг 25, 2019 8:36 pm
Добрый день!

Поднял Majordomo на Ubuntu 18.04+NginX.
Подключил MTRF-64-USB и настроил плагин ноолайт как Serial port:/dev/ttyUSB0.
У меня все силовые блоки серии F, плюс 10-ти канальный силовой блок SRF-10-1000.
Все работает.
Но заметил особенность - задержка примерно в 5 секунд до исполнения следующей команды после предыдущей.
Например, включаем лампочку - она включается моментально. Но если сразу же ее попытаться выключить или попробовать включить другую, то реакция будет только через 5 секунд.
Такое ощущение, что где-то в модуле стоит принудительная задержка после каждой команды.
На других устройствах, управляемых другими модулями такого не наблюдается. Под Windows с nooLite One такого поведения тоже не было.

Можно ли как-то убрать или уменьшить данную задержку между командами?
есть в модуле функция sendAPICommand

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

        if ($cmdline) {
            $latest_command_sent = (int)getGlobal('ThisComputer.LatestNooliteCommand');
            $diff = $latest_command_sent - time();
            if ($diff < 0) {
                DebMes("Noolite instant cmd: " . $cmdline, 'noolite');
                setGlobal('ThisComputer.LatestNooliteCommand', time(), 0, $this->name);
                exec($cmdline);
            } else {
                $diff = $diff + 1;
                DebMes("Noolite delayed (" . ($diff) . ") cmd: " . $cmdline, 'noolite');
                setGlobal('ThisComputer.LatestNooliteCommand', time() + $diff, 0, $this->name);
                setTimeOut('noocommand' . md5($cmdline), 'exec(\'' . $cmdline . '\');', $diff);
            }
        }
там задержка есть в 1 с, может, у вас ещё набегает, в логе ноо видите записи Noolite delayed ? Может, у вас поллинг по всем устройствам ещё стоит?
а если у вас апи сериал, то

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

elseif ($this->config['API_TYPE'] == 'serial') {
            addToOperationsQueue('noolite_queue','command',$api_command);
, то вот с этой очередью разбирайтесь

Re: Модуль Noolite

Добавлено: Вт авг 27, 2019 9:45 pm
Krinopotam
Krinopotam писал(а):
Вс авг 25, 2019 8:36 pm
Добрый день!

Поднял Majordomo на Ubuntu 18.04+NginX.
Подключил MTRF-64-USB и настроил плагин ноолайт как Serial port:/dev/ttyUSB0.
У меня все силовые блоки серии F, плюс 10-ти канальный силовой блок SRF-10-1000.
Все работает.
Но заметил особенность - задержка примерно в 5 секунд до исполнения следующей команды после предыдущей.
Например, включаем лампочку - она включается моментально. Но если сразу же ее попытаться выключить или попробовать включить другую, то реакция будет только через 5 секунд.
Такое ощущение, что где-то в модуле стоит принудительная задержка после каждой команды.
На других устройствах, управляемых другими модулями такого не наблюдается. Под Windows с nooLite One такого поведения тоже не было.

Можно ли как-то убрать или уменьшить данную задержку между командами?
Разобрался.
В цикле cycle_noolite.php небольшой баг.
В нем присутствует следующий код:

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

        while (1) {
            // CHECKPORT
            $r = fread($fp, 1);
            $ch = binaryToString($r);
            ...
            ...
            if ($ch == 'ad') { 
            	//блок условия 1 - чтение старшего байта (заголовка)
                $in = $ch;
                $readInProgress = 1;
                $readStarted = time();
            } elseif ($ch == 'ae') { 
            	//блок условия 2 - чтение младшего байта ("хвоста")
                $errors=0;
                $line = $in . $ch;
                echo date('H:i:s') . " In: [" . $line . "];\n";
                $data = HexStringToArray($line);
                $readInProgress = 0;
                ...
                ...
            } else { 
            	//блок условия 3 - чтение остальных байтов
                $in .= $ch;
                $readInProgress = 2;
            }

            if ($readInProgress > 0 && (time() - $readStarted) > 3) {
                //read not finished within 3 seconds for some reason
                $readInProgress = 0;
            }
Суть его в том, что он последовательно считывает блок значений по одному байту с помощью fread($fp, 1) и склеивает их в одну строку. Причем строка начинается со старшего байта 'ad', а заканчивается младшим байтом 'ae', а все остальные байты помещаются между этими значениями.
Во тут и стоит обратить внимание на переменную $readInProgress, которая означает текущий этап считывания байтов.
Когда считался заголовок в виде 'ad', то $readInProgress = 1. Если считались любые другие промежуточные байты, то $readInProgress = 2. А если считался хвостовой байт 'ae', то $readInProgress = 0, что означает, что чтение блока закончилось. Пока $readInProgress>0 (то есть пока блок не прочитан полностью), или пока не будет таймаута >3 секунд, исполнение кода не пойдет дальше. Но нюанс в том, что чтение всех прочих байт происходит вне зависимости, был ли уже прочтен полностью блок или нет (блок условия 3). Даже если блок уже полностью прочтен и читать больше нечего (возвращается пустой результат), все равно срабатывает блок условия 3 и переменная $readInProgress становится равна 2. Соответственно код не пускает исполнение дальше и продолжает пытаться читать пустой поток, пока не произойдет таймаут больше 3 секунд.

Чтобы исправить, можно добавить переменную, которая бы хранила состояние, начался ли читаться блок и если он прочелся полностью, то не пытаемся обрабатывать пустой поток.
Например так:

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

        $sequenceStart = false; //новая переменная
        while (1) {
            // CHECKPORT
            $r = fread($fp, 1);
            $ch = binaryToString($r);
            ...
            ...

            if ($ch == 'ad') {
                $in = $ch;
                $readInProgress = 1;
                $readStarted = time();
                $sequenceStart = true; //показываем, что началось чтение блока байт из потока
            } elseif ($ch == 'ae') {
                $errors=0;
                $line = $in . $ch;
                echo date('H:i:s') . " In: [" . $line . "];\n";
                $data = HexStringToArray($line);
                $readInProgress = 0;
                ...
                ...
                ...                                
                $sequenceStart = false ; //показываем, что чтение блока байт из потока завершено
            } else {
                if ($sequenceStart) { //принимаем результаты чтения из потока только тогда, когда чтение бока еще не завершено
                    $in .= $ch;
                    $readInProgress = 2;
                }
            }

            if ($readInProgress > 0 && (time() - $readStarted) > 3) {
                //read not finished within 3 seconds for some reason
                $readInProgress = 0;
            }
Теперь включение света на моей железке с Ubintu+Nginx+PHP-FPM срабатывает мгновенно.

Re: Модуль Noolite

Добавлено: Чт авг 29, 2019 1:29 am
xor
Krinopotam писал(а):
Вт авг 27, 2019 9:45 pm
...
Теперь включение света на моей железке с Ubintu+Nginx+PHP-FPM срабатывает мгновенно.
оформите как баг в коннекте, там, кмк, быстрее правят https://connect.smartliving.ru/ideas.ht ... type=&tab=

Re: Модуль Noolite

Добавлено: Вт мар 03, 2020 11:40 pm
eaten
Добрый день!

Есть ли возможность изменить/дополнить текущий модуль noolite для mjdm, что бы модуль более правильно понимал пульты, которые работают в режиме 1-off/2-on, когда каждый из 4 каналов (для примера взят двуклавишный выключатель pb212(412), но такая же ситуация и для первой версии пультов) работают в режиме switch.

После привязки пульта к mjdm, в "данных" появляется 2 св-ва - "switch" (постоянная 1) и "bind" (постоянный 0), см. фото
Данные.jpg
Данные.jpg (28.95 КБ) 6134 просмотра
И что бы не нажимал - данные св-в не меняются.
Хотя, как я понимаю, должны быть св-ва на 4 канала с значением onn/off (1/0) с каждой кнопки (канала).

Пример из x-ray для такого типа пульта:
REQUEST: /ajax/noolite.html?serial=1&mode=1&answ=0&toggl=4&cell=60&cmd=4&fmt=0&d0=0&d1=0&d2=0&d3=0&id=00000000&crc=242

toggl и crc - всегда +1 идет.

Re: Модуль Noolite

Добавлено: Вт апр 21, 2020 5:54 pm
graffiti
Помогите подружить MTRF-64-USB и nooliterx

Задача - собирать данные температуры с датчиков noolite

Исходники брал здесь: https://github.com/olegart/noolite

Тоже не смог победить сборку на ubuntu 18.04 LTS - аналогичные ошибки, как у кого-то здесь были. По отдельности, если добавить -lusb -lusb-1.0 то собирается, но при попытке запустить nooliterx - "No compatible devices were found"
На CentOS 7.7.1908 собралось, но тоже "No compatible devices were found"
Модуль MTRF-64-USB в системе появляется, виден как /dev/ttyUSB0
lsusb говорит Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

Это уже 5 проект у меня на датчиках noolite, каждый раз были проблемы со сборкой nooliterx, но в конце-концов как-то получалось. Каждый раз думал - теперь точно не забуду, и вот опять.
Никак не получается подружить MTRF-64-USB и nooliterx, помогите, пожалуйста.

Re: Модуль Noolite

Добавлено: Пн май 25, 2020 12:38 pm
Serg159
Добрый день!

помогите разобраться с модулем noolite. Имеется стандартный образ под Raspberry, в нем создано несколько устройств noolite. К Raspberry через UART подключен модуль noolite. При попытке привязать устройство ничего не происходит, в лог файл ничего не пишется и файл date_noolite.log за текущий день отсутствует. При этом service noolite - online. Если нажать кнопку restart для сервиса, появляется лог файл и в нем записи:

11:54:45 0.59395700 Init string: stty -F /dev/ttyS0 cs8 9600 -icrnl -ixon -ixof$
11:54:45 0.61267800 Opening port /dev/ttyS0

при этом у меня есть рабочий прошлогодний образ. На том же оборудовании работает и привязка и управление устройствами.

Подскажите куда смотреть? в чем может быть причина?

Сергей.