(从互联网)打开灯-> Digital Ocean Server->我的家庭路由器-> Raspberry Pi
反之亦然。所以我写这个问题的原因是如何连接这些东西?每次服务器收到消息时,它都必须将消息传递给Raspberry Pi(推送),或者Raspberry Pi必须检查是否有适合我的消息(轮询)。但是该怎么做呢?如何在Intranet和Internet之间传递消息。
更新:我发现了一些东西。谁能告诉我它是否有用。因为我是新来的。
https://nodejs.org/api/http.html#http_httphttp://aiohttp.readthedocs.io/en/stable/client.html
#1 楼
在其他答案中已经说过您应该使用MQTT。但是为什么呢?
如果您的东西在专用网络的防火墙后面,则MQTT是The Protocol。所有技巧都是端口1833的出站规则,或者具有某些配置,甚至可能不是[2]。
使用MQTT而不使用http之后,情况将如何变化?
组合中还需要一个块of
打开灯(来自互联网)-> Digital Ocean Server->我的家庭路由器-> Raspberry Pi
您的流程将是:
订阅Raspberry Pi上的事件指示灯(Broker和RP之间的消息)
..晚一点:
在服务器上发布事件的指示灯(消息进入服务器->代理-> RP)
什么是代理?
消息代理是一项服务,可以在数字海洋中运行,并接受发布和订阅要求。 [3]
这类中介称为Mosquitto,它是开源的,易于安装。您安装并运行该服务。不涉及编码,可能很少配置。 [4]
发布并订阅吗?
如果您熟悉php,也可以将其与Mosquitto [5]一起使用。示例代码至少看起来直截了当,链接包含更多示例:
<?php
$c = new Mosquitto\Client;
$c->onConnect(function() use ($c) {
$c->publish('mgdm/test', 'Hello', 2);
});
$c->connect('test.mosquitto.org');
for ($i = 0; $i < 100; $i++) {
// Loop around to permit the library to do its work
$c->loop(1);
}
echo "Finished\n";
来源:
[2] https://stackoverflow.com/questions/32174272/how-mqtt-works -behind-the-firewall
[3] http://www.hivemq.com/blog/mqtt-essentials-part2-publish-subscribe
[4] https://www.digitalocean.com / community / tutorials / how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-ubuntu-16-04
[5] https://github.com/mgdm/Mosquitto -PHP
#2 楼
如果您确实决定遵循MQTT的路线,则需要在Pi上执行以下操作:选择一种语言编写客户端代码。在您链接的库中edit分别是用于Node.js和Python的HTTP库,因此您的选择将取决于您最喜欢哪种。
为您的语言找到一个MQTT客户端库。我不建议直接使用HTTP库。在原始连接上使用MQTT太多了。而是使用类似
paho-mqtt
的Python库。 HiveMQ上有一些示例。订阅一个主题,该主题指示是否应打开灯。
下面是使用
paho-mqtt
的示例: import paho.mqtt.client as paho
LIGHTBULB_TOPIC = "lightbulb/state"
def lightbulb_on():
# Put your code to turn the bulb on here
pass
def lightbulb_off():
# Put your code to turn the bulb off here
pass
def on_message(client, userdata, msg):
# Check that the message comes from the topic we expected
if msg.topic == LIGHTBULB_TOPIC:
if msg.payload == "on":
lightbulb_on()
elif msg.payload == "off":
lightbulb_off()
else:
print("Invalid message. Expected 'on'/'off', got", msg.payload)
client = paho.Client()
client.on_message = on_message
client.connect("example.com", 1883)
client.subscribe(LIGHTBULB_TOPIC, qos=1)
client.loop_forever()
您只需要实现
lightbulb_on
和lightbulb_off
,然后将消息on
或off
发送到MQTT主题lightbulb/state
即可切换灯泡的状态。这可以从您要控制灯泡的设备上完成。#3 楼
您可能想要查看MQTT协议的样本。它将帮助您通过代理将服务器连接到Pi,以启用发布-订阅通信。请尝试以下操作:https://github.com/bluerhinos/phpMQTT和https://eclipse.org/paho / clients / java /只需关注客户端/经纪人支持的MQTT规范版本。我之所以这样说是因为这些是来自不同存储库的项目。
评论
如果只有更多的答复被写成和这个解释一样好。
–gatorback
17年7月22日在13:11