Executar Comando PHP na serial do Linux [RESOLVIDO]

1. Executar Comando PHP na serial do Linux [RESOLVIDO]

RODRIGO MEDICI
medicisolucoes

(usa Debian)

Enviado em 27/02/2018 - 15:51h

Bom dia pessoas.

Me desculpe o pouco conhecimento em Linux e PHP, mas necessito fazer um trabalho de iniciação cientifica, e o que mais conheço para isso é o Shell Script

Estou conectando um arduino a um raspbian (base debian). Tenho um comando na inicialização que executa o seguinte
$ sudo stty -F "$porta" cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -raw

Este comando permite que eu leia a porta linux com interrupções. Alem disso posso enviar a letra A e acender um led e a letra D e desligar o led. Por terminal tudo funcionando ok.

Preciso fazer uma pagina em php. Instalei o php5, apache2 e o mysql. Quando eu vou pra pagina, eu insiro os botões a ação. Ele executa a ação mas não liga o led. Como tirei todas as duvidas quanto a terminal, imagino que seja problema no apache, php ou outro.. seja por questão de permissão ou por questão de não saber enviar o comando..

Poderiam me ajudar, se não for incomodo, com este problema?
Abaixo o codigo PHP. Note que o mesmo consegue executar o comando users e retornar o que precisa, mas nao consegue enviar os dados para a USB.

<?php
if(isset($_GET['a'])){
echo "a";
$output = shell_exec('echo a > /dev/ttyUSB0');
$output = shell_exec('users');
echo "<pre>$output</pre>";
}

//Se receber 'd' via GET na pagina
if(isset($_GET['d'])){
echo "d";
}


?>


<html>
<head></head>

<body>
<h1> Ligar o Led </h1>

<input type="button"
onclick="location.href='/ligar.php?a=1'"
value="Acende LED" />

<input type="button"
onclick="location.href='/ligar.php?d=1'"
value="Apaga LED" />

</body>
</html>




  


2. medicisolucoes permissão!

Rodrigo Kulb
RodrigoKulb

(usa Ubuntu)

Enviado em 27/02/2018 - 16:22h

Olá medicisolucoes, sim com certeza comandos como root não serão executados com o apache, e também não seria seguro liberar esse acesso.

Neste caso você pode utilizar o banco MYSQL para armazenar a informação exemplo no PHP (camada web), você irá atualizar apenas o parâmetro do banco de dados led ligados / desligado.

No linux você pode fazer um script no shell utilizando o crontab, que verifica o status no banco de dados, ai sim você pode executar como root, basta logar como root no terminal e agendar o script em shell no crontab -e a cada 1min claro que derá um delay de 1 min para ligar e desligar, porem você terá um camada seguro para acesso a maquina.

Espero ter ajudado!

Rodrigo Kulb
Canal do Youtube
https://www.youtube.com/rodrigokulb


3. Re: Executar Comando PHP na serial do Linux [RESOLVIDO]

RODRIGO MEDICI
medicisolucoes

(usa Debian)

Enviado em 27/02/2018 - 16:29h

Rodrigo Boa tarde e novamente peço desculpas pelo incomodo.

Devido a ser o projeto em um raspberry, a segurança (até o presente momento) seria indiferente. O ideal é que funcione.

Na verdade o led é só um parametro de teste... O Arduino vai enviar os dados de uma leitura de corrente elétrica, e eu vou pegar esses e jogar dentro do MySQL com o o shell script.

Mas vou ter um relay 4 portas ligados ao arduino, o qual necessito que seja imediato o liga/desliga.

Deixando de lado, neste momento em especifico, o aspecto segurança, como poderia fazer pro apache executar esse comando?

Novamente obrigado!




4. acesso root

Rodrigo Kulb
RodrigoKulb

(usa Ubuntu)

Enviado em 27/02/2018 - 16:32h

Sendo assim, você pode liberar o acesso ao apache como root nas pastas que deseja, segue o link

https://pt.stackoverflow.com/questions/164842/php-executar-comando-sudo-com-shell-exec

OU

https://www.vivaolinux.com.br/topico/Comandos/Comando-Root-via-PHP

Rodrigo Kulb
Canal do Youtube
https://www.youtube.com/rodrigokulb


5. Re: Executar Comando PHP na serial do Linux [RESOLVIDO]

RODRIGO MEDICI
medicisolucoes

(usa Debian)

Enviado em 28/02/2018 - 00:51h

Boa noite e desculpe a demora..

Cara eu devo estar fazendo algo errado..

Bom.. descobri que no raspbian o usuário é o www-data

Então criei um shell no /tmp/ chamado ligar, com o seguinte:

#!/bin/bash
echo a > /dev/ttyUSB0

e modifiquei o /etc/sudoers acrescentando esta linha
www-data ALL=(root) NOPASSWD: /tmp/

Após não dar certo, coloquei tambem

www-data ALL=(ALL:ALL) ALL

e tambem não funcionou...

Executei o seguinte comando tambem

sudo gpasswd -a www-data root

Só que sem sucesso em ligar o led..

Poderia me dar uma nova luz?



6. medicisolucoes permissão!

Rodrigo Kulb
RodrigoKulb

(usa Ubuntu)

Enviado em 28/02/2018 - 11:21h

Vamos por partes, esse seu programa se você rodar no terminal ele funciona normalmente na pasta tmp ?

De uma olhada também neste llink, acredito que possa ajudar:

http://eduveks.blogspot.com.br/2009/05/sudo-php-executando-comandos-como-root.html

Rodrigo Kulb
Canal do Youtube
https://www.youtube.com/rodrigokulb


7. Re: Executar Comando PHP na serial do Linux [RESOLVIDO]

RODRIGO MEDICI
medicisolucoes

(usa Debian)

Enviado em 28/02/2018 - 16:07h

Eu ia começar a descrever passo a passo de tudo o que não estava funcionando, mas o ultimo link realmente me deu uma luz..
Agradeço pela ajuda, foi de imensa valia.

Por gentileza, gostaria de ser agradecido em meu projeto de Iniciação Científica? Se sim, deixe seu nome completo que o citarei.

Muitissimo obrigado até o presente momento..













Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts