85 lines
2.2 KiB
Markdown
85 lines
2.2 KiB
Markdown
|
About
|
||
|
============
|
||
|
|
||
|
Receive monitoring data from a [squeow]() AM transmitter.
|
||
|
|
||
|
|
||
|
read.py will (using decoder.py) connect to a serial port, print values to stdout, and send values to a
|
||
|
webserver
|
||
|
|
||
|
webserver.py is such a webserver. It provides an authenticated API for receiving values (most likely by
|
||
|
read.py) and an unauthenticated API to get values.
|
||
|
|
||
|
Howto
|
||
|
------------
|
||
|
|
||
|
### Dependencies
|
||
|
|
||
|
```sh
|
||
|
apt install python3-fastapi python3-serial python3-requests
|
||
|
```
|
||
|
|
||
|
### Run
|
||
|
|
||
|
```sh
|
||
|
./read.py -v --baudrate 115200 --wait --device /dev/pts/17 --http-endpoint http://127.0.0.1:8000 --http-auth-file password.txt
|
||
|
```
|
||
|
|
||
|
```
|
||
|
uvicorn webserver:app
|
||
|
```
|
||
|
|
||
|
Serial protocol
|
||
|
--------------------
|
||
|
|
||
|
### Goals
|
||
|
|
||
|
#### receive-only
|
||
|
|
||
|
if you only want to receive data, you shouldn't need to *ask* for data. This makes it possible to connect a
|
||
|
serial port to multiple receivers!
|
||
|
|
||
|
#### machine and human-readable
|
||
|
|
||
|
this software will parse messages, but even if you don't have it around, you should be able to read messages
|
||
|
just opening `minicom`.
|
||
|
|
||
|
### High level description
|
||
|
|
||
|
Messages are started by the 0x01 ascii character (SOH start of heading) and ended by 0x0A ("\n", NL, new
|
||
|
line). A messages needs to be entirely ascii.
|
||
|
|
||
|
There are two types of messages:
|
||
|
- log messages
|
||
|
- dump messages
|
||
|
|
||
|
### Dump messages
|
||
|
|
||
|
Example: ```DMP freq=1234567 temp1=78 temp2=50 alm_temp=0 ros=4095 alm_ros=1```
|
||
|
|
||
|
DMP is just a prefix to indicate the kind of message. Follows a space-separated sequence of key-values. A
|
||
|
value is any string (including numbers, but no spaces). Please only use lowercase letters, numbers, and
|
||
|
underscore (`[a-z0-9_]`).
|
||
|
Values can only be integral positive numbers. Booleans don't have any specific form of support.
|
||
|
|
||
|
It is allowed to send dump messages which only inform the receiver about a part of the state, and not all of
|
||
|
it. It's the receiver's responsibility to keep track of the whole state, and updating it whenever a new dump
|
||
|
message arrives.
|
||
|
|
||
|
### Log messages
|
||
|
|
||
|
Examples :
|
||
|
|
||
|
```
|
||
|
LOG I starting
|
||
|
LOG E overcurrent protection
|
||
|
```
|
||
|
|
||
|
`LOG` is just a prefix.
|
||
|
Then a space
|
||
|
Then a single capital letter indicating the severity of the message.
|
||
|
Then a space.
|
||
|
Whatever follows is the actual message
|
||
|
|
||
|
This makes it possible for debug messages to be sent.
|