Datei in Unterverzeichnis schreiben

Begonnen von uwirt, 24 Juli 2019, 10:47:02

Vorheriges Thema - Nächstes Thema

uwirt

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.
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

DeeSPe

Evtl. nimmt MSwitch keine absoluten Pfadangaben an (ist bei vielen Modulen so)!?
Hast Du es mal mit einer relativen Pfadangabe probiert?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

uwirt

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?
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

DeeSPe

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.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

uwirt

Dann wäre wohl der relative Pfad zu meiner Datei?:



my $filename = "../volume1/web/home/consolewdfiles/datain39.ini";

FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

Byte09

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


DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

uwirt

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 $!;
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

uwirt

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?!
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

uwirt

#9
... 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!
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya