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