Как отправлять команды на USB-реле, подключенное к RPi, используя PHP и Python?

Я пытаюсь переключить реле, подключенное через 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»)? ТИА.

Mike123 14.02.2019 15:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
389
0

Другие вопросы по теме