What is STEM?
Did you ever want to have a linked card, but without this pair-to-pair limitations?
Well, you have internet card. And that is already half of the solution. The other half is to use Stem.
Stem is a message transmitter for your OpenComputers devices with internet cards.
Using a small OpenOS library you can use Stem to send and receive messages. Unlike the standard `modem` component, Stem-messaging uses not addresses, but `channels`. You can send messages to any channels, and you can subscribe to any number of channels to listen for messages from them.
The best way is to use HPM:
hpm install stem
If you do not have HPM, install it like this:
pastebin run vf6upeAN
If you do not want to use HPM repository, you can just use wget:
Example of a program using STEM
local event = require('event')
-- use STEM client library
local stem = require('stem')
-- open a connection to a STEM server
-- the `stem.fomalhaut.me` is a default one
local server = stem.connect('stem.fomalhaut.me')
-- subscribe for messages from the channel with ID 'my-channel-id'
-- then listen for events in a loop...
while true do
local name, channel_id, message = event.pull('stem_message')
if name ~= nil then
-- ...or register an event listener
event.listen('stem_message', function(_, _, channel_id, message)
-- you can also send message to the channel
-- (you do not need to be subscribed to this channel, to send a message)
server:send('my-channel-id', 'hello there')
-- unsubscribe from channel
-- completely close the connection to the STEM server
That is all.
But there is more.
If you open the link to Stem server in your browser: https://stem.fomalhaut.me/
You will see some statistics and the web client. Enter your channel ID into the form, and you can send messages to your robot in real time, right from your phone, without even starting Minecraft.
The web client is limited with UTF-8 encoding, though.
(Using OpenOS you can send literally anything, as long as the message fits in 64kb of data.)
The channels by default do not have any special security measures applied. They do not have any authentication mechanisms, the do not have any encryption.
Anyone who knows the ID of a channel can send a message to it and can listen for responses. But.
The length of ID is 256 bytes. And that can be any bytes - from 0 to 255. That means, that you have 256^256 possible combinations for your ID. And that is a giant number. If you need to secure your channel - just use something long and incomprehensible as your ID.
As an additional measure you can use end-to-end encryption, or anything else - this is up to you.
Default STEM server uses HTTPS, and does not store any information - message in, message out.
Self-hosted STEM solution
For those of you who are strong in spirit and computer knowledge - there is a self-hosted option. You can build Stem server from sources and run it on your machine.
This is also pretty easy. Additional instructions can be found on GitLab.
GitLab repository: https://gitlab.com/UnicornFreedom/stem
Protocol description: https://gitlab.com/UnicornFreedom/stem/wikis/protocol
Default server: https://stem.fomalhaut.me/
HPM package: https://hel.fomalhaut.me/#packages/stem
If I forgot something - feel free to ask here, or in IRC (my nickname is Totoro there). Also the project contains at least one "Easter egg" feature, that can offer some interesting options if you know HTML/CSS/JS.
The Stem protocol is open - you can modify it, you can create your own clients in any programming language, etc.