Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vzlogger GPIO Problem seit Umstellung auf neueste Raspi-Version #526

Closed
majowi5 opened this issue Jun 9, 2022 · 17 comments
Closed

Vzlogger GPIO Problem seit Umstellung auf neueste Raspi-Version #526

majowi5 opened this issue Jun 9, 2022 · 17 comments

Comments

@majowi5
Copy link

majowi5 commented Jun 9, 2022

Seit der Umstellung auf die neueste neueste Raspi-Version funktioniert mein S0 Zähler nicht mehr richtig.
(Hat vorher jahrelang problemlos funktioniert)
Fehlermeldung Startup failed: open direction failed
Disable ich den S0-Zaehler funktioniert vzlogger einwandfrei.

vzlogger.conf (Auszug)
// S0-Zaehler
"enabled": true, // disabled meters will be ignored (default)
"skip": false, // errors when opening meter may be ignored if enabled
"protocol": "s0", // meter protocol, see 'vzlogger -h' for full list
"gpio": 17,
"gpio_dir": -1,
"configureGPIO": true,
"debounce_delay": 2000,
"aggtime": -1,
"aggfixedinterval": false,
"channel": {
"identifier": "Impulse", // s0 meter knows "Impulse" and "Power"
"uuid": "xxx",
"middleware": "http://localhost/middleware.php",
"aggmode": "none"

Erstaunlicherweise verschwindet die Fehlermeldung wenn man "verbosity" auf 10 erhöht!!
Die Impulserfassung scheint aber trotzdem nicht sauber zu funktionieren.

In den Foren habe ich nur einen Thead gefunden, der mich aber auch nicht weiter gebracht hat.
https://demo.volkszaehler.org/pipermail/volkszaehler-users/2022-April/016436.html

Irgend eine Idee für einen Workaround?

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 9, 2022

Tritt das Problem auch auf wenn man vzlogger nicht als Dienst startet?
Also an der Kommandozeile unter User pi oder gar mit 'sudo' davor?

@r00t-
Copy link
Contributor

r00t- commented Jun 9, 2022

Seit der Umstellung auf die neueste neueste Raspi-Version

maybe you are seeing the issue addressed by #525 ?

Fedora/RPi4 which no longer supports the legacy GPIO interface

@majowi5
Copy link
Author

majowi5 commented Jun 9, 2022

Das Problem tritt auch im foreground (vzlogger -f) auf.
Für mich besonders erstaunlich ist das unterschiedliche Verhalten in Abhängigkeit von der verbosity Einstellung!

@majowi5
Copy link
Author

majowi5 commented Jun 9, 2022

Habe noch eine Stelle gefunden, die das Problem adressiert, aber auch keine Lösung bietet.
https://demo.volkszaehler.org/pipermail/volkszaehler-users/2021-January/015312.html

@r00t-
Copy link
Contributor

r00t- commented Jun 10, 2022

		name.append("/sys/class/gpio/gpio");
		name.append(std::to_string(_gpiopin));
		name.append("/direction");
		fd = ::open(name.c_str(), O_WRONLY);
		if (fd < 0)
			throw vz::VZException("open direction failed");

https://github.com/volkszaehler/vzlogger/blob/76e868feede73b3f86b63d031768f71a227a903c/src/protocols/MeterS0.cpp

existiert die datei /sys/class/gpio/gpio*/direction ?
hat der user als der vzlogger laeuft zugriff darauf?

@majowi5
Copy link
Author

majowi5 commented Jun 10, 2022

Vzlogger läuft unter dem User vzlogger.
Dieser ist Mitglied in der Gruppe gpio

pi@raspberrypi:~ $ sudo ls -l /sys/class/gpio/gpio17/
insgesamt 0

-rw-rw---- 1 root gpio 4096 9. Jun 11:05 direction

Ich habe an den Eistellungen vom Raspi-Image kaum Änderungen vorgenommen, sondern nur das vzlogger.conf file übertragen.

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 10, 2022

Habe noch eine Stelle gefunden, die das Problem adressiert, aber auch keine Lösung bietet.

Äh, doch da ist eine Lösung: Manueller export vor Start des vzloggers.
Wird im Image über /etc/rc.local erledigt.

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 10, 2022

Ich kann die Meldung Startup failed: open direction failed bei mir hier nicht reproduzieren.

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 10, 2022

Bezüglich des Fehlers failed to set policy to SCHED_FIFO for counter_thread funktioniert auch die Lösung aus dem erwähnten ML-Thread: sudo setcap 'cap_sys_nice=eip' /usr/local/bin/vzlogger

Hab ich beim Bauen des Images wohl vergessen...

Zum unterschiedlichen Verhalten je nach verbosity kann ich nix sagen, vermute aber eine Ursache außerhalb vzlogger.

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 10, 2022

vermute aber eine Ursache außerhalb vzlogger.

sudo nano /etc/systemd/system/vzlogger.service
Die dritte Zeile ("After=") um rc-local.service erweitern
sudo systemctl daemon-reload
sudo reboot

Bitte Rückmeldung ob das Problem Startup failed: open direction failed damit behoben ist.

@r00t-
Copy link
Contributor

r00t- commented Jun 10, 2022

@majowi5:
kannst du den fehler mit strace vzlogger -f reproduzieren?
waere gut zu wissen, warum genau das oeffnen fehlschlaegt.
(alternativ muesste man eine genauere fehlerausgabe einbauen).

@majowi5
Copy link
Author

majowi5 commented Jun 11, 2022

Mein System funktioniert nun.
Ich habe aber seit meinem letzten Posting nichts mehr geändert, außer einem reboot (war außer Haus).
sudo setcap 'cap_sys_nice=eip' /usr/local/bin/vzlogger hatte ich schon vor dem Posting hier durchgeführt. (Habe ich im VZ wiki gefunden.)

Erinnert mich irgendwie an den oben erwähnten Thread, wo es auch plötzlich gegangen ist.

Um der Sache aber doch noch auf den Grund zu gehen werde ich das Ganze noch einmal auf einem Testsystem nachvollziehen.
Melde mich mit den Ergebnissen in 1-2 Tagen

Vielen Dank für eure Unterstützung.

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 11, 2022

kannst du den fehler mit strace vzlogger -f reproduzieren?

Gekürzte Version (und auf GPIO18 statt 17):

pi@raspberrypi:~ $ sudo -u vzlogger strace vzlogger -f
[...]
write(1, "[Jun 11 10:33:56]       Process "..., 50[Jun 11 10:33:56]       Process not daemonized...
) = 50
openat(AT_FDCWD, "/var/log/vzlogger/vzlogger.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
_llseek(3, 0, [11399], SEEK_END)        = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=11399, ...}) = 0
rt_sigaction(SIGUSR1, {sa_handler=0xc99c8, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x766f3da0}, NULL, 8) = 0
access("/sys/class/gpio/gpio18/value", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/sys/class/gpio/export", O_WRONLY) = 4
write(4, "18\n\0", 4)                   = 4
close(4)                                = 0
openat(AT_FDCWD, "/sys/class/gpio/gpio18/direction", O_WRONLY) = -1 EACCES (Permission denied)
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2326, ...}) = 0
getppid()                               = 1102
write(2, "[Jun 11 10:33:56][]     ", 24[Jun 11 10:33:56][]     ) = 24
write(2, "Startup failed: open direction f"..., 37Startup failed: open direction failed) = 37
write(2, "\n", 1
)                       = 1
write(3, "[Jun 11 10:33:56][main] vzlogger"..., 426) = 426
exit_group(1)                           = ?
+++ exited with 1 +++

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 11, 2022

