0%

MQTT 生产端电子秤与消费端laravel集成

利用MQTT协议,实现物联网数据通讯。

MQTT服务器软件选择RabbitMQ。

RabbitMQ安装配置

安装RabbitMQ服务

1
2
3
sudo apt-get install erlang-nox
sudo apt update
sudo apt-get install rabbitmq-server

添加用户并授权

1
2
3
4
5
6
7
添加用户
sudo rabbitmqctl add_user [username] [password]
sudo rabbitmqctl set_user_tags [username] administrator

# 授权
sudo rabbitmqctl set_permissions [-p <vhost>] <user> <conf> <write> <read>
例子:sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'

启用插件

1
2
3
4
5
sudo rabbitmq-plugins enable rabbitmq_management //后台管理系统
sudo rabbitmq-plugins enable rabbitmq_web_stomp //stomp消息通道插件
sudo rabbitmq-plugins enable rabbitmq_web_stomp_examples //stomp消息通道插件
sudo rabbitmq-plugins enable rabbitmq_mqtt // 启用MQTT插件
sudo rabbitmq-plugins enable rabbitmq_web_mqtt // 启用MQTT插件

允许外网访问

1
2
/etc/rabbitmq/rabbitmq-env.conf//编辑配置文件 
NODE_IP_ADDRESS=0.0.0.0 //允许外网访问

启动/停止服务

1
2
systemctl start rabbitmq-server
systemctl stop rabbitmq-server

开放端口

1
2
3
4
5
6
7
4369 epmd(Erlang Port Mapper Daemon),erlang服务端口
5672 //client端通信口 AMQP
15672 //后台管理系统端口
25672 节点间通信(Erlang分发服务器端口)
61613 //Stomp 协议端口
1883 // MQTT 协议端口
15675 // MQTT Web 协议端口

Web管理界面

1
2
http://your server ip:15672/
用户名/密码为添加的用户。

登录web管理界面后,在Queues新增一个queue,名称为test

再切换到 exchanges ,点 amq.topic ,在bindings添加一个Bind,to queue填test,Routing key填push_test_topic

用MQTTX模拟生产端电子秤

注意MQTT版本选3.1

添加3个连接。两个名称为电子秤1、2,模拟生产端。

一个名称为server模拟消费端,server订阅push_test_topic主题。

在两个生产端向push_test_topic主题发消息,server订阅了push_test_topic可以收到。

Laravel 端订阅主题

https://packagist.org/packages/php-mqtt/laravel-client 这个MTQQ PHP库。

安装并配置完后,建立一个 Commands, ElectronicRabbitMQ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

namespace App\Console\Commands;
use Illuminate\Console\Command;
use PhpMqtt\Client\Facades\MQTT;
use Log;

// 电子秤消费端
class ElectronicRabbitMQ extends Command
{
...
public function handle()
{
$mqtt = MQTT::connection();
$mqtt->subscribe('push_test_topic', function (string $topic, string $message) {
Log::info($message);
}, 1);
$mqtt->loop(true);
}
}

运行命令 php artisan ElectronicRabbitMQ

再次在电子秤1、2中发送消息到主题push_test_topic

laravel订阅的主题push_test_topic的消息,会自动写到log中

欢迎关注我的其它发布渠道