Synchronet v3.20 can publish and subscribe to message “topics” on a configured MQTT broker.
As enabled and configured in SCFG->Networks->MQTT:
╔══════════════════════════════════════╗ ║ Message Queue Telemetry Transport ║ ╠══════════════════════════════════════╣ ║ │Enabled Yes ║ ║ │Broker Address 192.168.1.2 ║ ║ │Broker Port 1883 ║ ║ │Username ║ ║ │Password ║ ║ │Keep-alive 60 seconds ║ ║ │Protocol Version 5 ║ ║ │Publish Verbosity High ║ ║ │Publish QOS 0: At most once ║ ║ │Subscribe QOS 2: Exactly once ║ ║ │Log Level Informational ║ ║ │TLS (encryption) Off ║ ╚══════════════════════════════════════╝
Most Synchronet MQTT messages are published with the retain flag enabled. Retained messages published before a client/subscriber connects will still be received (upon new client connection) until until the broker is restarted or the retained messages are explicitly removed from the broker.
Synchronet MQTT message topics start with sbbs/BBSID
where BBSID
is the System's BBS ID (for QWK Packets) as configured in SCFG->Message Options. It's possible for a single MQTT broker to serve multiple Synchronet BBSes in this way. The full BBS name is published to this topic level (not a leaf topic). For example:
sbbs/MYBBS = My Brand-new BBS
All leaf topics are published as children of the sbbs/BBSID
topic under 3 main branches:
sbbs/BBSID/node
- BBS nodessbbs/BBSID/host
- Server hostssbbs/BBSID/action
- Client actions (events)
All MQTT messages published by Synchronet contain just plain text (US-ASCII characters), the one exception being sbbs/+/node/+/output
topics that include terminal control characters/sequences. Numeric values, unless otherwise are specified, are represented in US-ASCII decimal characters.
The BBS's terminal server nodes (servicing terminal connections via Telnet, SSH, RLogin, Raw TCP) can be monitored and controlled via MQTT.
Under the sbbs/BBSID/node
hierarchy, you'll find a sub-topic for each BBS node, with the total node count published to the node
topic, for example:
sbbs/MYBBS/node = 4 total
In “High” Publish Verbosity mode, human-readable node status messages are published directly to node/+
topics. For example:
sbbs/MYBBS/node/1 = Bubbaboy at external program menu via telnet sbbs/MYBBS/node/2 = At login prompt via telnet sbbs/MYBBS/node/3 = At login prompt via telnet sbbs/MYBBS/node/4 = Waiting for connection
Sub-topics of each node/+
topic include:
load/nodedefs.js
for details)Example:
sbbs/VERT/node/1/status = 0 0 1 65535 0 0 0 7 sbbs/VERT/node/1/terminal = 80 24 syncterm ANSI CP437 6 0 2005
Nodes can be controlled by publishing messages to the following topics:
A single Synchronet BBS can be split across multiple instances running on separate inter-networked host computers. Each host will be represented with its own sub-topic of the sbbs/BBSID/host
topic. For example:
sbbs/MYBBS/host/MYCOMPUTER sbbs/MYBBS/host/rPi sbbs/MYBBS/host/ubuntu
The public host name (configured in ctrl/sbbs.ini
) of the host is published to this topic level (not a leaf). For example:
sbbs/MYBBS/host/MYCOMPUTER = mybbs.synchro.net
The control and monitoring of a specific Synchronet instance is done through this “host sub-topic” tree.
Host sub-topic | Description |
---|---|
recycle | Publishing any message to the recycle sub-topic of any host topic will initiate a recycling of that host's servers (all of them). |
pause | Publishing any message to the pause sub-topic of any host topic will initiate pause that host's servers (all of them), preventing the acceptance of any new incoming client connections. |
resume | Publishing any message to the resume sub-topic of any host topic will un-pause that host's servers (all of them), that we previously paused via the pause topic. |
Each Synchronet instance (host) contains the following servers, each represented by its own sub-topic of sbbs/BBSID/host/hostname/server
:
The status of each server is published to its server topic, for example:
sbbs/MYBBS/host/MYCOMPUTER/server/term = ready 1/5 clients 223 served
The state (first field of status) for each server is one of:
The server status contains more details/statistics and is published more often when “High” MQTT->Publish Verbosity is enabled in SCFG.
Server sub-topic | Description |
---|---|
recycle | Publishing any message to the recycle sub-topic of any server topic will initiate a recycling of that server. |
pause | Publishing any message to the pause sub-topic of any server topic will prevent that server from accepting any new incoming client connections. |
resume | Publishing any message to the resume sub-topic of any server topic will un-pause that server, returning to the “ready” state, accepting incoming client connections. |
Each server topic has the following sub-topics for status reporting:
Each server/+
and event
sub-topics has a log child topic where all messages of all log levels (severity) will be published as well as a grandchild topic for each log level (0-7, decreasing in severity) of logged messages.
Log messages published directly to the “log” topic also have a MQTT v5 user property that specifies the log level of each message (for indication / sorting by the receiving client).
Client actions are published to the following BBS-wide topics:
Fields are tab-delimited and begin with a date/time stamp in ISO-8601 format.
The Terminal Server's event thread can be instructed to executed Timed Events or initiate QWKnet call-outs by posting a message to the following topics: