[vz-users] Meter Protocol "exec"
Rupert Schöttler
rupert.schoettler at gmx.de
Sun Mar 25 15:23:05 CEST 2018
Hallo,
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.
1. Möglichkeit: GPIO-Eingang per Shellskript und Cron regelmäßig
abfragen und einen Datensatz in die middleware schreiben. Funktioniert
ganz einfach, erzeugt aber reichlich "Datenmüll", auch wenn das Licht
nur selten geschaltet wird.
Deshalb 2. Idee: GPIO-Eingang mit vzlogger laufend überwachen und nur
bei jeder Änderung, d.h. Licht ging an oder aus, einen Datensatz an die
middleware senden.
Die Überwachung der GPIOs ist ja für den S0-Zähler im vzlogger bereits
integriert. Leider eignet sich diese Standard-Funktion für die
Lichtüberwachung (nach meiner Erkenntnis) aber nicht, weil der vzlogger
dann mittels steigender (oder fallender) Flanke die Häufigkeit des Ein-
und Ausschaltens auswertet und nicht, wie ich es bräuchte, den Status
high und low. Oder gibt es doch eine Lösung?
In der Liste der diversen "Meter protocols" ist mir dann "exec"
aufgefallen. Also das Shell-Skript leicht angepasst, dass es nur 0 oder
100 ausgibt (den Kanal "Kellerlicht" habe ich einfach als
Luftfeuchtigkeit definiert, der zwischen 0 und 100% springen soll), und
im /etc/vzlogger.conf definiert:
{ // #4: Light sensor by exec:
"enabled": true,
"allowskip": true,
"protocol": "exec",
"command": "/usr/local/bin/licht.sh",
"format": "$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",
"duplicates": 3600, // duplicates only very 3600 sec (1h)
"middleware": "http://ras3/middleware.php"
}
} // meter #4: Light sensor
Leider funktioniert es nicht. Auszug aus dem Logfile:
pi at ras2:~ $ grep -iE "(mtr4|chn6|exec|9fe3)" /var/log/vzlogger.log
[Mar 24 18:02:37][mtr4] Creating new meter with protocol exec.
[Mar 24 18:02:37][exec] MeterExec::MeterExec: Parsed format string "$v"
=> "%1$lf"
[Mar 24 18:02:37][mtr4] Meter configured, enabled.
[Mar 24 18:02:37] New meter initialized (protocol=exec)
[Mar 24 18:02:37][chn6] New channel initialized (uuid=...159fe3
api=volkszaehler id=NilIdentifier)
[Mar 24 18:02:37][exec] MeterExec::open: MeterExec protocol cannot be
run with root privileges!
[Mar 24 18:02:37][exec] If you really want this,
compile vzlogger with:
[Mar 24 18:02:37][exec] 'cmake -D
METEREXEC_ROOTACCESS=true .'
[Mar 24 18:02:37][mtr4] Cannot open meter
[Mar 24 18:02:37] Skipping meter mtr4
Dankenswerterweise hat der Programmierer des vzlogger die Lösung ja
schon in die Fehlermeldung geschrieben, sehr löblich! Aber: Ich vermute,
es hat einen Grund, dass der Compiler-Schalter standardmäßig auf false
steht, denn mit diesem exec im config-File kann ich ja jeden beliebigen
Befehl mit root-Rechten ins System schleusen --> Gefahr! Noch dazu, wenn
dieses Protokoll lt.
https://wiki.volkszaehler.org/software/controller/vzlogger/overview_en
auch noch den Status "untested" hat... Andererseits: Warum läuft
vzlogger eigentlich mit root-Rechten? Sollte das nicht geändert werden?
(Kann ich es selbst ändern??)
Viele Grüße
Rupert
--
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5643 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20180325/0647fd09/attachment.bin>
More information about the volkszaehler-users
mailing list