FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: uwirt am 24 Juli 2019, 10:47:02

Titel: Datei in Unterverzeichnis schreiben
Beitrag von: uwirt am 24 Juli 2019, 10:47:02
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.
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: DeeSPe am 24 Juli 2019, 11:12:30
Evtl. nimmt MSwitch keine absoluten Pfadangaben an (ist bei vielen Modulen so)!?
Hast Du es mal mit einer relativen Pfadangabe probiert?

Gruß
Dan
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: uwirt am 24 Juli 2019, 11:19:15
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?
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: DeeSPe am 24 Juli 2019, 11:29:10
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
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag 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";

Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: Byte09 am 24 Juli 2019, 11:56:44
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

Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: DeeSPe am 24 Juli 2019, 12:05:33
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
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: uwirt am 24 Juli 2019, 21:22:08
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 $!;
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: uwirt am 26 Juli 2019, 21:12:21
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?!
Titel: Antw:Datei in Unterverzeichnis schreiben
Beitrag von: uwirt am 26 Juli 2019, 21:46:22
... 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!