Я пытаюсь переключить реле, подключенное через USB к RPi, с помощью команды PHP. Я использую дополнительную релейную плату USB-8 рядом со всеми доступными контактами GPIO на RPi.
Я могу переключать оба (все 8) USB-реле на плате вместе со (всеми 28) GPIO-подключенными реле на GPIO-релейных платах только с помощью 1 скрипта Python.
Соответствующие инструкции Python в test.py-файле:
os.system("gpio write 25 1")
os.system("usbrelay HW554_1=1")
Это прекрасно работает при вызове напрямую через python3 test.py
Однако, когда я использую PHP-скрипт (для выполнения действия через веб-сайт), используя инструкцию PHP:
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $ output;
результатом является (... я думаю) полное выполнение PHP-скрипта, где на RPi через Python эффективно выполняется только инструкция os.system("gpio write 25 1") (реле переключается), в то время как инструкция os.system("usbrelay HW554_1=1") вроде бы выполняется (поскольку замечен дополнительный расход времени, при использовании time.sleep() команд до и после os.system()-instruction), но это не приводит фактически к переключению USB-реле.Я также пробовал использовать bash-shell-файл test.sh (с выполнением- права) вместо этого, что не было решением.
Как обратиться к USB-реле через PHP, Python и RPi, если он работает напрямую через Python и RPi?
#!/usr/bin/env python
import os
import time
os.system("gpio write 25 1")
time.sleep(1)
os.system("gpio write 25 0")
time.sleep(1)
os.system("usbrelay HW554_1=1")
time.sleep(1)
os.system("usbrelay HW554_1=0")
<?php
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
>?






После дальнейшего расследования проблема не связана с самой релейной платой USB. Я могу переключать реле GPIO и USB с помощью 1 PHP-скрипта. Проблема (скорее всего) в правах доступа. Выполнение PHP-скрипта через php -f testusb.php переключает оба типа реле (возвращаемая информация: пользователь: PI и текущий пользователь: root), тогда как выполнение PHP через браузер по-прежнему переключает только реле GPIO, а не USB-реле (возвращаемая информация : пользователь: www-data и текущий пользователь: root). Благодарен, если кто-нибудь подскажет, как выполнить этот PHP-скрипт с правильным пользователем («пи» вместо «www-data»)? ТИА.