executeCommandLine für rclone wird nicht ausgeführt

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
kcwagi
Beiträge: 4
Registriert: 14. Jul 2024 09:17
Answers: 0

executeCommandLine für rclone wird nicht ausgeführt

Beitrag von kcwagi »

Hallo zusammen,

über executeCommandLine möchte ich ein File in die Cloud hochladen. Wenn ich den entsprechenden Befehl im Terminal eingebe, funktioniert es wie gewünscht. Über executeCommandLine findet keine Ausführung statt.

Eingabetext im Terminal (funktioniert bestens):

Code: Alles auswählen

rclone copy /mnt/reolink_camera/Kalthaus pcloud:reolink_camera/Kalthaus
Ausführung über executeCommandLine als Teil einer Regel (funktioniert nicht):

Code: Alles auswählen


rule "Neuer Upload von Kamera"
when
    Channel "folderwatcher:localfolder:FolderKalthaus:newfile" triggered
then
    logInfo("alarm.rules", "Folderwatcher: " + receivedEvent.toString())

    // File von USB-Stick auf pDrive hochladen
    executeCommandLine ("rclone", "copy", "/mnt/reolink_camera/Kalthaus", "pcloud:reolink_camera/Kalthaus")

end
Der Trigger funktioniert (sehe ich im Log), aber der Upload über executeCommandLine findet nicht statt.

Nach stundenlangem, ergebnislosem Suchen in verschiedenen Foren, hoffe ich, dass mir hier jemand weiterhelfen kann. Schonmal vielen Dank in Voraus!!!

Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: executeCommandLine für rclone wird nicht ausgeführt

Beitrag von udo1toni »

Herzlich willkommen im openHAB Forum!

Die erste Frage wäre mal, welche Version von openHAB setzt Du ein?

Nächster Punkt: Der Kontext ist immer sehr wichtig. Wenn Du in der Shell angemeldet bist, dann meist als User openhabian (gesetzt den Fall, dass Du openHABian auf einem Pi einsetzt) oder auch mit einem eigenen User.
openHAB läuft aber im Kontext des Users openhab, mit dem Du gewöhnlich niemals angemeldet bist.
Du kannst Dir aber als Superuser einfach entsprechenden Zugriff verschaffen, mittels

Code: Alles auswählen

sudo su - openhab -s /bin/bash
su meldet Dich in einem bestimmten Kontext an. Das Minuszeichen bewirkt, dass das home-Verzeichnis des Users geladen wird (und damit auch die Umgebungsvariablen so gesetzt werden, wie das bei executeCommandLine der Fall wäre). openhab ist der Name des Users, und da für openhab standardmäßig keine gültige Shell eingetragen wird, muss mit der Option -s eine Shell angegeben werden, hier also /bin/bash.
Das vorangestellt sudo bewirkt, dass Du kein Passwort für den User openhab eingeben musst (welches ohnehin nicht gesetzt ist, der USer meldet sich ja nicht an...). Natürlich musst Du "Dein" PAsswort eingeben, um mittels sudo überhaupt einen Befehl ausführen zu dürfen :)

Das Prompt sollte anschließend anzeigen, dass nun openhab in der Shell angemeldet ist. Nun kannst Du testen, ob der gewünschte Befehl immer noch korrekt funktioniert :)
Sollte das tatsächlich der Fall sein, könnte das Problem mit der falschen "Zerstückelung" der Befehlszeile zusammenhängen. Nicht jedes Leerzeichen muss/darf auch mittels Parameter Trennung übergeben werden, das ist manchmal etwas tricky.
Mein Tipp an dieser Stelle wäre, ein bash Script zu hinterlegen und dieses script aufzurufen. Sollte es notwendig sein, einen dynamischen Wert zu übergeben, so kannst Du im bash Script mittels $1, $2, $2 usw. auf die übergebenen Parameter zugreifen. Alles, was statisch ist, würde ich aber im bash Script fix hinterlegen, hier also erst mal die gesamte Zeile. Das Script kannst Du im home-Verzeichnis des Users openhab hinterlegen oder aber im Standard-Suchpfad, z.B. /usr/local/bin/
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

