Hauptmenü

Neueste Beiträge

#41
Codeschnipsel / 📂 Downloader für Dateien, Http...
Letzter Beitrag von Torxgewinde - 19 Dezember 2025, 10:30:02
Dieser Codeschnipsel ermöglicht es eine oder auch mehrere Dateien von Webservern herunterzuladen und lokal im Dateisystem zu speichern. Wenn ein Download noch aktiv ist, während ein weiterer hinzukommt, werden solche Aufträge im Reading "backlog" vermerkt und nacheinander abgearbeitet.

In diesem Snippet ist ein Link (das Ordner-Emoji), wenn man es anklickt werden mehrere Firmwaredateien in den FhemWeb-Ordner heruntergeladen. Dafür wird FW_cmd() genutzt und auch ganz nützlich ist IMHO die Methode mit der man mehrere FHEM-Befehle auf diese Art von Javascript an FHEM übergeben kann.

Zur Nutzung:

Wie bei mir üblich, ohne viel Extra-Devices, alles schön kompakt beisammen in diesem Snippet:

defmod MyDownloader dummy
attr MyDownloader userattr Filepath
attr MyDownloader devStateIcon {\
#Lade mehrere Dinge herunter, füllt ggf. das Backlog:\
my $cmd = <<"CMD";;\
set $name job Filepath="/opt/fhem/www/tasmota.bin" https://ota.tasmota.com/tasmota/release/tasmota.bin;;\
set $name job Filepath="/opt/fhem/www/tasmota.bin.gz" https://ota.tasmota.com/tasmota/release/tasmota.bin.gz;;\
set $name job Filepath="/opt/fhem/www/tasmota-minimal.bin.gz" https://ota.tasmota.com/tasmota/release/tasmota-minimal.bin.gz;;\
set $name job Filepath="/opt/fhem/www/tasmota32-zbbrdgpro.bin" https://ota.tasmota.com/tasmota32/release/tasmota32-zbbrdgpro.bin\
CMD\
\
#verpacke das ganze sicher für den Transport als BASE64 und als RCE payload:\
$cmd = "{fhem(MIME::Base64::decode_base64('". encode_base64($cmd,'') ."'))}";;\
$cmd = urlEncode($cmd);;\
\
#Mit JS wird verhindert, dass der Browser navigiert:\
my $link = "<a href=\"#\" onclick=\"".\
           "FW_cmd(FW_root + '?XHR=1&cmd=${cmd}', function(data){log('📂: ' + data)});; return false;;".\
           "\">📂</a>";;\
\
return "<div>". ReadingsVal($name, "result", "???") ." $link</div>";;\
}
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;;\
    }\
    \
    # Entferne Whitespaces:\
    $job =~ s/^\s+|\s+$//g;;\
    \
    # Wenn busy aktiv ist, dann den Job ins Backlog schieben:\
    if (ReadingsVal($name, "busy", 0) != 0) {\
        my $backlog = ReadingsVal($name, "backlog", "");;\
        $backlog .= "Filepath=\"${path}\" ${job}\n";;\
        readingsBulkUpdate($hash, "backlog", $backlog, 1);;\
        return "queued job ($job)";;\
    }\
    \
    # ab hier sind wir busy mit dem request:\
    readingsBulkUpdate($hash, "busy", 1, 1);;\
    \
    # definiere Callback:\
    my $fnFct = sub {\
        my ($param, $err, $data) = @_;;\
        \
        my $len = $data ? length($data) : 0;;\
        my $fw_hash = {FileName => $path, ForceType => "file", NoNL => 1};;\
        my $error = $err ? $err : FileWrite($fw_hash, $data);;\
        \
        readingsBeginUpdate($hash);;\
        readingsBulkUpdate($hash, "result", "saved $len Bytes to $path", 1) if !$error;;\
        readingsBulkUpdate($hash, "result", "ERROR ($error|$err|$path|$job)", 1) if $error;;\
        \
        # prüfe das Backlog:\
        my $backlog = ReadingsVal($name, "backlog", "");;\
        my @lines = grep { /\S/ } split(/\r?\n/, $backlog);;\
        \
        if (@lines) {\
            my $next = shift @lines;;  # ersten Job holen\
            my $newbacklog = join("\n", @lines);;\
            readingsBulkUpdate($hash, "backlog", $newbacklog, 1);;\
            \
            # Nächsten Job starten wenn diese Funktion endet,\
            # deswegen über "@cmdList","%sleepers" in fhem.pl\
            fhem("sleep 0.0;; set $name job $next");;\
        }\
        \
        readingsBulkUpdate($hash, "busy", 0, 1);;\
        readingsEndUpdate($hash, 1);;\
    };;\
    \
    # prepare and call HttpUtils:\
    my $param = {\
        url        => $job,\
        timeout    => 10,\
        hash       => $hash,\
        method     => "GET",\
        callback   => $fnFct\
    };;\
    HttpUtils_NonblockingGet($param);;\
    \
    return "download job started ($job)";;\
}
#42
Codeschnipsel / Aw: Abfrage Heizölpreis HTTPMO...
Letzter Beitrag von Bartimaus - 19 Dezember 2025, 10:25:27
Guten Morgen,

