diff --git a/README.md b/README.md new file mode 100644 index 0000000..28f3a5f --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# 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 +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 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 +``` +## 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! diff --git a/bundle/s0_meter.cfg.sample b/bundle/s0_meter.cfg.sample new file mode 100644 index 0000000..267a5e0 --- /dev/null +++ b/bundle/s0_meter.cfg.sample @@ -0,0 +1,9 @@ +# Configuration of s0_meter +# List all input channels with their id and their RPi-GPIO pins +[[channel]] + id = 1 + gpio = 17 + +[[channel]] + id = 2 + gpio = 12