12-18-2024, 04:04 PM
Sprawdzilem z php8.3.1 (taka wersje mialem na dysku) na serwerze lokalnym i na mqtt.ats.pl. W obu przypadkach na standardowym porcie 1883 bez szyfrowania. Uruchamialem z konsoli "php plik.php" majac glowny plik i biblioteke phpMQTT.php w tym samym folderze.
Odrobinke zmodyfikowalem wczesniejszy skrypt. W kodzie zmienic wartosci $server, $username, $password, $prefix, $topic oraz $message_count. Opcjonalnie petle wysylajaca testowe wiadomosci mozna zamienic na wielokrotne wywolanie $mqtt->publish, w dzialaniu nie ma roznicy. Biblioteke pobralem:
Po wywolaniu skryptu pojawialy sie jedna lub wiecej wiadomosci na serwerze (zaleznie od wartosci $message_count).
Odrobinke zmodyfikowalem wczesniejszy skrypt. W kodzie zmienic wartosci $server, $username, $password, $prefix, $topic oraz $message_count. Opcjonalnie petle wysylajaca testowe wiadomosci mozna zamienic na wielokrotne wywolanie $mqtt->publish, w dzialaniu nie ma roznicy. Biblioteke pobralem:
Cytat:git clone https://github.com/bluerhinos/phpMQTT.git
Po wywolaniu skryptu pojawialy sie jedna lub wiecej wiadomosci na serwerze (zaleznie od wartosci $message_count).
Kod PHP:
<?php
require('phpMQTT.php');
$server = 'ADRES_IP_LUB_DOMENA_SERWERA'; // change if necessary
$port = 1883; // change if necessary
$username = 'NAZWA_KLIENTA_MQTT'; // set your username
$password = 'HASLO_KLIENTA_MQTT'; // set your password
$prefix = 'PREFIX_TEMATOW_MQTT'; // Prefix do tematow MQTT
$topic = 'FRAGMENT_TEMATU_MQTT'; // Bazowy temat ktory bedzie dodany do $prefix, tak ze finalny temat to $prefix/$topic(numer jesli $message_count > 1)
$message_count = 1; // Ilosc wiadomosci do wyslania "na raz" o losowej tresci z tematami zlozonymi z $prefix i $topic
// bin2hex... generuje losowy string, tak by client_id byly unikalny. Nalezy przy tym pamietac ze taki klient powinien laczyc sie z ustawiona flaga clean_session (pierwszy parametr w $mqtt->connect).
$client_id = 'phpMQTT-' . bin2hex(random_bytes(8)); // make sure this is unique for connecting to sever - you could use uniqid()
$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);
if ($mqtt->connect(true, NULL, $username, $password)) {
// $mqtt->publish przyjmuje parametry: temat, tresc wiadomosci, QoS, flaga Retain (chyba :P)
if ($message_count <= 1) {
$mqtt->publish($prefix.'/'.$topic, strval(random_int(0,20)), 0, false);
} else {
for ($i = 1; $i <= $message_count; $i++) {
$mqtt->publish($prefix.'/'.$topic.strval($i), strval(random_int(0,20)), 0, false);
}
}
$mqtt->close();
} else {
echo "Time out!\n";
}