Closed bubumania closed 3 years ago
vcontrold
bzw. der Benutzer, mit dessen Rechten dieser läuft, muss Zugriffsrechte zum Lesen und Schreiben des seriellen Ports des Optolink Adapters haben.
Unter Linux kann man das durch Anlegen einer entsprechenden udev
Regel hinbekommen. In einer z.B. /etc/udev/rules.d/85-optolink
genannten Konfigurationsdatei legt man fest, dass das USB-Gerät mit der o.g. Kennung von der Gruppe plugdev
(ggf. anpassen) les- und schreibbar sein soll:
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="plugdev"
Nun die Regel noch mit sudo udevadm control --reload-rules && sudo udevadm trigger
aktivieren und Optolink erneut einstöpseln.
Vielen Dank, das ging ja schnell.
hmm, funktioiert aber leider trotzdem nicht. muss ich in die 85-optolink noch etwas anderes schreiben, außer der einen Zeile?
Ich habe es jetzt ein paar Mal probiert. Habe auch an ein erneutes lsusb gedacht und die vcontrold.xml angepasst, Mal mit mal ohne sudo. Immer die gleiche Fehlermeldung wie vorher. Auch nach einem reboot. Zwischendurch hatte ich einmal eine andere Fehlermeldung:
[1009] Fri Oct 8 19:03:59 2021 : error tcgetattr /dev/bus/usb/001/006:Inappropriate ioctl for device
danach wieder die "gewohnte" Fehlermeldung mit dem "Permission denied"
der device ist jetzt in der gruppe plugdev, das hat funktioniert:
ls -l /dev/bus/usb/001/
crw-rw---- 1 root plugdev 189, 3 Okt 8 19:19 004
und der User pi ist auch in der Gruppe plugdev
groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
daran kann es dann leider nicht liegen
zwischenzeitlich habe ich noch ein NAME="vitoir0" in der udev-rule 85-optolink hinzugefügt,
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="plugdev", NAME="vitoir0"
der Optolink wird aber nicht als /dev/vitoir0 angezeigt, sondern immer noch als /dev/bus/usb/001/00x
ich dachte immer, die udev brauche ich nur, wenn ich immer mit dem gleichen /dev/xxx auf das Gerät zugreifen möchte. Daher hatte ich mir das noch nicht angesehen. Aber root müsste doch immer rechte haben. warum geht es dann mit sudo nicht? Mit der udev regel klappt es ja leider auch als pi nicht. morgen habe ich keine Zeit, vermutlich installiere ich am Sonntag nochmal neu und dann mal sehen...
Verwende statt NAME
mal SYMLINK+
.
Das Device sollte ohne beides als /dev/ttyUSB0
(bzw. 1...) erscheinen, mit dem SYMLINK als /dev/vitoir0
.
In der /etc/vcontrold/vcontrold.xml
Konfiguration verwendest Du dann den jeweiligen Devicenamen (nicht /dev/bus/usb/001/004, entschuldige bitte, dass ich das vorher überlesen hatte).
Mit dem NAME="vitoir0" hatte ich einfach falsch kopiert. Mit dem SYMLINK+="vitoir0" hat es funktioniert und ich finde den optolik immer unter /dev/vitoir0 Danke!
aber der Fehler bleibt. Ich konnte inzwischen feststellen, dass ich die Programme einmal unter /usr/bin + /usr/sbin und einmal unter /usr/loval/bin + /usr/local/sbin installiert hatte. Nachdem ich alle Versionen unter /usr/local/... gelöscht habe, erhalte ich nicht mehr die Fehlermeldung "Permission Denied" sondern immer wieder diese wunderschöne Fehlermeldung
[3240] Sun Oct 10 19:48:17 2021 : Client connected 127.0.0.1:41426 (FD:5)
[3240] Sun Oct 10 19:48:17 2021 : error tcgetattr /dev/vitoir0:Inappropriate ioctl for device
[3241] Sun Oct 10 19:48:17 2021 : exit with count=0
[3241] Sun Oct 10 19:48:17 2021 : Error communicating with the server
[1]+ Exit 1 vcontrold -n
Ich habe dann heute nochmal das System komplett neu aufgesetzt (debian image auf sd-karte, update+upgrade+...) . einmal kompiliert und installiert. Hat leider auch nichts gebracht. Die Fehlermeldung bleibt.
Muss ich vielleicht noch irgendwelche Programmpakete installieren, vielleicht libxxxx-dev? Irgendetwas, was beim kompilieren keine Fehlermeldung ausgibt, aber was doch zu Problemen führt? Von welchen Paketen wäre die installierte Version interessant?
Kanst du mal mit einem anderen Programm testen, ob du die serielle Schnittstelle des Optolink ansprechen kannst? Einfach mal um den vcontrold
als mögliche Ursache auszuschliessen.
Also z.B. screen /dev/vitoir0 4800
, dann ggf. noch IR-Diode und IR-Transitor des Optolink optisch kurzschliessen (Reflektion) und ein paar Zeichen senden.
Was soll passieren? es gibt leider nur die Aussage und dann bin ich wieder beim prompt
pi@lms00:~ $ screen /dev/vitoir0 4800
[screen is terminating]
pi@lms00:~ $
screen
kann offenbar auch nicht den seriellen Port öffnen.
Bevor du bei vcontrold
weitermachst, musst du erstmal den Optolink-Adapter korrekt einbinden.
Was da genau im Argen ist, kann ich dir leider nicht sagen. Zu erwarten wäre, dass der Adapter nach dem Einstecken eine serielle Schnittstelle unter /dev/ttyUSBx (bei anderen Adaptern /dev/ttyACMx) zur Verfügung stellt und diese nach den obigen udev-Einstellungen zusätzlich nach /dev/vitoir0 symbolisch verlinkt. Die Zugriffsrechte sollten in der o.g. Weise dann ebenfalls eingestellt sein.
Scheinbar wird der Optolink aber nicht als serielle Schnittstelle erkannt. Du kannst in den Log-Ausgaben von dmesg und journalctl mal nachsehen, was beim Ein-/Ausstöpseln des Gerätes passiert, ausserdem mal gucken, ob das Kernelmodul zum ch34x auch korrekt geladen wird (lsmod).
Unter https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/linux steht was im Zusammenhang von CH34x Treibern und Raspbian, ist vielleicht ein Start. Ist der Optolink mit dem ch34x ein Original von Viessman? Dieser Typ von Schnittstellenbaustein ist typisch für die allerbilligsten Boards aus China (Arduino-Clones, ESP, ...) und ist eigentlich unter Linux recht unproblematisch.
Vielleicht meldet sich ja noch jemand anderes mit einer Idee, die weiterhilft...
In my ".rules" statement, I have an additional parameter : SUBSYSTEM=="tty", to indicate I wish to use it as a serial device instead of a "/bus/usb" or raw device. Could this be the differentiator ? Some of the messages you get above seem to indicate there are protocol issues to talk to the IR device. When I issue "ls -l /dev/vitoir" on my system, I get an answer back that the device is attached to ttyUSB0. When issuing "udevadm info --name=/dev/vitoir --attribute-walk" in one of the first output lines it tells me about the tty subsystem, itself linked to "usb-serial", which is linked to "usb" and so on.
Try adding the SUBSYSTEM=="tty" parameter in your rules file, and re-process it. Let us know if it makes a difference.
Thank you very much - both of you!
Now it works and I can go on, playing with mqtt to get all data into home assistant :-)
From begin to end i did:
lsusb
to get the device idVendor and idProductnano /etc/udev/rules/85-optolink.rules
SUBSYSTEM=="TTY", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="plugdev"
sudo udevadm control --reload-rules && sudo udevadm trigger
starting vcontrold, testing vclient:
vclient -c getTempA
[885] Tue Oct 12 14:45:39 2021 : Client connected 127.0.0.1:55136 (FD:5)
getTempA:
11.300000 Grad Celsius
And everything works fine. Problem is solved!
Guten Morgen,
ich habe den source code hier herunter geladen entpackt und installiert. System ist ein Raspberry Pi3 mit frisch installierten Debian. Das Optolink-Kabel (frisch bestellt bei wolf-online-shop.de) wird erkannt, Ausgabe von lsusb:
Device ist auch vorhanden:
/dev/bus/usb/001/004
und eingetragen in der /etc/vcontrold/vcontrold.xml:
ich starte mit "vcontrold -n &"
versuche ein erstes vclient mit "vclient -c getTempA"
Ausgabe von /var/log/vcontrold.log:
Was mache ich falsch? Hab schon "überall" gesucht und nix gefunden. Ich dachte, die Probleme fangen erst später an, aber doch nicht schon beim Zugriff auf den USB Port! Ob mit oder ohne sudo hat auch nichts geholfen. Hat jemand eine Idee?
Gruß und Dank
Burkhard