There are 2 websocket servers:
-
terminal websocket used to stream data to webUI and exchange internal data
-
data websocket used to exchange data with external client (not used by WebUI)
Terminal websocket
use subprotocol webui-v3
and port is same as web port but use address /ws
text mode
Reserved
messages between webui / ESP
Format: <label>:<message>
-
from ESP to WebUI
-
currentID:<id>
Sent when client is connecting, it is the last ID used and become the active ID -
activeID:<id>
Broadcast current active ID, when new client is connecting, client without this isshould close, ESP WS Server close all open WS connections but this one also -
PING:<time left>:<time out>
It is a response to PING from client to inform the time left if no activity (see below) -
ERROR:<code>:<message>
If an error raise when doing upload, it informs client it must stop uploading because sometimes the http answer is not possible, or cannot cancel the upload, this is a workaround as there is no API in current webserver to cancel active upload -
NOTIFICATION:<message>
Forward the message sent by [ESP600] to webUI toast system -
SENSOR: <value>[<unit>] <value2>[<unit2>] ...
The sensor connected to ESP like DHT22
-
-
from WebUI to ESP
PING:<current cookiesessionID / none >
if any, or "none" if none
binary mode
Reserved
-
from ESP to WebUI stream data from ESP to WebUI
-
from WEBUI to ESP
[-> File transfert from WebUI to ESP : not implemented yet]
Data websocket
use sub protocol arduino
and port same as web port but use address /wsdata
text mode
This mode is used to transfert all GCODE commands and their answers from printer/cnc
binary mode
This mode is used to transfert files to / from esp board
it use frame of 1024 bytes, can be increased after test
the frame format is : 2 bytes: for frame type 2 bytes: for frame size to check some integrity, currently as already part of frame no checksume is used x bytes : extra data according frame type
Frame types
Query status frame
type: client -> esp Status Request:
S |
R |
0 | 0 |
---|---|---|---|
with hexadecimal values:
0x53 | 0x52 | 0 | 0 |
---|---|---|---|
Response frame use inverted header: Response Status:
R |
S |
0 | 1 | A |
---|---|---|---|---|
with hexadecimal values:
0x52 | 0x53 | 0 | 1 | 0x41 |
---|---|---|---|---|
the first byte of answer is the state:
Code | Hexa | Meaning |
---|---|---|
B |
0x42 | busy |
O |
0x4F | idle/ok |
E |
0x45 | error |
A |
0x41 | abort |
D |
0x44 | download ongoing |
U |
0x55 | upload ongoing |
extra data may be added :
For Error:
error code and string, 1 byte : error code: 0->255 1 byte : string size 0->255 XX bytes for the string
R |
S |
x | x | C |
4 | X | .. | .. |
---|---|---|---|---|---|---|---|---|
For Upload:
Upload informations: 1 byte : path size 0->255 XX bytes : the path string 1 byte : the filename size 0->255 xx bytes : filename string 4 bytes : total file size 4 bytes : currently processed bytes 4 bytes : last packet id processed
R |
S |
x | x | U |
X | .. | .. | X | .. | .. | S1 | S1 | S1 | S1 | S2 | S2 | S2 | S2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
For Download:
Download informations: 1 byte : path size 0->255 XX bytes : the path string 1 byte : the filename size 0->255 xx bytes : filename string 4 bytes : total file size 4 bytes : currently processed bytes 4 bytes : last packet id processed
R |
S |
x | x | D |
X | .. | .. | X | .. | .. | S1 | S1 | S1 | S1 | S2 | S2 | S2 | S2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Start upload frame
header is :
S |
U |
0 | 0 |
---|---|---|---|
the content is: 1 byte : path size 0->255 XX bytes : the path string 1 byte : the filename size 0->255 xx bytes : filename string 4 bytes : total file size
S |
U |
x | x | D |
X | .. | .. | X | .. | .. | S1 | S1 | S1 | S1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
if answer is :
U |
S |
0 | 1 | O |
---|---|---|---|---|
it means transfert can start
Transfert upload frame
header is :
U |
P |
x | x | ID | ID | ID | ID | .. | .. |
---|---|---|---|---|---|---|---|---|---|
4 bytes is packet id XXXX bytes is data
if packet is received the answer is:
P |
U |
0 | 5 | O |
ID | ID | ID | ID |
---|---|---|---|---|---|---|---|---|
Start dowload frame
header is :
S |
D |
0 | 0 |
---|---|---|---|
the content is: 1 byte : path size 0->255 XX bytes : the path string 1 byte : the filename size 0->255 xx bytes : filename string 4 bytes : total file size
S |
D |
x | x | D |
X | .. | .. | X | .. | .. | S1 | S1 | S1 | S1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
if answer is :
D |
S |
0 | 1 | O |
---|---|---|---|---|
it means transfert can start
Transfert download frame
header is :
D |
P |
x | x | ID | ID | ID | ID | .. | .. |
---|---|---|---|---|---|---|---|---|---|
4 bytes is packet id XXXX bytes is data
if packet is received the answer is :
P |
D |
0 | 5 | O |
ID | ID | ID | ID |
---|---|---|---|---|---|---|---|---|
Command frame
header is :
C |
M |
0 | 1 | X |
---|---|---|---|---|
Commands:
Code | Hexa | Meaning |
---|---|---|
A |
0x41 | abort |
Abort command frame
C |
M |
0 | 1 | A |
---|---|---|---|---|