[Модуль] Устройства Bluetooth (bluetoothdevices)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

grifindorec
Сообщения: 72
Зарегистрирован: Вт фев 02, 2021 12:54 pm
Благодарил (а): 18 раз
Поблагодарили: 6 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение grifindorec » Вс мар 28, 2021 7:45 pm

Witcherus писал(а):
Сб мар 27, 2021 11:09 pm
Уже неделю не могу разобраться с причиной постоянного падения цикла.
СпойлерПоказать

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

21:05:02 0.19947600 Adding cycle_bluetoothdevices to auto-recovery list
21:04:31 0.40131200 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
21:04:03 0.72582600 Thread closed: cycle_bluetoothdevices
21:04:02 0.70239800 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
21:04:02 0.70019700 Adding cycle_bluetoothdevices to auto-recovery list
21:04:01 0.67580100 Result:
21:04:01 0.66368400 Executing: kill -9 19956
21:04:01 0.66345700 Closing thread 19956 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
21:04:01 0.66305900 Force closing service cycle_bluetoothdevices (id: 27)
21:04:01 0.63205500 Got control command 'restart' for cycle_bluetoothdevices
21:04:00 0.61583100 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 20:33:59). Need to recovery
20:25:14 0.29346600 Adding cycle_bluetoothdevices to auto-recovery list
20:24:43 0.50417000 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
20:24:15 0.81623000 Thread closed: cycle_bluetoothdevices
20:24:14 0.79227200 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
20:24:14 0.79001900 Adding cycle_bluetoothdevices to auto-recovery list
20:24:13 0.76475900 Result:
20:24:13 0.75253900 Executing: kill -9 17485
20:24:13 0.75231800 Closing thread 17485 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
20:24:13 0.75194000 Force closing service cycle_bluetoothdevices (id: 26)
20:24:13 0.72337100 Got control command 'restart' for cycle_bluetoothdevices
20:24:12 0.70727400 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 19:54:11). Need to recovery
19:46:29 0.40840700 Adding cycle_bluetoothdevices to auto-recovery list
19:45:58 0.57874700 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
19:45:30 0.82863800 Thread closed: cycle_bluetoothdevices
19:45:29 0.80497500 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
19:45:29 0.80276000 Adding cycle_bluetoothdevices to auto-recovery list
19:45:28 0.77771000 Result:
19:45:28 0.76570700 Executing: kill -9 14631
19:45:28 0.76547500 Closing thread 14631 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
19:45:28 0.76509200 Force closing service cycle_bluetoothdevices (id: 25)
19:45:28 0.73730000 Got control command 'restart' for cycle_bluetoothdevices
19:45:27 0.72194900 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 19:15:26). Need to recovery
19:04:37 0.78281500 Adding cycle_bluetoothdevices to auto-recovery list
19:04:06 0.95001200 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
19:03:38 0.26312000 Thread closed: cycle_bluetoothdevices
19:03:37 0.23960000 Adding cycle_bluetoothdevices to auto-recovery list
19:03:37 0.24180700 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
19:03:36 0.21511900 Result:
19:03:36 0.20295700 Executing: kill -9 12005
19:03:36 0.20270900 Closing thread 12005 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
19:03:36 0.20223900 Force closing service cycle_bluetoothdevices (id: 24)
19:03:36 0.17474100 Got control command 'restart' for cycle_bluetoothdevices
19:03:35 0.15955800 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 18:33:34). Need to recovery
18:24:30 0.82449000 Adding cycle_bluetoothdevices to auto-recovery list
1) Прописано www-data ALL = (ALL) NOPASSWD:ALL в visudo
2) Параметры настроены на Сканирование радиоэфира:
60
300
-1

Логов модуль не пишет и не могу понять первопричину падения.

Команда sudo -u www-data l2ping 30:22:00:00:45:25 -c1 -f не проходила даже с измененным visudo.
Изменение прав - chmod -s на hciconfig и l2ping команду l2ping пропустили, но модуль падает все равно постоянно.
Переопределял права на каталоги из www/ пробовал изменять код модуля в приближении с логикой BLEtool (который работает без сбоев)/ обновлял-удалял-переустанавливал модуль/ пробовал разные bluethooth свистки... Ничего не помогло.

Идеи закончились, что может быть еще причиной постоянной остановки цикла с выводом следующей ошибки?

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

cycle_bluetoothdevices
Backtrace:
#0 /var/www/cycle.php(370): registerError('cycle_hang', 'cycle_bluetooth...')
#1 {main}

