Reading ZMQ messages in Python

Hello,

I have a flowgraph that send ZMQ PUB messages generated by a custom
OOT block. The messages transmitted by GNURadio ZMQ PUB block are
received by a Python application, using a standard ZMQ Library.

[custom_oot_block] —(GNURadio message)—> [ZMQ Publisher]
…(ethernet)…> [Python ZMQ SUB Library]

This is the part of the code of the OOT block that creates the message:


float *outPdPfa = (float *) output_items[0];

pmt::pmt_t msg = pmt::init_f32vector(1, outPdPfa);
message_port_pub(pmt::mp(“hard_decision”), msg);

In Python, I receive the transmitted message and this is some of the
strings that are received:

‘\n\x08\x00\x00\x00\x01\x01\x00?\xe4\xbe\x83\x00\x00\x00\x00’
‘\n\x08\x00\x00\x00\x01\x01\x00?\xe5R\xb5 \x00\x00\x00’
‘\n\x08\x00\x00\x00\x01\x01\x00?\xe4B0\xa0\x00\x00\x00’
‘\n\x08\x00\x00\x00\x01\x01\x00?\xe4\xa3\\xa0\x00\x00\x00’
‘\n\x08\x00\x00\x00\x01\x01\x00?\xe5jV\xa0\x00\x00\x00’
‘\n\x08\x00\x00\x00\x01\x01\x00?\xe4\xf8\x00\x00\x00\x00\x00’
‘\n\x08\x00\x00\x00\x01\x01\x00?\xe4\x90\x00\x00\x00\x00\x00’

How do I convert these strings to a floating number value?

Thank you.

Regards,
Daniel

try struct.unpack()

Hi,

the “right way” to do this is use PMT’s python bindings:

import pmt
s=’\n\x08\x00\x00\x00\x01\x01\x00?\xe4\xbe\x83\x00\x00\x00\x00’
p = pmt.deserialize_str(s)
python_numpy_array = pmt.pmt_to_python.pmt_to_python§

Best regards,
Marcus

Hi Marcus,

I was missing the “deserialize” call. I’ll try it tomorrow.

Thank you.
Regards,
Daniel

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs