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:
| 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!