Arduino和Webserver之间的连接监控

时间:2013-07-02 03:38:20

标签: php mysql http post arduino

我想做什么:

监控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 中,脚本将检查会话变量以确定系统是否在线。如果系统处于离线状态,则它将查询上次在线时间并显示在浏览器上。

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中设置的,所以我的电脑的浏览器没有得到它因此总是显示“离线”,如果我错了请纠正我。

我正在寻找有效实现此在线监控功能的建议和建议,欢迎任何建议和赞赏。

1 个答案:

答案 0 :(得分:1)

我不确定您认为什么是“会话ID”,但我认为您更像是使用API​​密钥来识别您的网络服务设备。会话ID通常是在HTTP请求中放入cookie的令牌,并且很难管理和跟踪,并且您不需要它们用于您的用例。只需POST令牌,然后通过$_POST变量获取!

正如我在评论中建议的那样,为什么不制作一个将ICMP / Ping发送给Arduino的程序,当它没有回答时,将其识别为“离线” ?

这样可以减轻麻烦,避免在Arduino中添加其他责任。