No description
Find a file
2021-03-13 22:37:58 +01:00
.cargo Add drone build configuration 2021-03-08 00:25:14 +01:00
bundle Fix name of the binary and the config sample + deploy the config sample. 2021-03-13 22:37:58 +01:00
src Don't panic when the config file couldn#t be read + disable cli arg "-v". 2021-03-01 00:52:00 +01:00
.drone.yml Fix name of the binary and the config sample + deploy the config sample. 2021-03-13 22:37:58 +01:00
.gitignore Let Git ignore folder tmp and .DS_Store 2021-03-01 00:53:23 +01:00
auto_test.sh Implement config file reader 2021-02-11 22:09:29 +01:00
build_with_docker.sh Rename project to s0-meter and bump the version to 0.0.2 2021-03-13 22:16:26 +01:00
Cargo.lock Rename project to s0-meter and bump the version to 0.0.2 2021-03-13 22:16:26 +01:00
Cargo.toml Rename project to s0-meter and bump the version to 0.0.2 2021-03-13 22:16:26 +01:00
CHANGELOG.md Fix typo 2021-03-13 22:30:17 +01:00
Dockerfile Removed unused code in Dockerfile 2021-03-13 22:28:07 +01:00
README.md Rename project to s0-meter and bump the version to 0.0.2 2021-03-13 22:16:26 +01:00

s0-meter - Der Zähler für S0-Impulse an den RPi-GPIOs

Status

Build Status

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!