Erinnert mich irgendwie an den oben erwähnten Thread, wo es auch plötzlich gegangen ist.

Das kommt daher das vzlogger bei direction zwar eine Fehlermeldung bringt, der export aber korrekt ausgeführt wurde. Beim zweiten Start von vzlogger scheint dann alles ok. Dieser export geht bei Neustart verloren!
Alles ziemlich verwirrend und hatte das meiste davon zwischenzeitlich wieder vergessen. Wenn man die Reihenfolge raus hat kann man den Fehler wunderbar reproduzieren (mit vzlogger, nicht an der Konsole).

D.h. für dich: es kann sein das du sporadisch wieder auf das Problem stößt wenn rc.local (nur ein workaround) zufällig langsamer durchläuft als der vzlogger.

@majowi5
Copy link
Author

majowi5 commented Jun 13, 2022

Habe Test auf einem neu erstellten System durchgeführt. Fehler: Startup failed: open direction failed ist wieder aufgetreten.
Nach Ausführung von sudo setcap 'cap_sys_nice=eip' /usr/local/bin/vzlogger war der Fehler weg!

sudo nano /etc/systemd/system/vzlogger.service
Die dritte Zeile ("After=") um rc-local.service erweitern

soll ich das einfügen?

Kann es sein, dass die unterschiedlichen Fehlermeldungen bei verschiedenen Levels of verbosity auf die gleiche Ursache zurückzuführen sind, u. nur eine andere Fehlermeldung angezeigt wurde?

Was kann ich sonst noch machen, damit der Fehler beim reboot nicht wieder sporadisch auftritt?

@J-A-U
Copy link
Collaborator

J-A-U commented Jun 13, 2022

Was kann ich sonst noch machen, damit der Fehler beim reboot nicht wieder sporadisch auftritt?

Mach die Änderungen wie von mir vorgeschlagen, dann ist das Thema (für dich) erledigt.

@majowi5
Copy link
Author

majowi5 commented Jun 28, 2022

Summary
Add
sudo setcap 'cap_sys_nice=eip' /usr/local/bin/vzlogger

Edit vzlogger.service
sudo nano /etc/systemd/system/vzlogger.service
Add rc-local.service in third line ("After=")

sudo systemctl daemon-reload
sudo reboot

This should solve the problem

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants