Löschen von Files ohne Telnet direkt aus FHEM?

Begonnen von zenzi123, 20 Februar 2013, 07:31:51

Vorheriges Thema - Nächstes Thema

zenzi123

Hallo!

Wie kann ich ohne Telnet direkt aus FHEM eine Datei löschen?
So weit ich das verstanden habe kann FHEM ja direkte pearl commands ausführen.
Ich habe im Rahmen diverser Tests von FHEM einige logfiles angelegt und würde die gerne mal alle löschen um dann von einem sauberen Stand neu zu beginnen.
Ursprünglich hatte jeder Sensor/Aktor ein eigenes Logfile, das war aber ziemlich unpraktisch, daher habe ich einfach alle attr der Sensoren/Aktoren bzgl. logfile gelöscht und damit erreicht, dass alles in 1 Log geschrieben wird.
Mein logfile ist derzeit so konfiguriert:

attr global logfile ./log/fhem-%Y-%m.log
attr global statefile ./log/fhem.save
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
attr Logfile archivedir /dev/null

Mit dem attr archivedir wollte ich eigentlich bewirken, dass alte logfiles auf /dev/null geschrieben (also gelöscht) werden.
das hat aber bisher nicht gezogen.

Nun würde ich gerne manuelle über die fhem.cfg mittels eines commands alles im log-verzeichnis löschen was mit .log endet, also als linux-command wäre das etwa
rm -rf ./log/*.log

wie bekomme ich das in die fhem.cfg, sodass ich das darüber ausführen lassen kann?
Danke für eure Hilfe!!
lg,
zen

MisterEltako

Zitatrm -rf ./log/*.log

mit Perl müsste das m.E. lauten:
my $result = unlink ("./log/*.log");
$result = unlink ("./log/*.log");
$result = unlink ("./log/*.log");

Das Löschen via unlink() kann nicht rückgängig gemacht werden!

Syntax:
$result = unlink ( Dateiname );
oder
unlink ( Dateiename );wenn man das Ergebnis der Löschung nicht benötigt.

Dabei kann Dateiname ein Skalar oder ein Array mit verschiedenen Dateinamen sein.
Verzeichnisse können mit diesem Befehl nicht gelöscht werden, das geht nur mit "rmdir".
Als Ergebnis liefert unlink() die Anzahl der gelöschten Dateien.


Ich habe das selbst aber noch nicht getestet!!!

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

zenzi123


zenzi123

Hab ich nun grade versucht..
ich hab direkt in der fhem.cfg die Zeile

my unlink ("./log/*.log")

eingetragen...
da bringt er mir nur einen fehler my.. unknown command..

ich hab's dann über's web-interface und die dortige commandline versucht, er kennt den befehl weder in form
{my unlink ("./log/*.log")}
noch
my unlink ("./log/*.log")
auch nicht
unlink ("./log/*.log")

wie muss ich das eingeben, was mach ich falsch?
Sorry falls die Frage dämlich ist...
lg,zen

MisterEltako

Hi!

So habe es gerade getestet. Es funktioniert bei mir super!!!!
Entweder stimmt bei dir der Pfad nicht oder der Logfilename. Oder du besitzt nicht ausreichend Rechte zum Zugriff aud die Datei.


define n_Taster4 notify Taster4 {\
                  unlink("/volumeUSB1/usbshare/log/fhem-2013-02-19.log");;\
}


ausgelöst durch betätigen Taster3.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

MisterEltako


...zur Ergänzung:
my unlink ("./log/*.log") in der Fhem.cfg geht so nicht da es Perl-Code ist und nicht Fhem.

Direkt Perlcode gehört z.B. in die 99_Utils.pm, da würde das als Function gehen, die du dann aus der Fhem.cfg aufrufst.

In Fhem direkt kann man es unter Beachtung der Regeln so wie in meinem o.g Beispiel einfügen.

In die Kommadozeile von Webfhem ginge es auch z.B. {unlink("Pfad...")}

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

zenzi123

Ich habs gestern dann nochmal versucht...
Wildcards funktionierten nicht (*.log), dann löscht er nix und bringt keinerlei rückmeldung.

Mit {unlink ("./log/fhem-2013-01.log")} hat er dann aber das entsprechende file gelöscht, direkt in der commandline (fhemweb) eingegeben bringt er die retourmeldung "1" (also 1 file gelöscht)

Damit hab ich den gewünschten Effekt erreicht, DANKE!!


 

MisterEltako

Hi!

Also mit Wildcard's geht es schon - nur etwas umständlicher:

define n_Taster4 notify Taster4 {\
my $filename;;\
my $pfad = "/volumeUSB2/usbshare/log";;\
my @@fileliste = <$pfad/*.log>;;\
foreach $filename (@@fileliste) { print $filename."\n";; unlink ("$filename")}\
}


... löscht alle Dateien im Verzeichnis $pfad die mit *.log enden!!!

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

MisterEltako

und noch ein Vorschlag:

wenn du nur in einer Log-Datei den gesamten Inhalt löschen willst:

define n_Taster4 notify Taster4 {\
open(FILE, ">/volumeUSB1/usbshare/log/fhem-2013-02-21.log") or die $!;;\
print FILE "";;\
close(FILE);;\
}


MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

zenzi123


Marlen

Hi Leute,

hoffe das liest hier jemand!

Warum funktioniert der Befehle so in einem notify nicht???

{unlink ("/opt/fhem/www/snapshots/IPCamera_snapshot_1.jpg") ;; unlink ("/opt/fhem/www/snapshots/FosCam01_snapshot_1.jpg") ;; unlink ("/opt/fhem/www/snapshots/FosCam01_snapshot_2.jpg") ;; unlink ("/opt/fhem/www/snapshots/FosCam01_snapshot_3.jpg")}


LG
  Marlen

Otto123

Hi Marlen,

ganz einfach, weil er falsch geschrieben ist  8) und zuviel unnütze Zeichen enthält.
So:
"unlink /opt/fhem/www/snapshots/IPCamera_snapshot_1.jpg"

http://fhem.de/commandref_DE.html#command

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Marlen

 :-[

....ich check's net!

{unlink /opt/fhem/www/snapshots/IPCamera_snapshot_1.jpg ;; unlink /opt/fhem/www/snapshots/FosCam01_snapshot_1.jpg ;; unlink /opt/fhem/www/snapshots/FosCam01_snapshot_2.jpg ;; unlink /opt/fhem/www/snapshots/FosCam01_snapshot_3.jpg}


so geht garnix, das andere ging wenigstens in der Befehlszeile!

Otto123

Marlen, ist copy and paste kaputt!?
Die " sind das wichtigste!!!
Also kopiere einfach das was ich geschrieben habe. Und lies den Link  :P

Du hattest unnütze Sachen im Code ich nicht  8)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Marlen

Neee....liegt an meine Haarfarbe!!!!

Warum geht das denn nicht!?
{"unlink /opt/fhem/www/snapshots/IPCamera_snapshot_1.jpg" ;; "unlink /opt/fhem/www/snapshots/FosCam01_snapshot_1.jpg" ;; "unlink /opt/fhem/www/snapshots/FosCam01_snapshot_2.jpg" ;; "unlink /opt/fhem/www/snapshots/FosCam01_snapshot_3.jpg"}