100 lines
3.5 KiB
Markdown
100 lines
3.5 KiB
Markdown
# s0_meter - Der Zähler für S0-Impulse an den RPi-GPIOs
|
|
|
|
## Funktion
|
|
Das Programm s0_meter registriert alle an den configurierten RPi-GPIOs auftretenden Pegeländerungen, speichert diese intern in einer Liste und gibt diese über ein REST-API per HTTP-Request im JSON-Format aus.
|
|
|
|
Das Programm zeichnet alle registrierten Pegeländerungen auf. Eine eventuell notwendige Entprellung der Pulse muss der Client-Applikation erfolgen.
|
|
|
|
## Installation
|
|
Das Programm s0_meter kann in ein beliebiges Verzeichnis abgelegt werden.
|
|
|
|
## Konfiguration
|
|
### GPIOs
|
|
Die Konfiguration der S0-Kanäle und der zugehörigen RPi-GPIOs erfolgt in einer Konfigurationsdatei mit folgendem Format:
|
|
```
|
|
[[channel]]
|
|
id = 1
|
|
gpio = 17
|
|
|
|
[[channel]]
|
|
id = 2
|
|
gpio = 12
|
|
```
|
|
Für jeden Kanal wird die Kanal-ID und die Nummer des RPi-GPIO angegeben. Die Kanal-IDs sind frei wählbar und müssen nicht fortlaufen sein. Für die RPi-GPIOs muss die Nummer angegeben werden, die am RPi-Pfostenstecker steht.
|
|
|
|
Standardmäßig wird die Konfigurationsdatei `/etc/s0_meter.cfg` gelesen. Mit dem Kommandozeilenparameter `-c` kann eine andere Datei angegeben werden.
|
|
## Kommandzeilenargumente
|
|
Die möglichen Kommandozeilenargumente können wie folgt ermittelt werden:
|
|
```
|
|
$ ./s0_meter --help
|
|
s0_meter 0.1.0
|
|
Harald Kube <harald.kube@gmx.de>
|
|
Listen for S0 pulses at the given GPIO pins
|
|
|
|
USAGE:
|
|
s0_meter [OPTIONS]
|
|
|
|
FLAGS:
|
|
-h, --help Prints help information
|
|
-V, --version Prints version information
|
|
|
|
OPTIONS:
|
|
-c, --config <config> The name of the config file (default: /etc/s0_logger.cfg)
|
|
```
|
|
## Beenden des Programms
|
|
Das Programm kann beeendet werden indem z. B. das Signal TERM geschickt wird.
|
|
```
|
|
# kill -TERM <PID des Programms>
|
|
```
|
|
## REST-API
|
|
### Zugang
|
|
Das REST-API ist nur vom localhost unter Port 6310 erreichbar.
|
|
### Format
|
|
Über das HTTP-Protokoll lassen sich vom REST-API folgende Informationen auslesen:
|
|
#### Abfrage der Kanal-IDs:
|
|
```
|
|
# curl http://localhost:6310/v1/channels
|
|
```
|
|
Antwort:
|
|
```
|
|
{
|
|
"channels" : [
|
|
1,
|
|
2
|
|
]
|
|
}
|
|
```
|
|
#### Abfrage der Pulse für den S0-Kanal mit der ID 2:
|
|
```
|
|
# curl http://localhost:6310/v1/channel/2
|
|
```
|
|
Antwort:
|
|
```
|
|
{
|
|
"channel" : 2
|
|
"pulses" : [
|
|
{
|
|
"channel_id" : 2,
|
|
"timestamp_ns" : 543838417704
|
|
"level" : false,
|
|
},
|
|
{
|
|
"channel_id" : 2,
|
|
"timestamp_ns" : 543917859198,
|
|
"level" : true
|
|
}
|
|
],
|
|
}
|
|
```
|
|
|
|
Die Pulse müssen für jeden konfigurierten Kanal einzeln abgefragt werden.
|
|
Für jeden Änderung des Eingangspegels am GPIO wird ein Datensatz zurückgegeben der folgende Informationen enthält:
|
|
| Name | Inhalt |
|
|
| ------------ | ---------------------------------------------------------------------- |
|
|
| channel_id | Die ID des Kanals |
|
|
| timestamp_ns | Der Zeitpunkt des Pegeländerung seit dem Programmstart in Nanosekunden |
|
|
| level | Der neue Pegel am GPIO |
|
|
|
|
Es sollten sich die Pegel in den aufeinanderfolgenden Datensätzen immer abwechseln - also: true -> false -> true. Wenn aber Pegeländerungen sehr schnell hintereinander auftreten kann es vorkommen, dass zwei oder mehrere Datensätze mit gleichen Pegeln existieren - z. B.: false -> false. Dann war dazwischen ein sehr kurzer High-Puls, der nicht aufgezeichnet wurde.
|
|
|
|
**Achtung:** Die Pulse können nur ein Mal abgefragt werden da sie nach der Abfrage gelöscht werden!
|