Если вдруг найдете решение, расскажите пожалуйста, у меня тоже постоянно падает цикл, причем в самые нужные моменты.
grifindorec
Сообщения: 72
Зарегистрирован: Вт фев 02, 2021 12:54 pm
Благодарил (а): 18 раз
Поблагодарили: 6 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение grifindorec » Пн мар 29, 2021 6:57 pm

Witcherus писал(а):
Сб мар 27, 2021 11:09 pm
Уже неделю не могу разобраться с причиной постоянного падения цикла.
СпойлерПоказать

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

21:05:02 0.19947600 Adding cycle_bluetoothdevices to auto-recovery list
21:04:31 0.40131200 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
21:04:03 0.72582600 Thread closed: cycle_bluetoothdevices
21:04:02 0.70239800 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
21:04:02 0.70019700 Adding cycle_bluetoothdevices to auto-recovery list
21:04:01 0.67580100 Result:
21:04:01 0.66368400 Executing: kill -9 19956
21:04:01 0.66345700 Closing thread 19956 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
21:04:01 0.66305900 Force closing service cycle_bluetoothdevices (id: 27)
21:04:01 0.63205500 Got control command 'restart' for cycle_bluetoothdevices
21:04:00 0.61583100 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 20:33:59). Need to recovery
20:25:14 0.29346600 Adding cycle_bluetoothdevices to auto-recovery list
20:24:43 0.50417000 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
20:24:15 0.81623000 Thread closed: cycle_bluetoothdevices
20:24:14 0.79227200 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
20:24:14 0.79001900 Adding cycle_bluetoothdevices to auto-recovery list
20:24:13 0.76475900 Result:
20:24:13 0.75253900 Executing: kill -9 17485
20:24:13 0.75231800 Closing thread 17485 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
20:24:13 0.75194000 Force closing service cycle_bluetoothdevices (id: 26)
20:24:13 0.72337100 Got control command 'restart' for cycle_bluetoothdevices
20:24:12 0.70727400 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 19:54:11). Need to recovery
19:46:29 0.40840700 Adding cycle_bluetoothdevices to auto-recovery list
19:45:58 0.57874700 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
19:45:30 0.82863800 Thread closed: cycle_bluetoothdevices
19:45:29 0.80497500 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
19:45:29 0.80276000 Adding cycle_bluetoothdevices to auto-recovery list
19:45:28 0.77771000 Result:
19:45:28 0.76570700 Executing: kill -9 14631
19:45:28 0.76547500 Closing thread 14631 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
19:45:28 0.76509200 Force closing service cycle_bluetoothdevices (id: 25)
19:45:28 0.73730000 Got control command 'restart' for cycle_bluetoothdevices
19:45:27 0.72194900 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 19:15:26). Need to recovery
19:04:37 0.78281500 Adding cycle_bluetoothdevices to auto-recovery list
19:04:06 0.95001200 Starting service cycle_bluetoothdevices (./scripts/cycle_bluetoothdevices.php)
19:03:38 0.26312000 Thread closed: cycle_bluetoothdevices
19:03:37 0.23960000 Adding cycle_bluetoothdevices to auto-recovery list
19:03:37 0.24180700 Closing thread: exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1
19:03:36 0.21511900 Result:
19:03:36 0.20295700 Executing: kill -9 12005
19:03:36 0.20270900 Closing thread 12005 (exec php -q ./scripts/cycle_bluetoothdevices.php --params "a:0:{}" > /dev/null 2>&1)
19:03:36 0.20223900 Force closing service cycle_bluetoothdevices (id: 24)
19:03:36 0.17474100 Got control command 'restart' for cycle_bluetoothdevices
19:03:35 0.15955800 Looks like cycle_bluetoothdevices is dead (updated: 2021-03-27 18:33:34). Need to recovery
18:24:30 0.82449000 Adding cycle_bluetoothdevices to auto-recovery list
1) Прописано www-data ALL = (ALL) NOPASSWD:ALL в visudo
2) Параметры настроены на Сканирование радиоэфира:
60
300
-1

Логов модуль не пишет и не могу понять первопричину падения.

Команда sudo -u www-data l2ping 30:22:00:00:45:25 -c1 -f не проходила даже с измененным visudo.
Изменение прав - chmod -s на hciconfig и l2ping команду l2ping пропустили, но модуль падает все равно постоянно.
Переопределял права на каталоги из www/ пробовал изменять код модуля в приближении с логикой BLEtool (который работает без сбоев)/ обновлял-удалял-переустанавливал модуль/ пробовал разные bluethooth свистки... Ничего не помогло.

Идеи закончились, что может быть еще причиной постоянной остановки цикла с выводом следующей ошибки?

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

cycle_bluetoothdevices
Backtrace:
#0 /var/www/cycle.php(370): registerError('cycle_hang', 'cycle_bluetooth...')
#1 {main}
В общем похоже выход один, как писал логрус - не использовать гибридный режим.
Witcherus
Сообщения: 9
Зарегистрирован: Сб апр 25, 2020 11:23 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение Witcherus » Пн мар 29, 2021 8:27 pm

grifindorec писал(а):
Пн мар 29, 2021 6:57 pm

В общем похоже выход один, как писал логрус - не использовать гибридный режим.
У меня только сканирование эфира стоит, цикл падает все равно
СпойлерПоказать
Screen.jpg
Screen.jpg (114.55 КБ) 2192 просмотра
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение Logrus » Пн мар 29, 2021 9:08 pm

Witcherus писал(а):
Пн мар 29, 2021 8:27 pm
grifindorec писал(а):
Пн мар 29, 2021 6:57 pm

В общем похоже выход один, как писал логрус - не использовать гибридный режим.
У меня только сканирование эфира стоит, цикл падает все равно
СпойлерПоказать
Screen.jpg
если нужно только сканирование бле то модуль автора мдм в этом плане оптимальней (но там нюансы всякие, т.к. в этом модуле сами алгоритмы лучше, но именно с бле сканирует каждого юзера)
а еще лучше сканировать есп с передачей по мкютт
т.к. сама проблема в ядре линукс и стеке бт
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
grifindorec
Сообщения: 72
Зарегистрирован: Вт фев 02, 2021 12:54 pm
Благодарил (а): 18 раз
Поблагодарили: 6 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение grifindorec » Пн мар 29, 2021 9:37 pm

Witcherus писал(а):
Пн мар 29, 2021 8:27 pm
grifindorec писал(а):
Пн мар 29, 2021 6:57 pm

В общем похоже выход один, как писал логрус - не использовать гибридный режим.
У меня только сканирование эфира стоит, цикл падает все равно
СпойлерПоказать
Screen.jpg
Вы написали про chmod на hciconfig и l2ping. А на hcitool сделали?
Witcherus
Сообщения: 9
Зарегистрирован: Сб апр 25, 2020 11:23 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение Witcherus » Пн мар 29, 2021 10:48 pm

Logrus писал(а):
Пн мар 29, 2021 9:08 pm
если нужно только сканирование бле то модуль автора мдм в этом плане оптимальней (но там нюансы всякие, т.к. в этом модуле сами алгоритмы лучше, но именно с бле сканирует каждого юзера)
а еще лучше сканировать есп с передачей по мкютт
т.к. сама проблема в ядре линукс и стеке бт
С модулем автора таже ситуация с падением, + я не совсем понял, как можно вытащить из девайса индикатор online/offline в свойство объекта.
Последний раз редактировалось Witcherus Пн мар 29, 2021 10:59 pm, всего редактировалось 1 раз.
Witcherus
Сообщения: 9
Зарегистрирован: Сб апр 25, 2020 11:23 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение Witcherus » Пн мар 29, 2021 10:58 pm

grifindorec писал(а):
Пн мар 29, 2021 9:37 pm
Вы написали про chmod на hciconfig и l2ping. А на hcitool сделали?
Да, пробовал весь такой набор:
СпойлерПоказать
chmod +s /usr/bin/hcitool
chmod +s /usr/bin/l2ping
chmod +s /usr/bin/hciconfig
chmod +s /usr/bin/gatttool
chmod +s /usr/bin/timeout
Забыл написать, не помогло.

По итогу, вроде нашел причину. Уже час цикл держится без падений.
Изменения в файле modules/bluetoothdevices/bluetoothdevices.class.php (строки 131,132):
Было

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

exec(($this->config['sudo']?'sudo ':'').'hcitool scan | grep ":"', $data);
exec(($this->config['sudo']?'sudo ':'').'timeout -s INT 10s hcitool lescan | grep ":"', $data);
Стало

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

//exec(($this->config['sudo']?'sudo ':'').'hcitool scan | grep ":"', $data);
exec(($this->config['sudo']?'sudo ':'').'timeout -s INT 15s hcitool lescan | grep ":"', $data);
Видимо какой-то конфликт запросов получался... теоретически, время задержки сканирования можно не увеличивать, но я на всякий случай оставил так.

Да, и еще чуть изменил основной файл цикла /scripts/cycle_bluetoothdevices.php (не оч красиво порубал привязку параметров, пытался сделать меньше шагов для цикла, может с этим тоже есть зависимости, проверю позже).
СпойлерПоказать

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

<?php	

		

	chdir(dirname(__FILE__).'/../');

	

	include_once('./config.php');

	include_once('./lib/loader.php');

	include_once('./lib/threads.php');

	set_time_limit(0);

	// connecting to database

	$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);

	include_once("./load_settings.php");

	

	include_once(DIR_MODULES."control_modules/control_modules.class.php");

	$ctl = new control_modules();

	include_once(DIR_MODULES.'bluetoothdevices/bluetoothdevices.class.php');

	$bluetoothdevices_module = new bluetoothdevices();

	$bluetoothdevices_module->getConfig();



	echo date('Y/m/d H:i:s'). " running " . basename(__FILE__) .PHP_EOL;

	$latest_check = 0;

	$check_period = 60;

	

while(1) {	

	

	setGlobal((str_replace('.php', '', basename(__FILE__))).'Run', time(), 1);



	if ((time() - $latest_check) > $check_period) {

		$latest_check = time();

		$bluetoothdevices_module->processCycle();

	}

	

	

	if (file_exists('./reboot') || IsSet($_GET['onetime'])){	

		$db->Disconnect();

		exit;

	}

	sleep(1);

}

	DebMes("Unexpected close of cycle: " . basename(__FILE__));
За это сообщение автора Witcherus поблагодарил:
grifindorec (Вт апр 20, 2021 6:55 pm)
Рейтинг: 1.16%
grifindorec
Сообщения: 72
Зарегистрирован: Вт фев 02, 2021 12:54 pm
Благодарил (а): 18 раз
Поблагодарили: 6 раз

Re: [Модуль] Устройства Bluetooth (bluetoothdevices)

Сообщение grifindorec » Вт апр 20, 2021 6:55 pm

Witcherus писал(а):
Пн мар 29, 2021 10:58 pm
grifindorec писал(а):
Пн мар 29, 2021 9:37 pm
Вы написали про chmod на hciconfig и l2ping. А на hcitool сделали?
Да, пробовал весь такой набор:
СпойлерПоказать
chmod +s /usr/bin/hcitool
chmod +s /usr/bin/l2ping
chmod +s /usr/bin/hciconfig
chmod +s /usr/bin/gatttool
chmod +s /usr/bin/timeout
Забыл написать, не помогло.

По итогу, вроде нашел причину. Уже час цикл держится без падений.
Изменения в файле modules/bluetoothdevices/bluetoothdevices.class.php (строки 131,132):
Было

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

exec(($this->config['sudo']?'sudo ':'').'hcitool scan | grep ":"', $data);
exec(($this->config['sudo']?'sudo ':'').'timeout -s INT 10s hcitool lescan | grep ":"', $data);
Стало

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

//exec(($this->config['sudo']?'sudo ':'').'hcitool scan | grep ":"', $data);
exec(($this->config['sudo']?'sudo ':'').'timeout -s INT 15s hcitool lescan | grep ":"', $data);
Видимо какой-то конфликт запросов получался... теоретически, время задержки сканирования можно не увеличивать, но я на всякий случай оставил так.

Да, и еще чуть изменил основной файл цикла /scripts/cycle_bluetoothdevices.php (не оч красиво порубал привязку параметров, пытался сделать меньше шагов для цикла, может с этим тоже есть зависимости, проверю позже).
СпойлерПоказать

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

<?php	

		

	chdir(dirname(__FILE__).'/../');

	

	include_once('./config.php');

	include_once('./lib/loader.php');

	include_once('./lib/threads.php');

	set_time_limit(0);

	// connecting to database

	$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);

	include_once("./load_settings.php");

	

	include_once(DIR_MODULES."control_modules/control_modules.class.php");

	$ctl = new control_modules();

	include_once(DIR_MODULES.'bluetoothdevices/bluetoothdevices.class.php');

	$bluetoothdevices_module = new bluetoothdevices();

	$bluetoothdevices_module->getConfig();



	echo date('Y/m/d H:i:s'). " running " . basename(__FILE__) .PHP_EOL;

	$latest_check = 0;

	$check_period = 60;

	

while(1) {	

	

	setGlobal((str_replace('.php', '', basename(__FILE__))).'Run', time(), 1);



	if ((time() - $latest_check) > $check_period) {

		$latest_check = time();

		$bluetoothdevices_module->processCycle();

	}

	

	

	if (file_exists('./reboot') || IsSet($_GET['onetime'])){	

		$db->Disconnect();

		exit;

	}

	sleep(1);

}

	DebMes("Unexpected close of cycle: " . basename(__FILE__));
Метод действенный и без правки цикла, спасибо.
Ответить