phpmqtt/client mit username und passwort?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum,


    ich habe das Problem, das bei der Neuinstallation von Openhab nun die Version 4 das mosquitto ein Username und Passwort möchte.

    So habe ich alle Devices nun mit den Logindaten am laufen, würde aber nun auch gerne das meine PI's auch wieder an OH4 senden können.


    mein php script wie folgt aus.

    <?php

    if (!@$fp = fsockopen("192.168.5.100",80, $errno, $errstr, 1)){

    } else {

    require_once 'include/config.include.php';
    require_once 'include/mqtt_connect.include.php';
    require_once 'include/date_time.include.php';

    require "vendor/autoload.php";

    //echo "daten geladen\n";

    exec("cat /sys/class/thermal/thermal_zone0/temp",$cputemp);
    $cputemp = $cputemp[0] / 1000;

    $mqtt_msg = 'tele/'.$clientId.'/SENSOR';
    $mqtt_status = '{"Time":"'.$datemqtt.'T'.$timemqtt.'","AM2301":{"Temperature":'.$cputemp.'},"TempUnit":"C"}';
    $mqtt_qos = '0';

    $mqtt = new \PhpMqtt\Client\MQTTClient($server, $port, $clientId);
    $mqtt->connect();
    $mqtt->publish($mqtt_msg ,$mqtt_status , $mqtt_qos);
    $mqtt->close();

    //echo $mqtt_msg;
    //echo $mqtt_status;
    }

    ?>


    selbst wenn ich nach dieser vorlage arbeite kann ich nicht senden und bekomme ein fehler

    How to use MQTT in PHP
    This article introduces how to use the "php-mqtt/client" client library in the PHP project, and implements connection, subscribe, messaging, etc of MQTT.
    www.emqx.com


    pi@webpi:~ $ php /var/www/html/smarthome/tele-stat.php
    PHP Fatal error: Uncaught Error: Call to undefined method PhpMqtt\Client\ConnectionSettings::setUsername() in /var/www/html/smarthome/tele-stat.php:25
    Stack trace:
    #0 {main}
    thrown in /var/www/html/smarthome/tele-stat.php on line 25


    danke

  • “Since, in the long run, every planetary society will be endangered by impacts from space, every surviving civilization is obliged to become spacefaring — not because of exploratory or romantic zeal, but for the most practical reason imaginable: staying alive.” — Carl Sagan, Pale Blue Dot

  • MagicBird Nein, warum solltest Du etwas am Quelltext einer fremden Bibliothek ändern müssen‽ Zumal das ja auch noch explizit private Attribute sind. Die öffentliche API dazu sind die Getter- und Setter-Methoden.

    Hast Du vielleicht new vergessen, oder die Klammern damit die Methode auf dem neu erzeugten Objekt, und nicht auf der Klasse aufgerufen werden?

    “Since, in the long run, every planetary society will be endangered by impacts from space, every surviving civilization is obliged to become spacefaring — not because of exploratory or romantic zeal, but for the most practical reason imaginable: staying alive.” — Carl Sagan, Pale Blue Dot

  • MagicBird
    Vergleiche doch bitte mal die fettgeschrieben Stellen mit deinen Stellen in #1 !

    <?php

    require('vendor/autoload.php');

    use \PhpMqtt\Client\MqttClient;

    use \PhpMqtt\Client\ConnectionSettings;

    $server = 'broker.emqx.io';

    $port = 1883;

    $clientId = rand(5, 15);

    $username = 'emqx_user';

    $password = 'public';

    $clean_session = false;

    $mqtt_version = MqttClient::MQTT_3_1_1;

    $connectionSettings = (new ConnectionSettings)
    ->setUsername($username)
    ->setPassword($password)
    ->setKeepAliveInterval(60)
    ->setLastWillTopic('emqx/test/last-will')
    ->setLastWillMessage('client disconnect')
    ->setLastWillQualityOfService(1);

    $mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);

    $mqtt->connect($connectionSettings, $clean_session);

    printf("client connected\n");

    $mqtt->subscribe('emqx/test', function ($topic, $message) {

    printf("Received message on topic [%s]: %s\n", $topic, $message);

    }, 0);

    for ($i = 0; $i< 10; $i++) {

    $payload = array(

    'protocol' => 'tcp',

    'date' => date('Y-m-d H:i:s'),

    'url' => 'https://github.com/emqx/MQTT-Client-Examples'

    );

    $mqtt->publish(

    // topic

    'emqx/test',

    // payload

    json_encode($payload),

    // qos

    0,

    // retain

    true

    );

    printf("msg $i send\n");

    sleep(1);

    }

    $mqtt->loop(true);

  • PHP Fatal error: Uncaught Error: Class 'ConnectionSettings' not found in /var/www/html/smarthome/tele-stat.php:22
    Stack trace:
    #0 {main}
    thrown in /var/www/html/smarthome/tele-stat.php on line 22

  • MagicBird Was heisst Du hast die ConnectionSettings.php neu angelegt? Die ist Bestandteil einer Bibliothek. Die muss man installieren wenn man sie benutzen will. Und nicht selber irgendwelche Dateien einzeln anlegen.

    “Since, in the long run, every planetary society will be endangered by impacts from space, every surviving civilization is obliged to become spacefaring — not because of exploratory or romantic zeal, but for the most practical reason imaginable: staying alive.” — Carl Sagan, Pale Blue Dot

  • Wenn ein User mit PW verlangt wird, ist das in der Broker Konfig auch so hinterlegt.
    In der mosquitto Konfig kannst Du einstellen, ob Du User/PW verwenden willst oder nicht.

    Hier mal die Konfig im Detail:

    mosquitto/mosquitto.conf at master · eclipse/mosquitto (github.com)

    Das Einzige, was bei mir aktiviert ist, ist das hier:

    Code
    allow_anonymous true
    listener 1883

    Bei den genutzten Apps/Skripten/Programmen kann dann entweder die Eingabe leer bleiben oder wenn was verlangt wird (vom Client), ist egal, was man angibt, es wird dann von mosquitto normalerweise ignoriert.

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 8GB (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • So sieht es bei mir auch aus.

    Neuinstallation von Openhab nun die Version 4

    Demnach vermute ich aber dass OH in der neuen Version verlangt dass man Credentials bei einem MQTT Broker nutzen muss. Das finde ich prinzipiell auch richtig sofern die Kommunikation nicht im lokalen Netz stattfindet. Aber dass das required und nicht optional ist finde ich schon ziemlich schraeg.

  • Naja, mal getestet, ob das mit der obigen Konfig nicht trotzdem klappt ??

    Ich hatte auch die eine oder andere Anwendung, die Eingaben verlangt hat aber mit dem anonymous in der Konfig egal war, was man eingegeben hat.

    Ich kenne OH leider nicht aber ich habe in anderen Projekten viel mit MQTT gemacht.

    ;) Gruß Outi :D
    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Tests) / Pi 400 (BW) / 1x Pi 5 8GB (BW) / 2x Pi Pico / 2x Pi Pico W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Bertthias In dein Beitrag #14 schreibst du die Installation ist zu beachten. wäre zu klären da ich noch php 7.3 am laufen habe und das php-mqtt möchte gerne ab version 8.


    Wenn es klappen würde, würde ich natürlich gerne Username und Passwort wieder deaktieren aber in einem schnellen test, konnte ich keine Verbindung aufbauen.

    Vielleicht müsste ich den openhabian neustarten.

    aber ich fand gestern abend folgendes

    GitHub - bluerhinos/phpMQTT: a simple php class to connect/publish/subscribe to a MQTT broker

    das ist noch einfacher und hat sofort funktioniert.


    lars

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!