Olá, pessoal.
Vamos dar sequência ao tutorial Automação de Iluminação com Raspberry Pi (Parte 1 e Parte 2).
Esse é o último post [3/3] desse tutorial, abordaremos os itens:
- Programação de acionamento de GPIO usando Python3
- Programação de página web em PHP
- Finalização
Vamos começar!
6. Programação de acionamento de GPIO usando Python3
Primeiro, acesso a RPi via SSH.
Vá até a pasta /var/www/html/
cd /var/www/html
Eu criei uma pasta chamada GPIO.
mkdir gpio
depois eu entrei na pasta gpio e eu criei mais 4 pastas, uma para cada GPIO que eu usei. Para melhor entendimento, uma para cada interruptor.
mkdir gpio03
mkdir gpio05
mkdir gpio08
mkdir gpio10
Dentro de cada pasta eu criei dois scripts em Python3. Um para acender e outro para apagar.
vim acender.py
vim apagar.py
A seguir o código para acender:
import RPi.GPIO as GPIO import time import sys import os GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) GPIO.setup(3, GPIO.OUT) rele_quarto = 3 def ligar(): GPIO.output(rele_quarto, GPIO.HIGH) if __name__ == "__main__": ligar()
Para salvar e sair apertar a tecla “:” e depois wq. Assim “:wq”.
E o código para desligar:
import RPi.GPIO as GPIO import time import sys import os GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) GPIO.setup(3, GPIO.OUT) rele_quarto = 3 def desligar(): GPIO.output(rele_quarto, GPIO.LOW) if __name__ == "__main__": desligar()
Fazer isso em todas as pastas que criar!
Teste se está funcionando:
python3 /var/www/html/gpio/gpio05/acender.py
python3 /var/www/html/gpio/gpio05/apagar.py
7. Programação de página web em PHP
Entrar com o comando:
cd ..
2 vezes. Para navegarmos até a pasta /var/www/html/
Usei na página de controle um plug-in com front-end pronto, o AdminLTE.
Basta fazer o download e descompactar os arquivos na pasta /var/www/html/.
Entrar com o comando vim para editar a página index.php:
vim index.php
Adicionar o código:
<html style="height: auto; min-height: 97%;"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>CONTROLE DE LUZ HUGO</title> <!-- Tell the browser to be responsive to screen width --> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <!-- Bootstrap 3.3.7 --> <link rel="stylesheet" href="../../bower_components/bootstrap/dist/css/bootstrap.min.css"> <!-- Font Awesome --> <link rel="stylesheet" href="../../bower_components/font-awesome/css/font-awesome.min.css"> <!-- Ionicons --> <link rel="stylesheet" href="../../bower_components/Ionicons/css/ionicons.min.css"> <!-- daterange picker --> <link rel="stylesheet" href="../../bower_components/bootstrap-daterangepicker/daterangepicker.css"> <!-- bootstrap datepicker --> <link rel="stylesheet" href="../../bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"> <!-- iCheck for checkboxes and rgpioio inputs --> <link rel="stylesheet" href="../../plugins/iCheck/all.css"> <!-- Bootstrap Color Picker --> <link rel="stylesheet" href="../../bower_components/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css"> <!-- Bootstrap time Picker --> <link rel="stylesheet" href="../../plugins/timepicker/bootstrap-timepicker.min.css"> <!-- Select2 --> <link rel="stylesheet" href="../../bower_components/select2/dist/css/select2.min.css"> <!-- Theme style --> <link rel="stylesheet" href="../../dist/css/AdminLTE.min.css"> <!-- AdminLTE Skins. Choose a skin from the css/skins folder instead of downloading all of them to reduce the load. --> <link rel="stylesheet" href="../../dist/css/skins/_all-skins.min.css"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file: --> <!-- [if lt IE 9] --> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <!-- [endif]--> <!-- Google Font --> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic"> </head> <body> <div class="box"> <div class="box-header with-border"> <h3 class="box-title">CONTROLE DE ILUMINAÇÃO HUGO'S HOUSE</h3> </div> <!-- /.box-header --> <div class="box-body"> <table class="table table-bordered"> <tbody><tr> <th style="width: 10px">#</th> <th>CÔMODO</th> <th>ACENDER</th> <th style="width: 40px">APAGAR</th> </tr> <tr> <td>1.</td> <td><b>BANHEIRO</b> [GPIO 3]</td> <td> <div > <div> <form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="acender03" value="Acender">Acender</button> </form> </div> </div> </td> <td><div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="apagar03" value="Apagar">Apagar</button> </form></div></td> </tr> <tr> <td>2.</td> <td><b>QUARTO</b> [GPIO 5]</td> <td> <div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="acender05" value="Acender">Acender</button> </form> </div> </td> <td><div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="apagar05" value="Apagar">Apagar</button> </form></div></td> </tr> <tr> <td>3.</td> <td><b>SALA</b> [GPIO 8]</td> <td> <div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="acender08" value="Acender">Acender</button> </form> </div> </td> <td><div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="apagar08" value="Apagar">Apagar</button> </form></div></td> </tr> <tr> <td>4.</td> <td><b>COZINHA</b> [GPIO 10]</td> <td> <div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="acender10" value="Acender">Acender</button> </form> </div> </td> <td><div><form action="" method="post"> <button type="submit" class="btn btn-block btn-success btn-lg" name="apagar10" value="Apagar">Apagar</button> </form></div></td> </tr> </tbody></table> </div> <!-- /.box-body --> <div class="box-footer clearfix"> <ul class="pagination pagination-sm no-margin pull-right"> <li><a href="#">«</a></li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">»</a></li> </ul> </div> </div> <!-- ./wrapper --> <!-- jQuery 3 --> <script src="../../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap 3.7 --> <script src="../../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Select2 --> <script src="../../bower_components/select2/dist/js/select2.full.min.js"></script> <!-- InputMask --> <script src="../../plugins/input-mask/jquery.inputmask.js"></script> <script src="../../plugins/input-mask/jquery.inputmask.date.extensions.js"></script> <script src="../../plugins/input-mask/jquery.inputmask.extensions.js"></script> <!-- date-range-cker --> <script src="../../bower_components/moment/min/moment.min.js"></script> <script src="../../bower_components/bootstrap-daterangepicker/daterangepicker.js"></script> <!-- bootstrap depicker --> <script src="../../bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script> <!-- bootstrap cor picker --> <script src="../../bower_components/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.min.js"></script> <!-- bootstrap te picker --> <script src="../../plugins/timepicker/bootstrap-timepicker.min.js"></script> <!-- SlimScroll --> <script src="../../bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script> <!-- iCheck 1.0.--> <script src="../../plugins/iCheck/icheck.min.js"></script> <!-- FastClick --> <script src="../../bower_components/fastclick/lib/fastclick.js"></script> <!-- AdminLTE A--> <script src="../../dist/js/adminlte.min.js"></script> <!-- AdminLTE fodemo purposes --> <script src="../../dist/js/demo.js"></script> <!-- Page script --> <script> $(function () { //Initialize Select2 Elements $('.select2').select2() //Datemask dd/mm/yyyy $('#datemask').inputmask('dd/mm/yyyy', { 'placeholder': 'dd/mm/yyyy' }) //Datemask2 mm/dd/yyyy $('#datemask2').inputmask('mm/dd/yyyy', { 'placeholder': 'mm/dd/yyyy' }) //Money Euro $('[data-mask]').inputmask() //Date range picker $('#reservation').daterangepicker() //Date range picker with time picker $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, format: 'MM/DD/YYYY h:mm A' }) //Date range as a button $('#daterange-btn').daterangepicker( { ranges : { 'Today' : [moment(), moment()], 'Yesterday' : [moment().subtract(1, 'days'), moment().subtract(1, 'days')], 'Last 7 Days' : [moment().subtract(6, 'days'), moment()], 'Last 30 Days': [moment().subtract(29, 'days'), moment()], 'This Month' : [moment().startOf('month'), moment().endOf('month')], 'Last Month' : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] }, startDate: moment().subtract(29, 'days'), endDate : moment() }, function (start, end) { $('#daterange-btn span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')) } ) //Date picker $('#datepicker').datepicker({ autoclose: true }) //iCheck for checkbox and radio inputs $('input[type="checkbox"].minimal, input[type="radio"].minimal').iCheck({ checkboxClass: 'icheckbox_minimal-blue', radioClass : 'iradio_minimal-blue' }) //Red color scheme for iCheck $('input[type="checkbox"].minimal-red, input[type="radio"].minimal-red').iCheck({ checkboxClass: 'icheckbox_minimal-red', radioClass : 'iradio_minimal-red' }) //Flat red color scheme for iCheck $('input[type="checkbox"].flat-red, input[type="radio"].flat-red').iCheck({ checkboxClass: 'icheckbox_flat-green', radioClass : 'iradio_flat-green' }) //Colorpicker $('.my-colorpicker1').colorpicker() //color picker with addon $('.my-colorpicker2').colorpicker() //Timepicker $('.timepicker').timepicker({ showInputs: false }) }) </script> </body> </html> <?php // Funciones PHP del pin GPIO 03 //ini_set("display_errors",1); if ($_POST[acender03]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio03/acender.py"); echo $a; } if ($_POST[apagar03]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio03/apagar.py"); echo $a; } if ($_POST[acender05]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio05/acender.py"); echo $a; } if ($_POST[apagar05]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio05/apagar.py"); echo $a; } if ($_POST[acender08]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio08/acender.py"); echo $a; } if ($_POST[apagar08]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio08/apagar.py"); echo $a; } if ($_POST[acender10]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio10/acender.py"); echo $a; } if ($_POST[apagar10]) { $a = shell_exec("sudo python3 /var/www/html/gpio/gpio10/apagar.py"); echo $a; } ?>
Salve com o comando “:wq”
8. Finalização
Através de um Notebook, PC ou Smartphone acesse o link no navegador. http://seuip/index.php
Não esqueça que vc deve estar na rede Wi-Fi.
Seu Dashboard vai aparecer dessa maneira, responsivo, simples e funcional!!!
Espero que tenham gostado e que consigam executar esse projeto!
Caso tenham dúvidas, comente que eu responderei, ok?
Caso queiram que eu detalhe algum passo, basta pedir nos comentários que eu crio o post.
Abraço e até o próximo!
24 Comentários
Boa tarde segui os 3 passos, mas quando eu abro o endereço ao clicar no botão para acender não aciona o rele, a fiação esta correta, tem ideia do que eu fiz de errado ?, instalei o apache o php
Olá Lino,
Para testar se está correto a instalação elétrica e programação de hardware, use o comando:
sudo python3 /var/www/html/gpio/gpio03/acender.py
Para apagar:
sudo python3 /var/www/html/gpio/gpio03/apagar.py
Certifique que seu jumper esteja instalado no gpio03 e qual relé está configurado para esse gpio.
Para teste, sugiro rodar esses comandos para todos os pgio, pode ser que tenha colocado em algum local errado.
Se precisar, mande mais detalhes para que eu possa te ajudar.
Abraço e bom projeto.
Boa noite,
Estou com dificuldade para acionar o relé pelo navegador. Não sei se estou fazendo correto, la na código index.php, para acionar a gpio03 eu tenho que cetar o form dessa maneira. Ex:
Acender
Mas dessa forma apresenta erro na pagina: 404 Not Found.
Bom dia João,
Não entendi sua dúvida, pode detalhar mais?
O código está correto, não precisa alterar nada, apenas o caminho pra acionar o arquivo Python da sua Raspberry se vc criou as pastas e arquivos diferente do que eu fiz.
Esse código recebe a entrada do clique do botão “acender03”
Abre um terminal e executa esse comando : sudo python3 /var/www/html/gpio/gpio03/acender.py
Eu crio uma pasta gpio, depois uma para cada gpio, nesse caso o pgio03, depois eu executo o script em python acender.
Se vc entrar pelo SSH na Raspberry pi e executar o comando sua luz tem que ligar.
if ($_POST[acender03]) {
$a = shell_exec(“sudo python3 /var/www/html/gpio/gpio03/acender.py”);
echo $a;
}
Abraço joão, avise se conseguir resolver.
Boa noite,
Só alterei a gpio, que está ligada a gpio12 e o caminho da pasta do apache que é a \var\www\www. E realizai o teste executando: /var/www/www/gpio/gpio12/acender.py. O qual não apresentou nenhum erro, mas não acionou o rele.
sudo python3 /var/www/www/gpio/gpio12/acender.py
Oi João,
Tem certeza que seu caminho pro apache é /var/www/www/gpio/… ?
Faça o teste com:
sudo python3 /var/www/gpio/gpio12/acender.py
Com o script:
import RPi.GPIO as GPIO
import time
import sys
import os
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(12, GPIO.OUT)
def ligar():
GPIO.output(12, GPIO.HIGH)
if __name__ == “__main__”:
ligar()
Se realmente for, sudo python3 /var/www/www/gpio/gpio12/acender.py , vc vai precisar alterar os código da página web, porém só na parte do PHP e no botão de acionamento do html. assim:
Acender
_________________________________________________________________________________________
if ($_POST[acender12]) {
$a = shell_exec(“sudo python3 /var/www/www/html/gpio/gpio12/acender.py”);
echo $a;
}
Confirma se deu certo e avisa aqui pra gente saber se foi.
Um baraço.
Boa noite Hugo.
Tenho certeza absoluta que o caminho é: /var/www/www/gpio/gpio12/acender.py.
meu cód acender.py:
import RPi.GPIO as GPIO
import time
import sys
import os
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(12, GPIO.OUT)
rele_quarto = 12
def ligar():
GPIO.output(rele_quarto, GPIO.HIGH)
if __name__ == “__main__”:
ligar()
————————————————————————-
E o caminho do meu PHP: /var/www/www/index.php
Cód PHP:
if ($_POST[acender12]) {
$a = shell_exec(“sudo python3 /var/www/www/gpio/gpio12/acender.py”);
echo $a;
}
————————————————————————–
Estou executando o comando no terminal: sudo python3
var/www/www/gpio/gpio12/acender.py, acessando o meu raspberry via SSH. Mas o relé não é acionado. Não tenho ideia do que pode ser!
O que tem de diferente são esses os caminhos onde está o index.php, e o acender.py. E estou utilizando a GPIO 12 da minha raspberry zero pi que é o pino Nº 32 de acordo com o link: https://i.stack.imgur.com/yHddo.png
Meu amigo Hugo, mil desculpas. alterei a numeração da GPIO para 32, e acendeu. Mas não está apagando.
Cód apagar.py:
import RPi.GPIO as GPIO
import time
import sys
import os
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(32, GPIO.OUT)
rele_quarto = 32
def desligar():
GPIO.output(rele_quarto, GPIO.LOW)
if __name__ == “__main__”:
desligar()
Hugo,
Consegui realizar o teste para ligar e desligar o relé, só não está pegando com o index.php, pelo navegador!
João,
Além de alterar o PHP, vc tem que alterar o button, esse código aqui:
Acender
Alterou ele também?
Vc consegue ver a página, aperta e não vai? Ou vc não consegue abrir a página?
A pagina abre sim, mas ao executar o botão para acender, por exemplo, não faz nada.
Segue o Cód do index.php.
CONTROLE DE LUZ HUGO
CONTROLE DE ILUMINAÇÃO HUGO’S HOUSE
#
CÔMODO
ACENDER
APAGAR
1.
BANHEIRO [GPIO 32]
Acender
Apagar
2.
QUARTO [GPIO 5]
Acender
Apagar
3.
SALA [GPIO 8]
Acender
Apagar
4.
COZINHA [GPIO 10]
Acender
Apagar
«
1
2
3
»
$(function () {
//Initialize Select2 Elements
$(‘.select2’).select2()
//Datemask dd/mm/yyyy
$(‘#datemask’).inputmask(‘dd/mm/yyyy’, { ‘placeholder’: ‘dd/mm/yyyy’ })
//Datemask2 mm/dd/yyyy
$(‘#datemask2’).inputmask(‘mm/dd/yyyy’, { ‘placeholder’: ‘mm/dd/yyyy’ })
//Money Euro
$(‘[data-mask]’).inputmask()
//Date range picker
$(‘#reservation’).daterangepicker()
//Date range picker with time picker
$(‘#reservationtime’).daterangepicker({ timePicker: true, timePickerIncrement: 30, format: ‘MM/DD/YYYY h:mm A’ })
//Date range as a button
$(‘#daterange-btn’).daterangepicker(
{
ranges : {
‘Today’ : [moment(), moment()],
‘Yesterday’ : [moment().subtract(1, ‘days’), moment().subtract(1, ‘days’)],
‘Last 7 Days’ : [moment().subtract(6, ‘days’), moment()],
‘Last 30 Days’: [moment().subtract(29, ‘days’), moment()],
‘This Month’ : [moment().startOf(‘month’), moment().endOf(‘month’)],
‘Last Month’ : [moment().subtract(1, ‘month’).startOf(‘month’), moment().subtract(1, ‘month’).endOf(‘month’)]
},
startDate: moment().subtract(29, ‘days’),
endDate : moment()
},
function (start, end) {
$(‘#daterange-btn span’).html(start.format(‘MMMM D, YYYY’) + ‘ – ‘ + end.format(‘MMMM D, YYYY’))
}
)
//Date picker
$(‘#datepicker’).datepicker({
autoclose: true
})
//iCheck for checkbox and radio inputs
$(‘input[type=”checkbox”].minimal, input[type=”radio”].minimal’).iCheck({
checkboxClass: ‘icheckbox_minimal-blue’,
radioClass : ‘iradio_minimal-blue’
})
//Red color scheme for iCheck
$(‘input[type=”checkbox”].minimal-red, input[type=”radio”].minimal-red’).iCheck({
checkboxClass: ‘icheckbox_minimal-red’,
radioClass : ‘iradio_minimal-red’
})
//Flat red color scheme for iCheck
$(‘input[type=”checkbox”].flat-red, input[type=”radio”].flat-red’).iCheck({
checkboxClass: ‘icheckbox_flat-green’,
radioClass : ‘iradio_flat-green’
})
//Colorpicker
$(‘.my-colorpicker1’).colorpicker()
//color picker with addon
$(‘.my-colorpicker2’).colorpicker()
//Timepicker
$(‘.timepicker’).timepicker({
showInputs: false
})
})
poderia me enviar um email ([email protected]) para poder te passar como está o meu cód php?
Manda seu git pra @hugobaur
Conseguiu resolver João?
vc ensina de um meio muito eficaz , parabens, eu segui seu passo-a-passo mas no final nao acende clicando no botao no site
fiz os testes pelo terminal executando o script py e acende e apaga, mas pela web nao. o sera que está errado?
Felipe, muito obrigado. Se não funciona na web o código php que é o problema.
Da uma revisada. Boa sorte amigo.
eu revisei mas esse projeto é minha primeira experiencia com linux
nao sei mas oq fazer, sao 3 noites mexendo , sem resultados.
editei o painel admin e o codigo esta assim
PAINEL DE CONTROLE
PAINEL DE CONTROLE
#
CÔMODO
ACENDER
APAGAR
1.
BANHEIRO [GPIO 3]
Acender
Apagar
2.
QUARTO [GPIO 5]
Acender
Apagar
3.
SALA [GPIO 8]
Acender
Apagar
4.
COZINHA [GPIO 10]
Acender
Apagar
$(function () {
//Initialize Select2 Elements
$(‘.select2’).select2()
//Datemask dd/mm/yyyy
$(‘#datemask’).inputmask(‘dd/mm/yyyy’, { ‘placeholder’: ‘dd/mm/yyyy’ })
//Datemask2 mm/dd/yyyy
$(‘#datemask2’).inputmask(‘mm/dd/yyyy’, { ‘placeholder’: ‘mm/dd/yyyy’ })
//Money Euro
$(‘[data-mask]’).inputmask()
//Date range picker
$(‘#reservation’).daterangepicker()
//Date range picker with time picker
$(‘#reservationtime’).daterangepicker({ timePicker: true, timePickerIncrement: 30, format: ‘MM/DD/YYYY h:mm A’ })
//Date range as a button
$(‘#daterange-btn’).daterangepicker(
{
ranges : {
‘Today’ : [moment(), moment()],
‘Yesterday’ : [moment().subtract(1, ‘days’), moment().subtract(1, ‘days’)],
‘Last 7 Days’ : [moment().subtract(6, ‘days’), moment()],
‘Last 30 Days’: [moment().subtract(29, ‘days’), moment()],
‘This Month’ : [moment().startOf(‘month’), moment().endOf(‘month’)],
‘Last Month’ : [moment().subtract(1, ‘month’).startOf(‘month’), moment().subtract(1, ‘month’).endOf(‘month’)]
},
startDate: moment().subtract(29, ‘days’),
endDate : moment()
},
function (start, end) {
$(‘#daterange-btn span’).html(start.format(‘MMMM D, YYYY’) + ‘ – ‘ + end.format(‘MMMM D, YYYY’))
}
)
//Date picker
$(‘#datepicker’).datepicker({
autoclose: true
})
//iCheck for checkbox and radio inputs
$(‘input[type=”checkbox”].minimal, input[type=”radio”].minimal’).iCheck({
checkboxClass: ‘icheckbox_minimal-blue’,
radioClass : ‘iradio_minimal-blue’
})
//Red color scheme for iCheck
$(‘input[type=”checkbox”].minimal-red, input[type=”radio”].minimal-red’).iCheck({
checkboxClass: ‘icheckbox_minimal-red’,
radioClass : ‘iradio_minimal-red’
})
//Flat red color scheme for iCheck
$(‘input[type=”checkbox”].flat-red, input[type=”radio”].flat-red’).iCheck({
checkboxClass: ‘icheckbox_flat-green’,
radioClass : ‘iradio_flat-green’
})
//Colorpicker
$(‘.my-colorpicker1’).colorpicker()
//color picker with addon
$(‘.my-colorpicker2’).colorpicker()
//Timepicker
$(‘.timepicker’).timepicker({
showInputs: false
})
})
$.widget.bridge(‘uibutton’, $.ui.button)
Felipe, não da pra entender seu código Sugiro vc copiar e colar os códigos que te garanto que vai funcionar.
Hugo ja fiz de tudo, eu acho que deve ser algo com cgi pelo menos pelo que andei pesquisando, se pudesse me ajudar, ficaria muito grato, eu comecei a gostar muito de linux, to estudando mas tudo que se sabe pelo que vi ainda é pouco.
aqui esta no github o codigo do index
https://raw.githubusercontent.com/dhymi1/index.html/master/index.html
Boa tarde!
Ao invés de colocar par carregar um arquivo .py para cada acionamento da página web, é possível que se faça por exemplo POST em um programa principal que esteja rodando o tempo todo checando as entradas??
Olá Hugo … Estou seguindo seu passo a passo e primeiramente parabéns pelo trabalho … Meu problema é que minha pagina no BROWSER não vem com as configuraçãoes do BOOTSTRAP .. Na pasta do HTML como os arquivos do ADMINLTEdeveriam estar ? Obrigado !!!
Consegui descobrir o erro no PHP que não deixava disparar o comando acender.py ou apagar.py
Funcionava via terminal, mas não funcionava via site web.
1 – Edite o arquivo sudoers através do terminal com o comando: sudo visudo
2 – Depois da ultima linha desse arquivo, insira a linha:
www-data ALL=(ALL) NOPASSWD: ALL
3 – Salve a alteração e saia do arquivo sudoers
4 – Na sua programação php o comando de disparo deve ficar assim:
shell_exec(“sudo nice /var/www/html/gpio/gpio3/acender.py”)
OBS: a grande sacada foi a alteração do sudoers para permitir que o user ww-data tenha permissão de executar o shell_exec, e a outra sacada foi acrescentar a sintaxe nice junto com o sudo no comando de execução no shell_exec.