我有一个Raspberry Pi,我使用它作为DLNA,CIFS,VPN等的多用途24/7设备。现在我买了一个TellStick,它是一个可以向无线电源开关、调光器发送433 The无线命令的USB设备。制造商为linux提供了资源和工具,这是非常棒的,顺便说一句。
使用一个特殊的命令(名为tdtool),我可以向我的电源开关发送命令。
tdtool --on 1这将打开设备1。这非常好,稳定,所以我想摆脱shell命令,以使处理更容易。我的想法是建立一个非常简单的web服务器,它只需要能够接收GET或POST请求,并触发一些操作,比如运行命令"tdtool 3“。因此,web服务器甚至不需要服务页面,它只需要侦听请求。
我想要创建一个基于HTTP的解决方案,因为这将允许我使用我的智能手机作为遥控器。有一个名为" Tasker“的Android应用程序本身就很棒,但是它也允许根据特定的条件发送定制的HTTP请求,这样当我回家时我就可以让我的灯亮起来(Tasker识别到我的WIFI网络或类似的连接)。
由于覆盆子不是最强大的硬件,我想保持尽可能简单的事情。基本上,我需要这个:
例如,会出现一个HTTP请求:
/switch?device=1&action=on根据这一请求,服务器应该以某种方式将其转换为:
tdtool --on 1我确信我会找到一种用Apache和PHP构建类似的东西的方法,但我认为这在我的例子中可能有点过火了。你有什么推荐的?有什么很酷的巨蟒魔法可以让这一切发生吗?或者是带有CGI脚本的漂亮的迷你网络服务器?任何想法和代码样本都是非常感谢的,谢谢!
发布于 2014-12-05 17:35:53
虽然你的问题过于“意见相似”,但有一个几乎即时的解决办法:
但是由于您是在讨论R-Pi,您可能会发现Python CGIHTTPServer (Python2)或http.server (Python3)模块更适合执行shell命令的任务。
发布于 2014-12-05 18:19:38
这里是一个完整的、工作的RealLife™perl示例
...using 舞女
# cpan Dancer
$ dancer -a MyApp
$ cd MyApp
$ cat ./lib/MyApp.pm # need to be edited, see bellow
$ bin/app.pl现在您可以调用URL
http://127.0.0.1:3000/switch?device=1&action=on现在将执行$cmd。
./lib/MyApp.pm:
package MyApp;
use Dancer ':syntax';
our $VERSION = '0.1';
get '/switch' => sub {
my $var = params;
my $device = $var->{device};
my $action = "--" . $var->{action};
# building custom system command
my $cmd = "tdtool $action $device";
# running the command
`$cmd`;
return "$cmd\nexecuted\n";
};
true;这里还有一个完整的使用php的RealLife™示例
<?php
header("HTTP/1.1 200 OK");
if (isset($_REQUEST['action'], $_REQUEST['device'])) {
$device = $_REQUEST['device'];
$action = '--' . $_REQUEST['action'];
$cmd = "tdtool $action $device";
system("$cmd");
echo "Command<br>$cmd<br>executed...";
}
?>网址是:
http://127.0.0.1/switch.php?device=1&action=on这需要端口80上的HTTP server绑定和DocumentRoot顶部的脚本switch.php (在本例中)。
https://stackoverflow.com/questions/27321523
复制相似问题