FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 21 November 2025, 23:46:42

Titel: 📂 Datei herunterladen, Downloader, HttpUtils_NonblockingGet
Beitrag von: Torxgewinde am 21 November 2025, 23:46:42
Ich wollte ein paar Dateien öfters mal mit FHEM herunterladen und per FHEMWEB Webserver verteilen. Dazu habe ich mir ein Snippet erstellt.

Will man zum Beispiel einige Tasmota Dateien herunterladen und speichern:

defmod MyDownloader dummy
attr MyDownloader userattr FilePath
attr MyDownloader readingList job
attr MyDownloader setList job
attr MyDownloader userReadings result:job:.* {\
my $hash = $defs{$name};;\
my $job = ReadingsVal($name, "job", 'https://fhem.de/www/images/default/fhemicon.png');;\
my $path = AttrVal($name, "Filepath", "/opt/fhem/www/download.bin");;\
\
if ($job =~ s/(?:Filepath|Dateipfad)="(.*?)"//) {\
$path = $1;;\
}\
\
my $fnFct = sub {\
my ($param, $err, $data) = @_;;\
\
my $len = $data ? length($data) : 0;;\
my $error = $err ? $err : FileWrite($path, $data);;\
\
readingsBeginUpdate($hash);;\
readingsBulkUpdate($hash, "busy", 0, 1);;\
readingsBulkUpdate($hash, "result", "saved $len Bytes", 1) if !$error;;\
readingsBulkUpdate($hash, "result", "error ($error, $err)", 1) if $error;;\
readingsEndUpdate($hash, 1);;\
};;\
\
if ( ReadingsVal($name, "busy", 0) == 0 ) {\
readingsBulkUpdate($hash, "busy", 1, 1);;\
my $param = {\
                    url        => $job,\
                    timeout    => 10,\
                    hash       => $hash,\
                    method     => "GET",\
                    callback   => $fnFct\
                };;\
HttpUtils_NonblockingGet($param);;\
return "download job started";;\
}\
\
return;;\
}

Viel Spaß!