Re: Mqtt support in guile?

Mikael Djurfeldt <[email protected]>
Newsgroups gmane.lisp.guile.user
Message-ID <CAA2XvwKdUGk546p9vJE8n15vCwK0XLQO49JEYbOa_cBTnhwPAg@mail.gmail.com>
BTW,

I did:

(mosquitto_message_callback_set mosq (procedure->pointer void
receive-message (list '* '* '*)))

Is it correct to pass '* as argument type for the struct mosquitto_message
pointer (3rd arg)?

On Fri, Nov 1, 2024 at 4:08 PM Mikael Djurfeldt <[email protected]>
wrote:

> Thanks!
>
> Doing the (make-cdata struct-mosquitto_message* message) as well as
> changing cdata-ref to cdata*-ref works fine.
>
> Obviously, what someone should do is to write a nice schemey interface on
> top of what you get with (ffi mosquitto).
>
> Best regards,
> Mikael
>
> On Fri, Nov 1, 2024 at 3:05 PM Matt Wette <[email protected]> wrote:
>
>> And one more thing.   There is a manual for cdata.  There is a link on
>> this page
>>
>> https://www.nongnu.org/nyacc/
>>
>>
>> On 11/1/24 6:37 AM, Matt Wette wrote:
>> > I got this wrong.  Sorry!   This is it.  What I gave previously was
>> > the old fh syntax.
>> >
>> > (msg (make-cdata struct-mosquitto_message* message))
>> >
>> >
>> >
>> > On 11/1/24 6:32 AM, Matt Wette wrote:
>> >> assuming message is a Guile pointer:
>> >>
>> >> (define (receive-message mosq obj message)
>> >>   (let ((msg (make-struct-mosquitto_message* message))
>> >>           (size (cdata-ref msg '* 'payloadsize))
>> >>          (payload (cdata-ref msg '* 'payload))
>> >>   (pointer->string payload size)))
>> >>
>> >>
>> >> On 10/31/24 4:49 PM, Mikael Djurfeldt wrote:
>> >>> Hi Matt,
>> >>>
>> >>> This is very nice indeed! :-)
>> >>>
>> >>> I got a small client working, but I found the unpacking of values in
>> >>> the message callback function a bit cumbersome.  I now have:
>> >>>
>> >>> (define (pointer->struct-mosquitto_message pointer)
>> >>>   (let* ((size (ctype-size struct-mosquitto_message))
>> >>>          (bvec (pointer->bytevector pointer size)))
>> >>>          (Xcdata-ref bvec 0 struct-mosquitto_message))) ;The only
>> >>> way I found that worked! :)
>> >>>
>> >>> (define (receive-message mosq obj message)
>> >>>   (let* ((message (pointer->struct-mosquitto_message message))
>> >>>          (payload (cdata-ref message 'payload))
>> >>>          (size (cdata-ref message 'payloadlen))
>> >>>          (payload (pointer->string payload size)))
>> >>>     (display payload)
>> >>>     (newline)))
>> >>>
>> >>> Is there some more convenient/right way to do that?
>> >>>
>> >>> Best regards,
>> >>> Mikael
>> >>>
>> >>> On Thu, Oct 31, 2024 at 1:02 PM Matt Wette <[email protected]>
>> >>> wrote:
>> >>>
>> >>>     On 10/31/24 1:48 AM, Ricardo G. Herdt wrote:
>> >>>     > Hi,
>> >>>     >
>> >>>     > never did it myself, but you can create some bindings to
>> >>>     libmosquitto
>> >>>     > for your usecase. There are bindings for chicken, one can take
>> >>> some
>> >>>     > inspiration from there:
>> >>>     http://wiki.call-cc.org/eggref/5/mosquitto#api
>> >>>     >
>> >>>     > Regards,
>> >>>     >
>> >>>     > Ricardo
>> >>>     >
>> >>>     > Am 31.10.2024 03:24 schrieb Alan Wedel:
>> >>>     >> I have been working on a controller that uses a
>> >>> microcontroller to
>> >>>     >> read some sensors and publish their data to a mqtt broker. I
>> >>> would
>> >>>     >> like to have a guile program subscribe to the mqtt broker and
>> >>>     log the
>> >>>     >> sensor readings to a file. Is there anyone using guile with
>> >>>     mqtt like
>> >>>     >> this? If so, how are you doing it?
>> >>>     >
>> >>>
>> >>>     Here is a dot-ffi file for mosquitto using nyacc:
>> >>>
>> >>>        (define-ffi-module (ffi mosquitto)
>> >>>          #:pkg-config "libmosquitto"
>> >>>          #:include '("mosquitto.h"))
>> >>>
>> >>>
>> >>>     I just uploaded nyacc-2.01.2, needed to compile above.
>> >>>
>> >>>     refs:
>> >>>     https://savannah.nongnu.org/projects/nyacc
>> >>>     https://www.nongnu.org/nyacc/nyacc-fh-ug.html
>> >>>
>> >>>     Matt
>> >>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >
>> >
>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.