Unpack and Pack
-
Hi there, i want to pack a float in the node and send it over to the gateway. May i know is the format valid?
_LORA_PKG_FORMAT = "BBf" #1byte for device_id, 1 byte for package size, 1 for float
Here is the information that i want it to be pack as a float at Node
D = 10**((Measured_power-rssi)/(10*n)
pkg = struct.pack(_LORA_PKG_FORMAT % len(msg), DEVICE_ID, len(msg), D) lora_sock.send(pkg)
Here is the information that unpack at Gatewaydevice_id, pkg_len, D = struct.unpack(_LORA_PKG_FORMAT % recv_pkg_len, recv_pkg)
I tried this format but i have no received anythings from the node and i tried the example of the Lora Nano-gateway in documentation and it work so i guess is not the firmware problem since i have all lopy updated to the same version.
Any help would be appreciate. Thank you. -
@mj said in Unpack and Pack:
pkg = struct.pack(_LORA_PKG_FORMAT % len(msg), DEVICE_ID, len(msg), D) lora_sock.send(pkg)
Since you have a fixed message length, you can simply use:
struct.pack(FORMAT, DEVICE_ID, 6, D)
and unpack with:
device_id, pkg_len, D = struct.unpack(_LORA_PKG_FORMAT, recv_pkg)
You can even omit sending the pkg_len and pack with:_LORA_PKG_FORMAT = "Bf" #1byte for device_id, 4 for float D = 10**((Measured_power-rssi)/(10*n) pkg = struct.pack(_LORA_PKG_FORMAT, DEVICE_ID, D) lora_sock.send(pkg)and unpack with:
device_id, D = struct.unpack(_LORA_PKG_FORMAT, recv_pkg) -
@robert-hh
I have tried but still showing no response once i uploaded the code.On my Node :
_LORA_PKG_FORMAT = "Bf" DEVICE_ID = 0x01 lora = LoRa(mode=LoRa.LORA, tx_iq=True, frequency = 915000000) lora_sock = socket.socket(socket.AF_LORA, socket.SOCK_RAW) lora_sock.setblocking(False) Measured_power = -37 n = 3 d = (10**((Measured_power-rssi)/(10*n)))/1000 pkg = struct.pack(_LORA_PKG_FORMAT, DEVICE_ID, 6, D) lora_sock.send(pkg)For Gateway :
_LORA_PKG_FORMAT = "Bf" lora = LoRa(mode=LoRa.LORA, rx_iq=True, frequency = 915000000) lora_sock = socket.socket(socket.AF_LORA, socket.SOCK_RAW) device_id, D = struct.unpack(_LORA_PKG_FORMAT, recv_pkg)Is there any mistake? Thank you.
-
@mj SInce the for string for pack contains only two fields, it must be written as:
_LORA_PKG_FORMAT = "Bf" pkg = struct.pack(_LORA_PKG_FORMAT, DEVICE_ID, D)But besides that, the receiver must contains a lora_sock.recv(64) call, in order to get something. Please have a look at the simple examples in the documentation on how the code structure has to be set up.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login