• Public
  • Public/Protected
  • All

Broadcast when a newly powered mesh node wants to find a node num it can use Sent from the phone over bluetooth to set the user id for the owner of this node. Also sent from nodes to each other when a new node signs on (so all clients can have this info)

The algorithm is as follows: when a node starts up, it broadcasts their user and the normal flow is for all other nodes to reply with their User as well (so the new node can build its nodedb) If a node ever receives a User (not just the first broadcast) message where the sender node number equals our node number, that indicates a collision has occurred and the following steps should happen:

If the receiving node (that was already in the mesh)'s macaddr is LOWER than the new User who just tried to sign in: it gets to keep its nodenum. We send a broadcast message of OUR User (we use a broadcast so that the other node can receive our message, considering we have the same id - it also serves to let observers correct their nodedb) - this case is rare so it should be okay.

If any node receives a User where the macaddr is GTE than their local macaddr, they have been vetoed and should pick a new random nodenum (filtering against whatever it knows about the nodedb) and rebroadcast their User.

A few nodenums are reserved and will never be requested: 0xff - broadcast 0 through 3 - for future use


from protobuf message User


  • User




antAzimuth: number

Directional antenna true azimuth if applicable, in degrees (0-360) Only applicable in case of stationary nodes with a directional antenna Zero = not applicable (mobile or omni) or not specified (use a value of 360 to indicate an antenna azimuth of zero degrees)


from protobuf field: uint32 ant_azimuth = 12;


antGainDbi: number

Antenna gain (applicable to both Tx and Rx), in decibel-isotropic


from protobuf field: uint32 ant_gain_dbi = 11;


hwModel: HardwareModel

TBEAM, HELTEC, etc... Starting in 1.2.11 moved to hw_model enum in the NodeInfo object. Apps will still need the string here for older builds (so OTA update can find the right image), but if the enum is available it will be used instead.


from protobuf field: HardwareModel hw_model = 6;


id: string

A globally unique ID string for this user. In the case of Signal that would mean +16504442323, for the default macaddr derived id it would be !<8 hexidecimal bytes>. Note: app developers are encouraged to also use the following standard node IDs "^all" (for broadcast), "^local" (for the locally connected node)


from protobuf field: string id = 1;


isLicensed: boolean

In some regions HAM radio operators have different bandwidth limitations than others. If this user is a licensed operator, set this flag. Also, "long_name" should be their licence number.


from protobuf field: bool is_licensed = 7;


longName: string

A full name for this user, i.e. "Kevin Hester"


from protobuf field: string long_name = 2;


macaddr: Uint8Array

This is the addr of the radio. Not populated by the phone, but added by the esp32 when broadcasting


from protobuf field: bytes macaddr = 4;


shortName: string

A VERY short name, ideally two characters. Suitable for a tiny OLED screen


from protobuf field: string short_name = 3;


team: Team

Participants in the same network can self-group into different teams. Short-term this can be used to visually differentiate them on the map; in the longer term it could also help users to semi-automatically select or ignore messages according to team affiliation. In total, 14 teams are defined (encoded in 4 bits)


from protobuf field: Team team = 8;


txPowerDbm: number

Transmit power at antenna connector, in decibel-milliwatt An optional self-reported value useful in network planning, discovery and positioning - along with ant_gain_dbi and ant_azimuth below


from protobuf field: uint32 tx_power_dbm = 10;

Generated using TypeDoc