kcwagi
Beiträge: 4
Registriert: 14. Jul 2024 09:17
Answers: 0

Re: executeCommandLine für rclone wird nicht ausgeführt

Beitrag von kcwagi »

Hallo Udo,

zunächst einmal herzlichen Dank für Deine Hilfe und die superschnelle Antwort :D.

Ich verwenden OpenHab 3.4.2. Es ist genauso, wie Du beschrieben hast. Wenn ich mich als user "openhab" anmelde, erzeugt der Befehl eine Fehlermeldung:

Code: Alles auswählen

Failed to create file system for "pcloud:reolink_camera/Kalthaus": didn't find section in config file
Ich werde heute Abend Folgendes tun, mich dann nochmal melden und hoffentlich die Lösung hier posten können :
  • rclone unter dem User openhab nochmal neu für pCloud konfigurieren.
  • Wie empfohlen das Kommando in eine bash-Datei auslagern und im Home-Verzeichnis des Users openhab abspeichern.
Herzliche Grüße und nochmals vielen Dank für Deine Hilfe :D

kcwagi
Beiträge: 4
Registriert: 14. Jul 2024 09:17
Answers: 0

Re: executeCommandLine für rclone wird nicht ausgeführt

Beitrag von kcwagi »

Hallo Udo,

das Problem mit executeCommandLine ist gelöst. Vielen Dank für den Hinweis, alles im Kontext des Users openhab zu installieren. Ich habe mich als openhab eingeloggt und dann rclone nochmals konfiguriert. Jetzt wird rclone über executeCommandLine problemlos ausgeführt :D. Ich habe das getestet, indem ich manuell einige Files lokal anlegte, die dann perfekt über die Regel mit pCloud synchronisiert wurden.

Allerdings hat sich eine neue Herausforderung aufgetan: Die Kamera pusht Bilder/Vidoes auf einen FTP Server, der auf den Raspberry läuft (vsftpd). Das funktioniert perfekt. Allerdings hat der User openhab keinen Zugriff auf die Videos und damit kann rclone (im Kontext von openhab) die Daten nicht verarbeiten.

Ich habe mit setfacl die entsprechenden Rechte für alle zukünftigen Uploads gesetzt.

Code: Alles auswählen

sudo setfacl -PRdm u::rwx,g::rw,o::rw /mnt/reolink_camera
Wenn ich mir die Rechte in Unterverzeichnissen /mnt/reolink_camera mit

Code: Alles auswählen

ls -l
anzeigen lasse, erhalte ich beispielhaft die folgenden Information:

Code: Alles auswählen

drwxrw-rw-+ 2 reolink reolink 4096 Jul 15 17:12
Soweit ich das beurteilen kann, sieht das gut aus. Trotzdem hat der User openhab keinen Zugriff auf die Verzeichnisse. Wenn ich z.B. mit cd in das Verzeichnis "15" wechseln möchte, bekomme ich die folgende Fehlermeldung

Code: Alles auswählen

-bash: cd: 15: Permission denied
.

Hast Du einen Tipp, wie ich dem User openhab Zugriff auf die Daten geben kann, so dass meine Regel anschließend über rclone die Daten verarbeiten kann?

Herzliche Grüße,
Christoph

kcwagi
Beiträge: 4
Registriert: 14. Jul 2024 09:17
Answers: 0

Re: executeCommandLine für rclone wird nicht ausgeführt

Beitrag von kcwagi »

Problem gelöst :D!!!

Aus irgendwelchen, unklaren Gründen hat setfacl, die Rechte für die User openhab und openhabian nicht ändert, obwohl laut Rechteübersicht (siehe Thread oben), alles okay sein sollte. Ich habe deshalb die Rechte nochmal zusätzlich angepasst.

Code: Alles auswählen

sudo setfacl -PRdm u:openhab:rwx /mnt/reolink_camera
Sudo setfacl -PRdm u:openhabian:rwx /mnt/reolink_camera
Jetzt funktioniert alles.

Antworten