[vz-users] [gelöst] Meter Protocol "exec"

Rupert Schöttler rupert.schoettler at gmx.de
Tue Mar 27 20:37:13 CEST 2018


Hallo nochmal,


Am 25.03.2018 um 15:23 schrieb Rupert Schöttler:
> als "Abfallprodukt" der Abtastung meiner Wasseruhr mittels Laser- und
> Photodiode (Thread "Wasserzähler mit Laser als S0 auslesen" vom
> 30.12.2017) habe ich mit einer weiteren Photodiode an einem anderen
> Arduino-Eingang einen Lichtsensor für den Keller gebastelt und an an
> einen GPIO des Pi angeschlossen: Dort erhalte ich eine 1, wenn das Licht
> an ist, und eine 0 für aus. Damit möchte ich einen Hinweis erzeugen,
> wenn vergessen wird, das Licht auszumachen. Bzw. als ersten Schritt die
> einfache Info "Licht ist an oder aus" mal in den VZ pumpen.

Hier eine funktionierende Lösung mit dem Protokoll "exec".

1. vzlogger neu kompilieren mit dem Kompiler-Schalter
-DMETEREXEC_ROOTACCESS=true.
Gemäß
https://wiki.volkszaehler.org/software/controller/vzlogger/installation_cpp-version#build_von_hand,
Abschnitt "Building vzlogger", aber mit

cmake -DMETEREXEC_ROOTACCESS=true ..

statt nur "cmake ..". Das Ganze dauert ein Weilchen.

2. Meine vzlogger-conf von vorgestern war nicht 100% korrekt zur Nutzung
dieses Protokolls. So funktioniert's:

    {    // #4: Light sensor by exec:

            "enabled": true,      // disabled meters will be ignored
            "allowskip": true,    // if enabled, errors when opening
meter will lead to meter being ignored
            "protocol": "exec",
            "command": "echo \"Licht = `gpio -g read 23`\"", // is the
command line as you'll type it in the shell
                       "format": "$i = $v",  // a format string for
parsing complex logfiles
                                             // arbitrary text and
whitespaces are allowed, see 'scanf()'
                                             // at least $v has to be used
                                             // $i => identifier, $v =>
value, $t => timestamp
            "interval": 10,
            "channel": {
                 // Kellerlicht:
                "uuid": "my_uuid_9fe3",
                "identifier": "Licht", // identifier mandatory!?!
                "duplicates": 3600,    // duplicates only very 3600 sec (1h)
                "middleware": "http://ras3/middleware.php"
            }
    }    // meter #4: Light sensor

Das Kommando kommt nun ohne Shell-Skript aus. Man beachte den Backslash,
damit das Anführungszeichen in den Kommandostring übergeben wird.
Offensichtlich ist der identifier im Channel verpflichtend, daher lasse
ich ein "Licht =" ausgeben und parse danach mittels "$i = $v".
Jedenfalls wurde nichts erkannt oder eingelesen ohne "identifier" und
nur mit "format": "$v", d.h. der Konfiguration von Sonntag.

