Olá galera. Essa é a primeira vez que estou escrevendo pois me deparei com algo complicado (pra mim pelo menos).
Contextalizando:
Estou fazendo um sistema para monitorar e gerenciar as lampadas da minha casa. O projeto consiste em servidor web Apache, PHP e comando direto para microcontrolador (Arduino em questao).
Pois bem. Todas as conexoes e funcionamento estão perfeitos, mas me deparei com a necessidade de fazer uma atualizacao em tempo real. A minha aplicacao está dessa forma:
index.php: contem as imagens das lampadas. Quando a lampada esta apagada, clico nela e então rodo 3 funcoes basicas:
1. Seto no banco de dados o valor 1 (ligada) para a lampada do ID correspondente;
2. Atualizado o arquivo data.txt com a tag <img src="on.jpg"> (long polling)
3. Mando pro arduino o codigo correspondente para ligar a lampada correspondente.
lampada.php: contem as funcoes necessarias para os passos acima.
O meu problema esta agora em realizar o Long Polling para atualizar a imagem da lampada na tela no exato momento em que o usuario clica na lampada. Achei uma funcao na internet e realmente funcinou, mas me deparei com estas necessidades:
1. Passar o ID da lampada para a funcao que esta no javascript/ajax para que ele corretamente pegue esta informação e atualize a lampada correta.
2. Realizar o long polling corretamente.
Aqui vai o trecho do codigo:
<script type="text/javascript" charset="utf-8">
var timestamp = null;
function waitForMsg() {
$.ajax({
type: "GET",
url: "codlamp/getdata.php?timestamp=" + timestamp,
async: true,
cache: false,
success: function (data) {
var json = eval('(' + data + ')');
if (json['msg'] != "") {
//alert( json['msg'] );
//Display message here
$("#lampada4").empty();
$("#lampada4").append(json['msg'] + "<hr>").slideDown("slow");
}
timestamp = json["timestamp"];
setTimeout("waitForMsg()", 1000);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
// alert("error: "+textStatus + " "+ errorThrown );
setTimeout("waitForMsg()", 1000);
}
});
}
$(document).ready(
function ()
{
$('.jclock').jclock();
waitForMsg();
$("#lampada4").click(function () {
$("#lampada4").load("lampada.php?num=4");
});
});
</script>
No final desse arquivo, tenho as tags divs que possuem a imagem da lampada e que deve ser atualizada. Detalhe que são 15 lampadas e 15 tags. Portando preciso passar o ID para a funcao realizar suas consultas pelo id e retornar atualizacao da imagem que foi clicada.
Pergunta
MarkAngel11
Olá galera. Essa é a primeira vez que estou escrevendo pois me deparei com algo complicado (pra mim pelo menos).
Contextalizando:
Estou fazendo um sistema para monitorar e gerenciar as lampadas da minha casa. O projeto consiste em servidor web Apache, PHP e comando direto para microcontrolador (Arduino em questao).
Pois bem. Todas as conexoes e funcionamento estão perfeitos, mas me deparei com a necessidade de fazer uma atualizacao em tempo real. A minha aplicacao está dessa forma:
index.php: contem as imagens das lampadas. Quando a lampada esta apagada, clico nela e então rodo 3 funcoes basicas:
1. Seto no banco de dados o valor 1 (ligada) para a lampada do ID correspondente;
2. Atualizado o arquivo data.txt com a tag <img src="on.jpg"> (long polling)
3. Mando pro arduino o codigo correspondente para ligar a lampada correspondente.
lampada.php: contem as funcoes necessarias para os passos acima.
O meu problema esta agora em realizar o Long Polling para atualizar a imagem da lampada na tela no exato momento em que o usuario clica na lampada. Achei uma funcao na internet e realmente funcinou, mas me deparei com estas necessidades:
1. Passar o ID da lampada para a funcao que esta no javascript/ajax para que ele corretamente pegue esta informação e atualize a lampada correta.
2. Realizar o long polling corretamente.
Aqui vai o trecho do codigo:
<script type="text/javascript" charset="utf-8"> var timestamp = null; function waitForMsg() { $.ajax({ type: "GET", url: "codlamp/getdata.php?timestamp=" + timestamp, async: true, cache: false, success: function (data) { var json = eval('(' + data + ')'); if (json['msg'] != "") { //alert( json['msg'] ); //Display message here $("#lampada4").empty(); $("#lampada4").append(json['msg'] + "<hr>").slideDown("slow"); } timestamp = json["timestamp"]; setTimeout("waitForMsg()", 1000); }, error: function (XMLHttpRequest, textStatus, errorThrown) { // alert("error: "+textStatus + " "+ errorThrown ); setTimeout("waitForMsg()", 1000); } }); } $(document).ready( function () { $('.jclock').jclock(); waitForMsg(); $("#lampada4").click(function () { $("#lampada4").load("lampada.php?num=4"); }); }); </script>No final desse arquivo, tenho as tags divs que possuem a imagem da lampada e que deve ser atualizada. Detalhe que são 15 lampadas e 15 tags. Portando preciso passar o ID para a funcao realizar suas consultas pelo id e retornar atualizacao da imagem que foi clicada.
O arquivo getdada.php é esse:
<?php $filename= dirname(__FILE__)."/data4.txt"; $lastmodif = isset( $_GET['timestamp'])? $_GET['timestamp']: 0 ; $currentmodif=filemtime($filename); while ($currentmodif <= $lastmodif) { usleep(10000); clearstatcache(); $currentmodif =filemtime($filename); } $response = array(); $response['msg'] = file_get_contents($filename); $response['timestamp']= $currentmodif; echo json_encode($response); ?>A funcao ConsultaEstadoLampada() é irrelevante na duvida, mas para terem uma ideia do que estou fazendo vou colar aqui:
function consultaEstadoLamp($num) { include 'conexao.php'; $query = 'SELECT estado, local FROM lampada WHERE lampada =' . $num; $result = mysqli_query($link, $query); while ($row = mysqli_fetch_array($result)) { $estado = $row['estado']; $local = $row['local']; } if ($estado == 1) { //deleta o arquivo data.txt unlink('codlamp/data' . $num . '.txt'); //cria um novo arquivo data.txt $fp = fopen('codlamp/data' . $num . '.txt', "w+"); //coloca dentro a atualizacao pois escrita no banco $escreve = fwrite($fp, '<img src="imagens/on.png" width="40" height="32">' . '<br/> ' . $local); //fecha conexao com arquivo fclose($fp); } else { //deleta o arquivo data.txt unlink('codlamp/data' . $num . '.txt'); //cria um novo arquivo data.txt $fp = fopen('codlamp/data' . $num . '.txt', "w+"); //coloca dentro a atualizacao pois escrita no banco $escreve = fwrite($fp, '<img src="imagens/off.png" width="40" height="32">' . '<br/> ' . $local); //fecha conexao com arquivo fclose($fp); } }Aguardo resposta!
Editado por MarkAngel11Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.