Giao tiếp giữa máy chủ và Raspberry Pi


7

Tôi đang làm việc trên dự án tự động hóa nhà của tôi. Tôi có một máy chủ trên đại dương kỹ thuật số. Tôi muốn đặt mã php của mình trên máy chủ đó và máy chủ đó sẽ kết nối với Raspberry Pi của tôi. Làm cách nào tôi có thể chuyển tin nhắn giữa máy chủ của mình và Raspberry Pi. Tôi muốn kiểm soát trang web của tôi qua internet.

Bật đèn (từ internet) -> Máy chủ đại dương kỹ thuật số -> Bộ định tuyến nhà của tôi -> Raspberry Pi

Và ngược lại. Vì vậy, lý do tôi viết câu hỏi này là Làm thế nào để kết nối những thứ này? Mỗi lần máy chủ nhận được tin nhắn, nó phải chuyển tin nhắn đến Raspberry Pi (đẩy) hoặc Raspberry Pi phải kiểm tra xem có tin nhắn nào cho tôi hay không (thăm dò ý kiến). Nhưng làm thế nào? Làm thế nào để truyền tin nhắn giữa mạng nội bộ và internet.


CẬP NHẬT: Tôi đã tìm thấy một số thứ. Bất cứ ai có thể cho tôi biết nó có hữu ích hay không. Bởi vì tôi là người mới này.
https://nodejs.org/api/http.html#http_http
http://aiohttp.readthedocs.io/en/urdy/client.html

Câu trả lời:


8

Người ta đã nói trong các câu trả lời khác rằng bạn nên sử dụng MQTT trong trường hợp của bạn.

Nhưng tại sao?

MQTT là Giao thức nếu mọi thứ của bạn nằm sau tường lửa trong mạng riêng [1]. Tất cả các thủ thuật là một quy tắc ra bên ngoài cho cổng 1833 hoặc với một số cấu hình có thể thậm chí không phải là [2].

Mọi thứ sẽ thay đổi như thế nào sau khi dùng MQTT chứ không phải http?

Bạn sẽ cần thêm một khối để kết hợp

Bật đèn (từ internet) -> Máy chủ đại dương kỹ thuật số -> Bộ định tuyến nhà của tôi -> Raspberry Pi

Dòng chảy của bạn sẽ là:

  1. Đăng ký Đèn trên sự kiện trên Raspberry Pi (tin nhắn giữa Nhà môi giới và RP)

.. đêm

  1. Xuất bản đèn trên sự kiện trên Máy chủ (tin nhắn đi Máy chủ -> Nhà môi giới -> RP)

Môi giới là gì?

Message Broker là một dịch vụ, có thể chạy trong Digital Ocean và nó yêu cầu Xuất bản và Yêu cầu mô tả. [3]

Một Nhà môi giới như vậy được gọi là Mosquitto và nó là nguồn mở và dễ cài đặt. Bạn cài đặt dịch vụ và chạy nó. Không có mã hóa liên quan, có thể ít cấu hình. [4]

Xuất bản và đăng ký?

Nếu bạn quen thuộc với php, bạn cũng có thể sử dụng nó với Mosquitto [5]. Mã mẫu ít nhất nhìn thẳng về phía trước, liên kết chứa nhiều ví dụ:

<?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";

Nguồn:

[1] https://mongoose-os.com/blog/why-mqtt-is-getting-so-p phổ biến-in -iot /

[2] /programming/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-ub Ubuntu-16-04

[5] https://github.com/mgdm/Mosquitto-PHP


1
Nếu chỉ có nhiều phản hồi cũng được viết như lời giải thích này.
gatorback

6

Nếu bạn quyết định đi theo lộ trình MQTT, đây là những gì bạn cần làm trên Pi :

  • Chọn một ngôn ngữ để viết mã máy khách. Các thư viện bạn liên kết trong bản chỉnh sửa của mình lần lượt là các thư viện HTTP cho Node.js và Python, vì vậy lựa chọn của bạn sẽ phụ thuộc vào thư viện nào bạn thấy thoải mái nhất.

  • Tìm một thư viện khách MQTT cho ngôn ngữ của bạn. Tôi không khuyên bạn nên sử dụng thư viện HTTP trực tiếp; quá nhiều công việc để sử dụng MQTT qua kết nối thô. Thay vào đó, hãy sử dụng một thư viện như paho-mqttcho Python. Có một số ví dụ tại HiveMQ .

  • Theo dõi một chủ đề cho biết nếu đèn nên sáng .

Đây là một ví dụ về việc sử dụng 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()

Bạn chỉ cần thực hiện lightbulb_onlightbulb_offsau đó gửi tin nhắn onhoặc offđến chủ đề MQTT lightbulb/stateđể chuyển trạng thái của bóng đèn. Điều này sẽ được thực hiện từ thiết bị mà bạn muốn điều khiển bóng đèn từ đó.


4

Bạn có thể muốn xem các mẫu của giao thức MQTT. Nó sẽ giúp bạn kết nối máy chủ Pi thông qua một nhà môi giới để cho phép giao tiếp pub-sub.

Hãy thử những điều sau: https://github.com/bluerhinos/phpMQTThttps://eclipse.org/paho/clents/java/ Chỉ cần theo dõi phiên bản thông số MQTT mà khách hàng / nhà môi giới hỗ trợ. Tôi đang đề cập đến điều này, bởi vì đây là những dự án từ các kho khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.