Auszug aus dem logfile:
pi at ras2:~ $ grep -iE "(mtr4|chn6|exec|9fe3)" /var/log/vzlogger.log
[Mar 27 19:57:10][mtr4] Creating new meter with protocol exec.
[Mar 27 19:57:10][exec] MeterExec::MeterExec: Parsed format string "$i =
$v" => "%2$ms = %1$lf"
[Mar 27 19:57:10][mtr4] Meter configured, enabled.
[Mar 27 19:57:10]       New meter initialized (protocol=exec)
[Mar 27 19:57:10][chn6] New channel initialized (uuid=...159fe3
api=volkszaehler id=Licht)
[Mar 27 19:57:10][exec] MeterExec::open: MeterExec protocol is compiled
with root privileges!
[Mar 27 19:57:10][exec] MeterExec::open: Testing command line 'echo
"Licht = `gpio -g read 23`"': Success
[Mar 27 19:57:10][mtr4] Meter connection established
[Mar 27 19:57:10][mtr4] Meter thread started
[Mar 27 19:57:10][mtr4] Meter is opened. Starting channels.
[Mar 27 19:57:10][chn6] Logging thread started
[Mar 27 19:57:10][chn6] Start logging thread for volkszaehler-api.
Running as daemon: no
[Mar 27 19:57:10][chn6] Using default volkszaehler api.
[Mar 27 19:57:10][mtr4] Number of readers: 32
[Mar 27 19:57:10][mtr4] Config.daemon: 0
[Mar 27 19:57:10][mtr4] Config.local: 1
[Mar 27 19:57:10][exec] MeterExec::read: Calling 'echo "Licht = `gpio -g
read 23`"'
[Mar 27 19:57:10][exec] MeterExec::read: Reading line: 'Licht = 0'
[Mar 27 19:57:10][exec] MeterExec::read: string: Licht, value: 0.000000,
timestamp: -1.000000
[Mar 27 19:57:10][exec] MeterExec::read: Closing process 'echo "Licht =
`gpio -g read 23`"'
[Mar 27 19:57:10][chn6] Adding reading to queue (value=0.00
ts=1522173430960)
[Mar 27 19:57:10][chn6] ==> number of tuples: 1
[Mar 27 19:57:10][chn6] compare: 0 1522173430960
[Mar 27 19:57:10][chn6] JSON request body: [ [ 1522173430960, 0 ] ]
[Mar 27 19:57:10][mtr4] Next reading in 10 seconds
[Mar 27 19:57:11][chn6] CURL Request succeeded with code: 200
[Mar 27 19:57:20][exec] MeterExec::read: Calling 'echo "Licht = `gpio -g
read 23`"'
[Mar 27 19:57:21][exec] MeterExec::read: Reading line: 'Licht = 0'
[Mar 27 19:57:21][exec] MeterExec::read: string: Licht, value: 0.000000,
timestamp: -1.000000
[Mar 27 19:57:21][exec] MeterExec::read: Closing process 'echo "Licht =
`gpio -g read 23`"'
[Mar 27 19:57:21][chn6] Adding reading to queue (value=0.00
ts=1522173441004)
[Mar 27 19:57:21][chn6] ==> number of tuples: 1
[Mar 27 19:57:21][chn6] compare: 1522173430960 1522173441004
[Mar 27 19:57:21][chn6] JSON request body is null. Nothing to send now.
[Mar 27 19:57:21][mtr4] Next reading in 10 seconds
[Mar 27 19:57:31][exec] MeterExec::read: Calling 'echo "Licht = `gpio -g
read 23`"'
[Mar 27 19:57:31][exec] MeterExec::read: Reading line: 'Licht = 0'
[Mar 27 19:57:31][exec] MeterExec::read: string: Licht, value: 0.000000,
timestamp: -1.000000
[Mar 27 19:57:31][exec] MeterExec::read: Closing process 'echo "Licht =
`gpio -g read 23`"'
[Mar 27 19:57:31][chn6] Adding reading to queue (value=0.00
ts=1522173451061)
[Mar 27 19:57:31][chn6] ==> number of tuples: 1
[Mar 27 19:57:31][chn6] compare: 1522173430960 1522173451061
[Mar 27 19:57:31][chn6] JSON request body is null. Nothing to send now.
[Mar 27 19:57:31][mtr4] Next reading in 10 seconds

usw.

3. Der Kanal "Licht" enthält 1 für an und 0 für aus. Er ist vom Typ
"universalsensor" bzw. "Sensor" mit Einheit "An" und wird im Stil
"states" dargestellt.

Feine Sache das! :-D

Schönen Abend
Rupert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20180327/dab54790/attachment-0001.html>


More information about the volkszaehler-users mailing list