help / color / mirror / Atom feed
From: slos <>
Subject: Re: SimpleComponents / MQTT
Date: Fri, 1 Jul 2022 01:51:26 -0700 (PDT)	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <t9hpds$mqr$>

Le mercredi 29 juin 2022 à 17:00:20 UTC+2, Dmitry A. Kazakov a écrit :
> > Could you please have a look on that behaviour ?
> It means that the other side (mosquitto) dropped the connection. 
> One possible case is when ping timeout (Keep_Alive) is set but the 
> client was silent for the period of time. You should send ping before 
> the timeout expires or reconnect.
Hello Dmitry,
Thanks for your answer.
I had set the "Keep_Alive" parameter :
Send_Connect (Client, "TestMQTTclient", Keep_Alive => 60.0);

If it is not set, one gets :
MQTT client test 1 started
MQTT client connected to
Connect rejected identifier rejected

Indeed, I get exceptions because of this line :
GNAT.Exception_Traces.Trace_On (GNAT.Exception_Traces.Every_Raise);

I have played with mosquitto on localhost and wanted to see what would happen if the broker was shut down.
Problem is that I could not get an information or exception in this case.

So I had to add a check of the ping response in order to know if the broker is still there but maybe you have a better idea.

> > It should be possible to use user name and password but I haven't found how with your implementation. 
> > Could you tell please ?
> User and password are set after TCP/IP connection established during 
> handshake (see Send_Connect).
> > Of course, one should use TLS in this case. Is it feasible and how ?
> Well, MQTT does not require SSL/TLS for user/password during the 
> handshake. But logically yes, without a secure layer (e.g. provided 
> GNUTLS or OpenSSL connection handlers) it makes little sense. 
> With SSL/TLS you could probably map users to certificates/keys and drop 
> user/password, but for the server side it is easier to have them in 
> order to maintain user access rights. 
I use Gnoga as well and there are explanations on how to use SSL/TLS in Gnoga's documentation.
I wondered if such explanations where available to use with MQTT as well.

> (In my opinion MQTT is a toy thing not be used for serious applications, 
> though I admit, it is hugely popular)
Well, there are many toy things used for serious applications ! ;-)
"Ada for Automation" being one of those... created by an Ada amateur...

> > Also, how to provide a timestamp ?
> Hmm, where? MQTT is totally low-level. There are only string topic and 
> string messages, nothing else. Otherwise? if you want to send a time 
> stamp in a message use FILETIME or UNIX time epoch and pack 8 bytes UTC 
> offset to (low or big endian) in the corresponding resolution. MQTT 
> payload need not to be printable. 
You are right. I remember having played with nodes in Node-RED where there was something.
But from :
   C.Publish (Mid => null, Topic => "test", Payload => "[" & GNAT.Time_Stamp.Current_Time & "] Hej", Qos => QOS_0, Retain => False);
or :
   Publish timestamp and temperature information to a remote host on a non-standard port and QoS 0:
    mosquitto_pub -h -p 1885 -t sensors/temperature -m "1266193804 32"
The timestamp is just part of the message string.

Unrelated, you have created your packages as childs of GNAT.Sockets.
Although it seems not a problem for using them, the applications can be built, that seems to be a problem for code navigation with GNAT Studio, even in latest version.
Is that a limitation of the tool or something I'm doing wrong ?

By the way, thanks to your MQTT implementation, this demo application is sending SIEMENS S7 PLC data to the mosquitto broker :

> -- 
> Regards, 
> Dmitry A. Kazakov 
Best Regards,

  reply	other threads:[~2022-07-01  8:51 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-29 10:15 SimpleComponents / MQTT slos
2022-06-29 15:00 ` Dmitry A. Kazakov
2022-07-01  8:51   ` slos [this message]
2022-07-01 11:05     ` Dmitry A. Kazakov
2022-07-01 13:22       ` slos
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox