【问题标题】:Mosquitto-PHP Library in raspberry and windows覆盆子和 Windows 中的 Mosquitto-PHP 库
【发布时间】:2016-06-02 16:51:57
【问题描述】:

我使用 Mosquitto-PHP 为 MQTT 安装 PHP 客户端

覆盆子库 mosquitto php library/

之后在浏览器http://xxx.xxx.xxx.xx/mqtt/pup.php 中写入时在/var/www/html/mqtt 中创建pub.php 并且看不到任何数据

然后我尝试了

$mosquitto_pub -h localhost -t "/mqtt" -m "HelloWorld" 

和得到

bash: -h: command not found

不知道问题出在哪里,信息写在命令里

$mosquitto -v
1464002857: mosquitto version 1.4.8 (build date Tue, 17 May 2016 11:26:59 +0100) starting
1464002857: Using default config.
1464002857: Opening ipv4 listen socket on port 1883.
1464002857:Error: Address already in use

我在安装mosquitto的windows中也有同样的问题,看这个链接step-by-step-installing-and-configuring-mosquitto-with-windows-7

我看到 Mosquitto Broker(MQTT v3.1 代理)的服务正在运行并且 检查示例 pub.php 以测试结果是错误 Mosquitto\Client() is not found

我搜索并找到mosquitto.php并将我把这段代码放在pub.php中

require "mosquitto.php";

我不知道问题出在哪里,任何人都可以帮助我在我的 Windows 和树莓派中运行 mosquitto。

我需要尝试使用 localhost 连接 mqtt 并检查连接是否正常以订阅和发布和阅读消息

【问题讨论】:

  • 对于信息,我从这个链接github.com/Nakard/mosquitto-stub/blob/master/mosquitto.php找到mosquitto.php,我也使用这个链接github.com/mgdm/Mosquitto-PHP/blob/master/examples/pub.php的代码pub.php
  • 这有点啰嗦,最好的问题涵盖一个问题。如果你能把它分成不同的部分,你可能会做得更好
  • 谢谢先生,问题是我尝试使用 php 运行 mosquitto 以连接本地主机并且可以发布和订阅,对我来说,我尝试在 raspberry 或 windows 中但没有找到问题,我需要运行mosquitto 与 php 并可以与 localhost 连接并检查连接是否正常,也可以订阅和发布和阅读消息

标签: php raspberry-pi mqtt mosquitto


【解决方案1】:

在 raspberry 中使用 php 安装 mosquittolib 的信息

 wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list

sudo apt-get update

apt-get install mosquitto

sudo apt-get install mosquitto-clients

sudo apt-get install php5-dev

sudo apt-get install libmosquitto-dev

sudo pecl install Mosquitto-alpha

在 /etc/php5/mods-available/mosquitto.ini 中

添加此代码

extension=mosquitto.so

此代码用于检查 Mosquitto 库的版本

dpkg -l | grep mosquito

最后使用 sudo php5enmod mosquitto 启用它

 sudo php5enmod mosquitto
echo "<?php phpinfo(); ?>" > ~/tester.php
php ~/tester.php

代码 pub.php

   <?php

$client = new Mosquitto\Client();
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onPublish('publish');
$client->connect("localhost", 1883, 5);

while (true) {
        try{
                $client->loop();
                $mid = $client->publish('/hasan', "Hello from PHP");
                $client->loop();
        }catch(Mosquitto\Exception $e){
                return;
        }
        sleep(2);
}

$client->disconnect();
unset($client);

function connect($r) {
        echo "I got code {$r}\n";
}

function publish() {
        global $client;
        echo "Mesage published\n";
        $client->disconnect();
}

function disconnect() {
        echo "Disconnected cleanly\n";
}

代码 sub.php

     <?php

$client = new Mosquitto\Client();
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
$client->connect("localhost", 1883, 60);
$client->subscribe('/hasan', 1);


while (true) {
        $client->loop();
        sleep(2);
}

$client->disconnect();
unset($client);

function connect($r) {
        echo "I got code {$r}\n";
}

function subscribe() {
        echo "Subscribed to a topic\n";
}

function message($message) {
        printf("\nGot a message on topic %s with payload:%s", 
                $message->topic, $message->payload);
}

function disconnect() {
        echo "Disconnected cleanly\n";
}

test sub.php and pub.php

