Ich denke ein Klassiker - nur leider komme ich nicht weiter.
Mit dem MSwitch Modul möchte ich Readings-Werte in einer Textdatei zusammenfassen und diese dann in einem non-FHEM Unterverzeichnis speichern.
Das Speichern der Text-Datei geht problemlos solange ich sie in einem der FHEM-Verzeichnisse speichere. Sobald ich den Pfad im MSwitch auf ein Unterverzeichnis ausserhalb von ändere geht das nicht mehr. Mir ist schon klar dass das mit Owner und Permissions zu tun hat. Nur leider haben mein Versuche die Berechtigungen anzupassen zu keiner Lösung geführt.
Die Datei hat den Namen datain38.ini und soll in das Unterverzeichnis /volume1/web/home/consolewdfiles gespeichert werden
Ich dachte mit dem Befehl
sudo chown fhem:users /volume1/web/home/consolewdfiles
sudo chmod ug=rw /volume1/web/home/consolewdfiles
Wäre das Problem gelöst ... leider nein.
Ich wäre froh um Lösungsansätze.
Evtl. nimmt MSwitch keine absoluten Pfadangaben an (ist bei vielen Modulen so)!?
Hast Du es mal mit einer relativen Pfadangabe probiert?
Gruß
Dan
Was funktioniert:
my $filename = "datain39.ini";
Damit wird die Datei im FHEM-Verzeichnis gespeichert.
Was nicht funktioniert (mein Wunschverzeichnis):
my $filename = "/volume1/web/home/consolewdfiles/datain39.ini";
Ich bin mir da jetzt nicht sicher ob das relative oder absolute Pfadnamen sind?
Zitat von: uwirt am 24 Juli 2019, 11:19:15
my $filename = "datain39.ini";
Ist relativ.
Zitat von: uwirt am 24 Juli 2019, 11:19:15
my $filename = "/volume1/web/home/consolewdfiles/datain39.ini";
Ist absolut!
z.B. hier nachzulesen. (https://de.wikipedia.org/wiki/Pfadname)
Gruß
Dan
Dann wäre wohl der relative Pfad zu meiner Datei?:
my $filename = "../volume1/web/home/consolewdfiles/datain39.ini";
Es wird keine modulinterne routine zum Schreiben genutzt. Derzeit wird in dem betreffenden MSwitch auf das fhem interne filewrite zurückgegriffen.
optional musst du es nochmal mit der vorherigen Version versuchen, da erfolgte das Schreiben ja direkt aus dem auzuführenden perlcode.
gruss Byte09
Gesendet von meinem ELE-L29 mit Tapatalk
Zitat von: uwirt am 24 Juli 2019, 11:49:16
Dann wäre wohl der relative Pfad zu meiner Datei?:
my $filename = "../volume1/web/home/consolewdfiles/datain39.ini";
Das kommt darauf an aus welchem Odern heraus Du das siehst!
Aus Sicht des Home Ordners von fhem (/opt/fhem) wäre es:
my $filename = "../../volume1/web/home/consolewdfiles/datain39.ini";
Gruß
Dan
Ich habe jetzt mal einiges versucht - nur leider immer noch nicht mit Erfolg.
Wenn ich das Script laufen lasse ohne eine Angabe des Pfades dann wird die Date folgendermassen erstellt:
/volume1/@appstore/fhem/opt/datain39.ini
Das Ziel wäre dass die Datei in folgendem Unterverzeichnis zu liegen kommt:
/volume1/web/home/consolewdfiles
Ich habe wie von DeeSPe empfohlen einen relativen Pfad im Script eingegeben:
open (DATEI, ">../../../web/home/consolewdfiles/datain39.ini") or die $!;
Ich habe das mal versucht etwas systematisch zu versuchen. Die Zielverzeichnisse hatten alle Lese- und Schreibrechte für alle.
Zuerst immer der Befehl in Perl und danach das Ergebnis.
Solange ich die Datei in eine Hierarchiestufe höher schreib funktioniert es:
open (DATEI, ">datain39.ini") or die $!;
root@CamStation:/volume1/@appstore/fhem/opt/datain39.ini
open (DATEI, ">../test/datain39.ini") or die $!;
root@CamStation:/volume1/@appstore/fhem/test/datain39.ini
open (DATEI, ">../../test/datain39.ini") or die $!;
root@CamStation:/volume1/@appstore/test/datain39.ini
open (DATEI, ">../../../test/datain39.ini") or die $!;
root@CamStation:/volume1/test/datain39.ini
Sobald ich aber in ein Verzeichnis in eine parallele Hierarchiestufe zu schreiben versuche geht es nicht mehr:
open (DATEI, ">../../../web/test/datain39.ini") or die $!;
Das Unterverzeichnis existiert und hat Schreibrechte:
root@CamStation:/volume1/web/test#
Mache ich da irgend einen Denkfehler?!
... ich hab's gefunden:
Das web Unterverzeichnis hatte folgende Berechtigung:
d---------+ 1 root root 266 Jul 24 21:04 web
Nachdem ich es schreibfähig gemacht hatte hat alles geklappt. Ich war der Überzeugung dass nur das Zielverzeichnis Schreibrechte braucht und nicht auch die übergeordneten Verzeichnisse!