We used firechat for team comms while deployed to Puerto Rice. I should say we tried. Firechat absolutely ate cell batteries; typically within a few hours. Used 4 mesh units for comms with team leaders but that was a challenge in in hospital building where we worked.
That’s a good idea – I think we try not to be self-promotional but if others were interested of course we can share. In this case I did post an entire thread about it!
Not sure I’d call it an app. I’m advocating some small changes to the goTenna devices to allow ALL apps to use an internet uplink for any non-local GID. I don’t particularly want to write my own chat app for multiple platforms when there already is one. Basically the gotenna in “router mode” would connect with a phone, tablet, laptop, raspberry Pi or similar with an internet uplink. Message would try for local delivery for some amount of time, then let the router know there’s a pending message. Once the router is notified it would attempt a DHT lookup for that GUID to find a IP address (IPv4 or IPv6) and port number. If successful it would forward any encrypted messages intended for that GUID to the right router.
Using this method gotenna apps wouldn’t have to change. Seems like the changed to enable this would be small, but the current SDK can’t manage this from what I can tell.
I can imagine putting all the smarts in the smartphone app side, but then only that app could enjoy the internet uplink. No current gotenna apps could take advantage. Chances are the adoption would be close to 0% for most users who unbox the device and install the default gotenna app. So close to 100% of the market wouldn’t be able to use that feature. Also any state the goTenna’s learn about each other would have to be replicated in a way visible to the applications. Can’t see a way to do this without doubling the overhead of the network.
I’m guessing, but I’m imagining something like /proc/net/arp for tracking local (within a few hops) GUIDs. Probably a timer for each one. Potentially a packet loss rate, or signal strength. To hide that from your internet link is going to cause additional overhead.
Indeed, the most efficient thing would be if the goTenna’s knew about the routers and would forward undelivered messages to that router. Or reversing that if the SDK allowed querying the goTenna devices about undelivered messages. Something like:
(GUID,Length) = list_pending_messages(connected_gotenna)
(GUID_list) = list_local_GUIDs()
Then the ability to send/receive with something like:
(list_of_messages,error) = get_unsent_messages(GUID)
(error) = put_messages(GUID,Message_list)
That way a router would know what devices are local, and could get a list of (encrypted) pending messages. With put/get the router could retrieve or insert messages to allow them to (mostly) transparently travel between local mesh’s of goTenna users.
The overall overhead should be much lower if the goTenna devices are aware of the routers and can make intelligent decisions based on whatever metadata is stored on device.
Yes, but only for applications I write, not for default chat. Additionally this will double or so the overhead of maintaining the network.
Heh, yeah, wifi and 4G are flirting with Gigabit/sec speeds, Gotenna is around 150 bit/sec or roughly a factor of 6,000. But I totally agree slow data is better than none. I can see a long/lat + GUID message being worthwhile to send updates every 10 minutes or something. Although not sure how useful it is. Either another goTenna is in range… or it’s not. The map doesn’t really directly impact that, it would be fun to watch though.
Sounds like USENET or Fidonet. With the bandwidth so low or if you want to think of each byte being expensive not sure it’s worth publishing web pages poorly/slowly and consuming a large fraction of the available bandwidth for bytes that may or may not be actually read by a human. Things like GPS coordinates of a human, hazards, weather warnings, and the like are small, valuable, and useful. Even just the ticker that show on the bottom of news sites would pretty much swamp the goTenna network. So sure firefighters might want realtime humidity, temp, and fire positions. Friends want positions/chats of other friends. Public sevice announcements “This park is closing @ 7pm and the gate to the parking lot will be locked at 7:30pm” and the like. But much more than that sounds problematic. Even a 1200 BPS modem from the very early days of the internet is quite a bit faster than a goTenna.
With all that said I could see the local router running a simple protocol for current queries like:
- Ping (is the network working)
- What time is it?
- Current temp, expected high/low, local weather in the next 12 hours (in text)
- current event update (ski lifts open/closed, park closing, public safety, highway closings, )
- When did you last see GUID?
All would require a single short message to query and a single message to respond. The router admin could make decisions on who could update and what to offer. But something as general as send me this web page or diffs to this page could be quite a bit. Just to give you an example. This webpage (no graphics, just the HTML/CSS for this forum posts) represents 63,000 bytes. That would max out a gotenna for 53 Minutes! Many web pages are 10-100 times larger.
I need some input.
How do we do encryption?
How do we handle devices not connected to a Gotenna?
I’m thinking email style. Username@GID for example although that would be assuming we knew what GID the end user was connected to.
I have one way communication to the internet working. Next will be internet to Gotenna which is more difficult.
Encryption is handled at the app layer.
When you initiate your 1st Private 1-to-1 conversation, the app initiates a key exchange with the recipient.
We haven’t implemented anything ourselves yet. SMS network relay is 1-way.
Yes, this will be slightly more difficult.
Basically, you can continue to use a GID to uniquely identify an app user in the internet. Using a web service, you can attempt to send data to this GID via all nodes that have connectivity. Use location data to narrow down the region. The recipients app can then forward this message via a Private 1-to-1 message onto the final recipient.
That being said we do plan on making this 2-way next year…
I was thinking about how I would exchange keys to from endpoints that are connected via an internet hop. Possibly nodes that haven’t previously talked. I would rather not decrypt and then re-encrypt at the internet entry/exit points.
I’ll need to spend some time looking at the encryption aspect. I’m still a noob when it comes to implementing encryption.
Holler if I can be of help. This is in my wheelhouse. Feel free to private message if of use.
I have a different iteration of the original idea although I’m still working on my current project.
When the USB SDK is launched I see people directly connecting their Gotenna Mesh with a router. The router would then be able to send message across the WiFi link or internet. Once they reach the other side of a 60 watt EIRP link(this is legal for point to point), internet link, or possibly a WiFi mesh link the signal can be sent to the recipient. This would be done via another Gotenna Mesh also connected to the a router or to a device connected to the WiFi connection of said router. That could be a Phone, tablet, or whatever…
Alright, I am one step closer to making something like this happen. I just got done coding a Class to allow an internet / intranet connected node to receive messages from a computer, tablet, phone, other device… It’s only a test implementation that will be power hungry. I’ll probably write a java app for testing so I can talk between my PC and an Android device that is connected to a Gotenna Mesh. The Mesh unit will be located outside on a temporary mast elevated 20+ feet in the air.
The idea is that I can send out a few shouts with my IP to Mesh Gateway and hopefully receive a response or two from some other Gotenna Mesh users which I believe are just outside my usual range. The Bluetooth LE isn’t powerful enough for me to connect from inside my house but WiFI is.
I was thinking alternatively of an HTML5 app because that would run on most devices without installation or sideloading but I think that is for a later time.
EDIT: The HTML5 app would only talk to a Mesh to IP gateway.
Is 2-way SMS still coming? I just tried it and it didn’t work.