1

我想做的事:

监控 Arduino 和 Apache 网络服务器之间的连接,并在网络浏览器上显示“在线”或“离线”以及最后一次在线时间。

我是怎么做的:

我的 Arduino 正在使用 HTTP POST向heartbeat.php发送心跳。在heartbeat.php的开头,我设置了一个会话变量并将当前时间戳存储到 MySQL 数据库,然后重定向到index.php

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

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

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

4

1 回答 1

1

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

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

这会少一些麻烦,并且避免你在你的 Arduino 中添加另一个责任。

于 2013-07-02T12:27:57.550 回答