Модуль Noolite

Hasper
Сообщения: 2
Зарегистрирован: Вт сен 29, 2020 12:20 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Модуль Noolite

Сообщение Hasper » Пт июл 02, 2021 1:08 pm

Добрый день, коллеги.
подскажите как можно перенести привязанные устройства с одного mjd в другой.
Делаю сейчас перенос на новый сервер оборудования.. очень уж ен хочется сбрасывать все привязки и привязать снова.
по сути стик остался тот же.. нужно лишь как то через Sql или еще как то перенести девайсы с привязками на новый mjd
Аватара пользователя
xor
Сообщения: 1914
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 260 раз
Поблагодарили: 592 раза

Re: Модуль Noolite

Сообщение xor » Пт июл 02, 2021 5:12 pm

Hasper писал(а):
Пт июл 02, 2021 1:08 pm
Добрый день, коллеги.
подскажите как можно перенести привязанные устройства с одного mjd в другой.
Делаю сейчас перенос на новый сервер оборудования.. очень уж ен хочется сбрасывать все привязки и привязать снова.
по сути стик остался тот же.. нужно лишь как то через Sql или еще как то перенести девайсы с привязками на новый mjd
таблицы с noo в имени перенести + объекты, ссылающиеся/привязанные должны быть соответственные. или просто на новом сервере восстановиться из архива со старого
Hasper
Сообщения: 2
Зарегистрирован: Вт сен 29, 2020 12:20 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Модуль Noolite

Сообщение Hasper » Пн июл 05, 2021 10:19 am

xor писал(а):
Пт июл 02, 2021 5:12 pm
Hasper писал(а):
Пт июл 02, 2021 1:08 pm
Добрый день, коллеги.
подскажите как можно перенести привязанные устройства с одного mjd в другой.
Делаю сейчас перенос на новый сервер оборудования.. очень уж ен хочется сбрасывать все привязки и привязать снова.
по сути стик остался тот же.. нужно лишь как то через Sql или еще как то перенести девайсы с привязками на новый mjd
таблицы с noo в имени перенести + объекты, ссылающиеся/привязанные должны быть соответственные. или просто на новом сервере восстановиться из архива со старого
Да спасибо.. перенес таблицы. все завелось
sashmen
Сообщения: 25
Зарегистрирован: Ср ноя 05, 2014 11:21 pm
Благодарил (а): 19 раз
Поблагодарили: 3 раза

Re: Модуль Noolite

Сообщение sashmen » Пн авг 16, 2021 5:38 pm

Добрый день, коллеги.
Подскажите как обновлять статус в SRF-10-1000 через mtrf-64-usb
Если делать опрос по одному каналу то вроде работает
Screenshot_11.png
Screenshot_11.png (18.7 КБ) 1721 просмотр
Screenshot_1.png
Screenshot_1.png (40.35 КБ) 1721 просмотр
Но если сделать опрос по каждому каналу каждые 3 секунды, то происходит перебивание запросов и статус по каналам не возвращается.
Так же есть проблема с отправкой нескольких команд, нужна задержка между отправкой на устройство SRF-10-1000.
Как можно реализовать последовательный опрос каналов? Может есть команда опроса сразу всех каналов? Как реализовать задержку?
Последний раз редактировалось sashmen Вт авг 31, 2021 10:28 am, всего редактировалось 2 раза.
Сервер на raspberry pi Noolite SRF-10-1000, PT111, PU-411, mtrf-64-usb
Connect
max37online
Сообщения: 32
Зарегистрирован: Ср сен 21, 2016 9:03 am
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Re: Модуль Noolite

Сообщение max37online » Ср авг 25, 2021 4:44 pm

Добрый день всем!

Подскажите пожалуйста (лучше из личного опыта), насколько полноценно модуль работает с PRF-64 через Ethernet gate/HTTP-gate?
Интересует все: Noolite, Noolite-F, датчики...

Заранее спасибо!
Eugene
Сообщения: 8
Зарегистрирован: Сб июн 25, 2022 8:14 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Модуль Noolite

Сообщение Eugene » Чт июл 28, 2022 7:56 pm

Доброго времени всем!

не могу разобраться. Установил плагин, приложение noolite под linux/
Из-под командной строки "/usr/local/bin/noolite -api -sw_ch 1" - отлично работает, устройства связываются и всё переключает.
В mjdm настроил всё по инструкции, выбрав вариант "linux api", добавил устройство и связал его в плагине. Свойства успешно меняются любыми методами (и по кнопке, и просто задав принудительно статус 1/0), но реле никак не реагирует. Что я делаю не так?
2022-07-28_195505.png
2022-07-28_195505.png (21.56 КБ) 474 просмотра
2022-07-28_195602.png
2022-07-28_195602.png (6.87 КБ) 474 просмотра
Eugene
Сообщения: 8
Зарегистрирован: Сб июн 25, 2022 8:14 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Модуль Noolite

