Source code for gatenet.mesh.lora

"""
gatenet.mesh.lora — LoRaRadio for custom LoRa-based messaging and packet handling.

Example:
    from gatenet.mesh.lora import LoRaRadio
    lora = LoRaRadio()
    lora.send_message('Ping', dest='node3')
    packets = lora.receive_packets()
"""

from typing import List, Dict, Optional
import random
from .radio import MeshRadio

[docs] class LoRaRadio(MeshRadio): """ LoRaRadio for custom LoRa-based messaging. Example: >>> from gatenet.mesh.lora import LoRaRadio >>> lora = LoRaRadio() >>> lora.send_message('Ping', dest='node3') >>> packets = lora.receive_packets() """
[docs] def send_message(self, msg: str, dest: str, rf_signal=None, frequency: Optional[float] = None) -> bool: """ Send a message to a destination node using LoRa protocol, optionally with RF info. Example: >>> lora.send_message('Ping', dest='node3', rf_signal={"freq": 915000000}, frequency=915.0) """ packet = { "src": "self", "dest": dest, "msg": self._encrypt(msg), "frequency": frequency or 915.0, "timestamp": random.randint(100000, 999999), "rf_signal": rf_signal } self.packets.append(packet) self._update_topology(dest) return True
[docs] def receive_packets(self) -> List[Dict]: """ Receive and decrypt all LoRa packets sent by this node. Example: >>> lora = LoRaRadio() >>> packets = lora.receive_packets() """ return [self._decrypt_packet(pkt) for pkt in self.packets if "frequency" in pkt]