jetzt muss ich erstmal schauen, wieso ich keine eMailBenachrichtigung aus dem Forum bekomme.

Danke für Deinen Tip, ja, es macht absolut Sinn, die Mindestbestellmenge direkt im Hourcounterdevice zu berechnen, und darauf im Heizoeldevice zu verweisen (Reading)

Habe Deinen Codeschnipsel quasi übernommen, und im CN.Blaubrenner ein eigenes Reading für die Mindestbestellmenge ergänzt. (ähnlich wie das Tankvolumen):

So siehts jetzt aus, getestet und für gut befunden:

attr CN.Blaubrenner userReadings Bestellmenge {
  my $tankvol = ReadingsNum($name,"Tankvolumen",0);
  my $level   = ReadingsNum($name,"appTanklevel",0);
  my $min     = ReadingsNum($name,"minOrderVolume",0);

  my $bedarf = $tankvol - $level;
  $bedarf = 0 if $bedarf < 0;

  # Mindestbestellmenge anwenden
  $bedarf = $bedarf < $min ? $min : $bedarf;

  # Auf volle 100 l aufrunden
  $bedarf = int(($bedarf + 99) / 100) * 100;

  return $bedarf;
}
#43
Sprachsteuerung / Aw: Alexa Fhem startet minütli...
Letzter Beitrag von MadMax-FHEM - 19 Dezember 2025, 10:05:38
Aber es läuft jetzt wieder?
#44
Sprachsteuerung / Aw: Alexa Fhem startet minütli...
Letzter Beitrag von traders-banquet - 19 Dezember 2025, 09:45:29
Ich bin auf Debian Bookworm und hatte alexa-fhem vor ca. 5 Jahren installiert. Initial hatte ich wahrscheinlich mal Jessie installiert und in der Zeit habe ich das OS bis auf Bookworm geholt. Ein Update auf Trixie steht noch aus.
In den 5 Jahren habe ich mich nur bedingt mit alexa-fhem auseinander gesetzt, da es funktionierte. Ein npm update -g führt auch nur zu einer Meldung wie uptodate in 66 Millisekunden ... ziemlich verwirrend. Ein Check der Versionsnummer allerdings offenbart, das die Module noch in der bisherigen Version vorliegen.
Danke für die Anregungen.
#45
FHEM Code changes / Revision 30638: controls_fhem....
Letzter Beitrag von System - 19 Dezember 2025, 08:50:53
Revision 30638: controls_fhem.txt: fhemupdate checkin

controls_fhem.txt: fhemupdate checkin

Source: Revision 30638: controls_fhem.txt: fhemupdate checkin
#46
Termine und Veranstaltungen / Aw: Rhein-Pfalz-Kreis
Letzter Beitrag von Beta-User - 19 Dezember 2025, 08:35:37
Hmm, Termin ist eher schwierig, aber

Zitat von: rabehd am 18 Dezember 2025, 13:51:23Grüße aus dem Kraichgau, längerfristig gerne
durch das westliche Kraichgau würde ich eh fahren....

Vielleicht das nächste Mal!
#47
ESP Familie / Aw: Netzteilfehler bei den SON...
Letzter Beitrag von weini - 19 Dezember 2025, 06:51:07
Ja, dazu habe ich mich jetzt auch durchgerungen.
Hauptsächlich wegen diesem Bericht hier: https://smarthome-aber-sicher.de/blog/2025/09/07/sonoff-s20-smarte-steckdose-reparieren-die-26cent-reparatur/
Das ist zwar nicht exakt meine Platine, aber es hört sich nach exakt meinem Problem an.

Die Ersatzkondensatoren sind schon bestellt (zumindest für den C7).

Ich habe nur seit ein paar Wochen ein neues Messgerät (ZOYI ZT-703S) und wollte damit mal ein wenig üben....  ;D
#48
Sprachsteuerung / Aw: Alexa Fhem startet minütli...
Letzter Beitrag von traders-banquet - 18 Dezember 2025, 23:47:04
OK verstanden ein Update der alexa-fhem gelingt nicht mit pm update -g alexa-fhem, sondern ich musste die Version angeben, dann klappt auch erst das Update. Ich bin dann mal auf die Version 0.5.64 gegangen und scheine mit dieser Version keine Abbrüche mehr zu haben. Die Fehlermeldung ist in den paar Minuten, die ich mein System nun beobachtet habe, nicht mehr aufgetaucht.
#49
Sprachsteuerung / Aw: Alexa Fhem startet minütli...
Letzter Beitrag von MadMax-FHEM - 18 Dezember 2025, 23:43:29
Hmm, irgendwie scheint aber alexa-fhem einen Port öffnen zu wollen und der ist belegt.
Zumindest, wenn ich die Logausgabe richtig interpretiere...

Bzgl. update, steht da nicht irgendwo im Wiki? dass wenn update nicht geht, die Alternative deinstallieren (löschen?) und neu installieren?

Aber wie geschrieben macht mich stutzig, dass ein Port geöffnet werden soll...
...was es bei alexa-fhem Connector nicht mehr gibt...

Wann hast du installiert?
Welche OS Version?

Was passiert, wenn du alexa-fhem über das alexa-Device dzoppst oder das alexa-Device disablest oder löschst?
Läuft dann noch ein alexa-fhem Prozess?

Gruß, Joachim
#50
Sprachsteuerung / Aw: Alexa Fhem startet minütli...
Letzter Beitrag von traders-banquet - 18 Dezember 2025, 23:28:17
Meine alexa-config sieht wie folgt aus :

{
   "connections" : [
      {
         "port" : "8084",
         "filter" : "alexaName=..*",
         "server" : "127.0.0.1",
         "webname" : "fhem",
         "name" : "FHEM",
         "uid" : 0
      }
   ],
   "sshproxy" : {
      "description" : "FHEM Connector",
      "ssh" : "/usr/bin/ssh"
   }
}

Einmal installiert und nicht wieder angefasst.

Mit Updates meine ich in Fhem das update all

Einen systemd Startscript konnte ich auch nicht finden.

eine neuere Version von alexa-fhem bekomme ich leider nicht :
root@fhem:/# nodejs --version
v18.20.4
root@fhem:/# npm update -g alexa-fhem

up to date in 67ms
root@fhem:/# npm update -g alexa-fhem --verbose
npm verb cli /usr/bin/node /usr/bin/npm
npm info using npm@9.2.0
npm info using node@v18.20.4
npm verb title npm update alexa-fhem
npm verb argv "update" "--global" "alexa-fhem" "--loglevel" "verbose"
npm verb logfile logs-max:10 dir:/root/.npm/_logs/2025-12-18T22_10_14_735Z-
npm verb logfile /root/.npm/_logs/2025-12-18T22_10_14_735Z-debug-0.log

up to date in 71ms
npm verb exit 0
npm info ok
root@fhem:/#