Сообщение Eugene » Сб авг 06, 2022 10:01 am

Традиционно. Сам спросил, - сам отвечу.

1. добавить пользователя "www-data" в группу "dialout", чтобы появились права записи в USB;
2. файл "noolite.class.php" откорреrтировать так, чтобы итоговая команда формировалась в соответствии с описанием команд приложения "noolite". В приведённом классе всё заточено на систему команд "noolitepc".

строка 661 исходная:

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

} elseif ($this->config['API_TYPE'] == 'linux') {
            $cmdline = 'sudo noolitepc ' . $api_command;
        }
должна получиться такой:

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

} elseif ($this->config['API_TYPE'] == 'linux') {
            $cmdline = '/usr/local/bin/noolite -api ' . $api_command;
        }
3. осталась проблема со вторым условием в классе, где проверяется, выполнялась ли недавно какая-либо команда, и если выполнялась, - то добавить паузу перед выполнением следующей и отправить в очередь. На ней происходит неясный затык и всё превращается в бесконечную "мигалку" со случайным интервалом. На неё уходят все ресурсы и система зависает.

вот это место:

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

 } 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);
            }
Аватара пользователя
xor
Сообщения: 1914
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 260 раз
Поблагодарили: 592 раза

Re: Модуль Noolite

Сообщение xor » Сб авг 06, 2022 10:42 am

Eugene писал(а):
Сб авг 06, 2022 10:01 am
3. осталась проблема со вторым условием в классе, где проверяется, выполнялась ли недавно какая-либо команда, и если выполнялась, - то добавить паузу перед выполнением следующей и отправить в очередь. На ней происходит неясный затык и всё превращается в бесконечную "мигалку" со случайным интервалом. На неё уходят все ресурсы и система зависает.

вот это место:

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

 } 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);
            }
Что-то было такое, кажется. Из-за отсутствия поддержки новых термостатов от ноо и непонятного поведения отказался от модуля и ноо у меня под виндой работает через скрипт и свой цикл. С точностью до кода это решение вам не подойдёт, но, может, даст идею. Переписал цикл ноо так - все команды к ноо закидываются в очередь - стек редиса, а цикл забирает из стека команды и пуляет их с небольшой задержкой 0,4 с между ними

вот фрагмент цикла:

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

$cycleVarName='ThisComputer.'.str_replace('.php', '', basename(__FILE__)).'Run';
saveToCache("MJD:$cycleVarName", time());
echo date("H:i:s") . " running " . basename(__FILE__) . PHP_EOL;
$redis = new Redis();
$redis->pconnect('127.0.0.1','6500');
$cmdline = 'c:/_majordomo/apps/noo/nooLiteF.exe api ';
while (1) {

	if ((time() - $checked_time) > 20) {
		$redis->close();
		$checked_time = time();
		$redis = new Redis();
		$redis->pconnect('127.0.0.1','6500');
		saveToCache("MJD:$cycleVarName", $checked_time);
	}

	 $payload = $redis->lpop('noo'); //возьмём из очереди
	 if ($payload === false) { 
		usleep(1000);	
	 }else{
		exec($cmdline.$payload);
		//DebMes(" !Noolite->: nooLiteF.exe api " . $payload, 'noolite');			
	}
	if (isRebootRequired() || IsSet($_GET['onetime'])) {
	   $db->Disconnect();
       exit;
	}
	usleep(400000);
}
а вот запись в очередь:

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

/*
работает совместно с циклом опроса очереди cycle_redis_que.php
помещает все приходящие команды в очередь noo 
sendNooAPICmd("2 0 0 4 2 0 0 0 0 0 00000000 1");
*/
 function sendNooAPICmd($api_command,$noo='',$source='')
    {   //debmes('sendNooAPICmd '.$api_command.' src='.$source,'sendNooAPICmd');
        if ($api_command) {
			$redis = new Redis();
			$redis->connect('127.0.0.1','6500');
		  	$redis->rpush('noo',$api_command);
			$redis->close();
		
        }
    }
Eugene
Сообщения: 8
Зарегистрирован: Сб июн 25, 2022 8:14 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Модуль Noolite

Сообщение Eugene » Чт авг 11, 2022 9:35 pm

Спасибо за идею конечно, но уж как-то заморочно.
Я пока убрал вообще запихивание в таймер. У меня нет нужды в обратной связи, пока так работает, - и хорошо.
Аватара пользователя
xor
Сообщения: 1914
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 260 раз
Поблагодарили: 592 раза

Re: Модуль Noolite

Сообщение xor » Пт авг 12, 2022 10:42 am

Eugene писал(а):
Чт авг 11, 2022 9:35 pm
Спасибо за идею конечно, но уж как-то заморочно.
Я пока убрал вообще запихивание в таймер. У меня нет нужды в обратной связи, пока так работает, - и хорошо.
а работа без задержек, вроде, не гарантируется свистками ноо. они об этом в доках на свистки пишут(
Ответить