【讨论】:

    【解决方案2】:

    启动代理时的错误是因为 mosquitto 已经作为服务运行。如果你想在前台以详细模式运行它,你必须先停止它。

    在 TRaspberry Pi 上运行以下命令以停止服务。

    sudo service stop mosquitto 
    

    mosquitto_pub 的错误意味着您在mosquitto-h localhost... 之间按下回车键

    PHP 问题应作为单独的问题提出。

    【讨论】:

    【解决方案3】:

    现在我需要测试代码pub.php和sub.php怎么办

    我把 sup.php & pub.php 放在 /var/www/html

    sub.php

     <?php
    
    $client = new Mosquitto\Client();
    $client->onConnect('connect');
    $client->onDisconnect('disconnect');
    $client->onSubscribe('subscribe');
    $client->onMessage('message');
    $client->connect("localhost", 1883, 60);
    $client->subscribe('/#', 1);
    
    
    while (true) {
            $client->loop();
            sleep(2);
    }
    
    $client->disconnect();
    unset($client);
    
    function connect($r) {
            echo "I got code {$r}\n";
    }
    
    function subscribe() {
            echo "Subscribed to a topic\n";
    }
    
    function message($message) {
            printf("\nGot a message on topic %s with payload:%s", 
                    $message->topic, $message->payload);
    }
    
    function disconnect() {
            echo "Disconnected cleanly\n";
    }
    

    pub.php

       <?php
    
    $client = new Mosquitto\Client();
    $client->onConnect('connect');
    $client->onDisconnect('disconnect');
    $client->onPublish('publish');
    $client->connect("localhost", 1883, 5);
    
    while (true) {
            try{
                    $client->loop();
                    $mid = $client->publish('/mqtt', "Hello from PHP");
                    $client->loop();
            }catch(Mosquitto\Exception $e){
                    return;
            }
            sleep(2);
    }
    
    $client->disconnect();
    unset($client);
    
    function connect($r) {
            echo "I got code {$r}\n";
    }
    
    function publish() {
            global $client;
            echo "Mesage published\n";
            $client->disconnect();
    }
    
    function disconnect() {
            echo "Disconnected cleanly\n";
    }
    

    【讨论】:

    • 我写这个命令 pi@raspberrypi:/var/www/html/t $ php pub.php ,结果是 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/ php5/20131226/mosquitto.so' - /usr/lib/php5/20131226/mosquitto.so:无法打开共享对象文件:第 0 行的未知中没有此类文件或目录 PHP 致命错误:找不到类“Mosquitto\Client”在 /var/www/html/t/pub.php 第 3 行
    • 现在可以工作了,1- 写入命令 cd /var/www/html 2- 之后写入 php sub.php 和打开窗口并写入 1- 写入命令 cd /var/www/ html 2- 之后写 php pub.php
    【解决方案4】:

    现在是工作 在此链接中安装此命令 http://mosquitto.org/2013/01/mosquitto-debian-repository/

    同时安装 mosquitto-clients

    sudo apt-get install mosquitto-clients
    

    之后我使用此命令进行测试

    $ mosquitto_sub -h 192.168.1.2 -d -t hello/world
    

    $ mosquitto_pub -h 192.168.1.2 -d -t hello/world -m "Message To Send"
    

    其中 192.168.1.2 是您的 Raspberry Pi 的 IP 地址 请看这个链接 https://rasspberrypi.wordpress.com/2012/09/16/mosquitto-mqtt-on-raspberry-pi-broker-publish-and-subscribe-client/

    pi@raspberrypi:~ $ mosquitto_sub -h 210.201.4.114 -d -t hello/world

    客户端 mosqsub/1796-raspberryp 发送 CONNECT

    客户端 mosqsub/1796-raspberryp 收到 CONNACK

    客户端 mosqsub/1796-raspberryp 发送 SUBSCRIBE (Mid: 1, Topic: hello/world, QoS: 0)

    客户端 mosqsub/1796-raspberryp 收到 SUBACK 订阅(中:1):0

    客户端 mosqsub/1796-raspberryp 发送 PINGREQ

    客户端 mosqsub/1796-raspberryp 收到 PINGRESP

    客户端 mosqsub/1796-raspberryp 发送 PINGREQ

    客户端 mosqsub/1796-raspberryp 收到 PINGRESP

    客户端 mosqsub/1796-raspberryp 收到 PUBLISH (d0, q0, r0, m0, 'hello/world', ... (15 bytes))

    要发送的消息

    客户端 mosqsub/1796-raspberryp 发送 PINGREQ

    客户端 mosqsub/1796-raspberryp 收到 PINGRESP

    =============================================

    pi@raspberrypi:~ $ mosquitto_pub -h 210.201.4.114 -d -t hello/world -m "要发送的消息"

    客户端 mosqpub/1800-raspberryp 发送 CONNECT

    客户端 mosqpub/1800-raspberryp 收到 CONNACK

    客户端 mosqpub/1800-raspberryp 发送 PUBLISH (d0, q0, r0, m1, 'hello/world', ... (15 bytes))

    客户端 mosqpub/1800-raspberryp 发送 DISCONNECT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多