PIXEL

MQTT

MQTT (MQ Telemetry Transport or Message Queue Telemetry Transport) è un protocollo ISO standard (ISO/IEC PRF 20922) di messaggistica leggero di tipo publish-subscribe posizionato in cima a TCP/IP. È stato progettato per le situazioni in cui è richiesto un basso impatto e dove la banda è limitata. Il pattern publish-subscribe richiede un message broker. Il broker è responsabile della distribuzione dei messaggi ai client destinatari.

Il protocollo è stato inventato da Andy Stanford-Clark di IBM, e Arlen Nipper di Cirrus Link Solutions nel 1999.

(da Wikipedia)

MQTT Broker & Clients

Ho scelto MQTT per le sue caratteristiche di leggerezza e dovrebbe sostituire, dove l’ambiente lo consente, la gestione dei webservices in HTTP. Il software è sviluppato in PHP.

StatoSoftwareDocumentazioneEsempi

In corso di testing per utilizzo.

https://github.com/mgdm/Mosquitto-PHP/tree/master/examples

Esempio di client orologio

Orologio virtuale
<?php
global $topic;
global $client;
global $limite;

$terminale = 'client.terminal.orologio';
$subterm = 'orologio';
$topic = '/presenze/orologio';

$client = new Mosquitto\Client($terminale, false);
$client->setCredentials('root', '1m42s11m0');
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
$client->connect("localhost", 1883, 5);
$client->subscribe($topic, 1);

$limite = 1;

for ($i = 0; $i < $limite; $i++) {
  $client->loop();
  $mid = $client->publish('/presenze/programma', "$i|$subterm| ti manda un messaggio n.: $i alle: " . date('Y-m-d H:i:s'), 1, 0);
  //echo "Inviato messaggio a /presenze/programma da $subterm con ID: {$mid} n. $i\n";
  $client->loop();

  sleep(2);

}

$client->loopForever(); 

/* -------------------------------------------------------------- */

function connect($r) {
  if($r != '0'){
    echo "Codice ottenuto: {$r}\n";
  }
}

function subscribe() {
  global $topic;

  echo "Iscritto al topic: $topic\n";
}

function message($message) {
  global $client;
  global $limite;

  //printf("Ho ricevuto con ID %d da %s che diceva:\n%s\n\n", $message->mid, $message->topic, $message->payload);

  $submsgs = explode("|", $message->payload);

  if($submsgs[1] == 'programma'){
    echo $submsgs[0] . " |" . $submsgs[2] . "\n";
  }
  

  if($submsgs[1] == "programma" && $submsgs[0] == ($limite -1)){

    //echo "Submessage: " . $submsgs[0] . " Limite: " . $limite . "\n$message->payload\n";
    //echo "message count: " . $msgcount . "\n";

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

  }
  
}

function disconnect() {
  echo "Disconnesso regolarmente\n";
}

?>

Hits: 19