【发布时间】:2013-07-02 03:38:19
【问题描述】:
我想做的事:
监控 Arduino 和 Apache 网络服务器之间的连接,并在网络浏览器上显示“在线”或“离线”以及最后一次在线时间。
我是如何做到的:
我的 Arduino 正在使用 HTTP POST 向 heartbeat.php 发送心跳。在 heartbeat.php 的开头,我设置了一个会话变量并将当前时间戳存储到 MySQL 数据库,然后重定向到 index.php。
heartbeat.php
<?php
session_start();
$_SESSION['hb'] = 1;
include("connect.php");
$link=connection();
$sql="UPDATE heartbeat SET time=NOW() WHERE 1";
mysql_query($sql,$link);
header("Location: index.php");
?>
index.php 中的 javascript 将执行自动刷新并将 healthcheck.php 加载到 HTML 正文内容中。
<script>
$(document).ready(function() {
var refreshId = setInterval(function() {
$("#content").load("healthcheck.php");
}, 1000);
$.ajaxSetup({ cache: false });
});
</script>
在healthcheck.php中,脚本会检查session变量来判断系统是否在线。如果系统离线则查询上次在线时间并显示在浏览器上。
healthcheck.php
<?php
session_start();
include("connect.php");
if(isset($_SESSION['hb']))
{
echo '<h1>System Online!!!</h1>';
unset($_SESSION['hb']);
}
else
{
echo '<h1>System Offline!!!</h1>';
$link=connection();
$result=mysql_query("SELECT * FROM heartbeat", $link);
while($row=mysql_fetch_array($result))
{
printf("Last Online: %s", $row["time"]);
}
}
?>
问题:
当我使用我的电脑浏览器浏览 localhost/heartbeat.php 时,我可以看到“在线”在它变成“离线”之前显示最后一次在线时间,这就是我想要实现的使用 Arduino。
但是,当我使用 Arduino 测试脚本时,它总是显示“离线”,并且根据我的刷新间隔更新上次在线时间。
我认为这是因为会话变量是在 arduino 本身中设置的,所以我的电脑浏览器没有得到它,因此总是显示“离线”,如果我错了,请纠正我。
我正在寻找以有效方式实现此在线监控功能的建议和建议,欢迎和赞赏任何建议。
【问题讨论】:
-
如果我错了,请纠正我,但我认为会话变量是基于每个客户端存储数据的,因此您在从 arduino 到服务器的会话中设置的会话变量与从 pc 网络浏览器到服务器的会话中的会话变量。
-
好吧,你为什么不做一个程序,将 ICMP/Ping 发送到 arduino 主机,当它没有应答时,将其识别为“离线”?这会少一些麻烦,并且避免你在你的 Arduino 中添加另一个责任。
-
@til_b 是的,你是对的。我之前弄错了会话变量的概念,因此我陷入了困境。
标签: php mysql http post arduino