Giter Site home page Giter Site logo

liamcottle / meshtastic-websocket-proxy Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 0.0 49 KB

Proxies ToRadio and FromRadio packets between a single Meshtastic device and multiple websocket clients.

License: MIT License

JavaScript 100.00%
meshtastic protobuf websocket meshtasticd

meshtastic-websocket-proxy's Introduction

Meshtastic Websocket Proxy

Proxies ToRadio and FromRadio packets between a single Meshtastic device and multiple websocket clients.

The /api/v1/fromradio endpoint of the Meshtastic HTTP API only supports one client connection at a time. If you have more than one client fetching the fromradio endpoint, one of the clients will "consume" those packets from the device, and they will not be received by the other clients.

This is an issue if you want to have several different applications listening to packets from a single Meshtastic device. To combat this, this project expects to be the only client connecting to your Meshtastic device. It runs a simple websocket server, which will forward all FromRadio packets received from the device to all clients connected to the websocket.

You will be able to connect multiple clients to the websocket, and all connected clients will receive the same packets. The websocket also allows multiple clients to send packets to the radio at the same time.

How to run it?

node src/index.js --help
Meshtastic Websocket Proxy

  Proxies ToRadio and FromRadio packets between a single Meshtastic device and multiple WebSocket clients.                                                   

Options

  -h, --help                 Display this usage guide.
  --meshtastic-host string   IP address of Meshtastic device (default: 127.0.0.1)
  --meshtastic-tls string    Use TLS when connecting to Meshtastic device (default: true)
  --websocket-port number    Port to run Websocket Server on (default: 8080)
  --ignore-history string    When enabled, does not send packets to websocket clients if rxTime is before we connected to the device (default: true)

To proxy Meshtastic Linux Native over a websocket on port 8080, you could do something like the following;

node src/index.js --meshtastic-host 127.0.0.1 --websocket-port 8080

Alternatively, you can run the latest version directly from npm without downloading the source.

npx @liamcottle/meshtastic-websocket-proxy --meshtastic-host 127.0.0.1 --websocket-port 8080

How to use the websocket?

The websocket sends and receives json payloads, containing base64 encoded protobuf.

For example, when your Meshtastic device receives a TEXT_MESSAGE_APP packet, it will send the following payload to all connected websocket clients;

{
   "type": "from_radio",
   "protobuf": "EjsNwHJFchUhJhvrIg8IARILSGVsbG8gTWVzaCE1JYEXZz0EkCNmRQAAwEBIBVABYO3//////////wF4BQ==",
   "json": {
      "packet": {
         "from": 1917153984,
         "to": 3944424993,
         "decoded": {
            "portnum": "TEXT_MESSAGE_APP",
            "payload": "SGVsbG8gTWVzaCE="
         },
         "id": 1729593637,
         "rxTime": 1713606660,
         "rxSnr": 6,
         "hopLimit": 5,
         "wantAck": true,
         "rxRssi": -19,
         "hopStart": 5
      }
   }
}
  • protobuf contains the raw FromRadio packet encoded as base64.
  • json contains a decoded version of the protobuf for ease of use.

You can also send packets to the websocket that will be sent to the radio. This will require you to correctly encode the protobuf and then send it as base64.

For example, to send a text message to the default channel with the text Hello from NodeJS!, you would send the following to the websocket;

{
  "type": "to_radio",
  "protobuf": "Ch0V/////yIWCAESEkhlbGxvIGZyb20gTm9kZUpTIQ=="
}

NOTE: If you are unsure on how to encode the protobuf, see the send.js example script.

TODO

  • Support proxying BLE and Serial connections.
    • This already works, I just haven't exposed that connection method via config yet...

License

MIT

meshtastic-websocket-proxy's People

Contributors

liamcottle avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.