Hauptmenü

Neueste Beiträge

#1
Perl für FHEM-User / Mehrere curl-Abrufe "gleichzei...
Letzter Beitrag von TomLee - 07 Dezember 2025, 22:01:16
Hi,

aus Unerfahrenheit beschäftigt mich die Frage, ob ich in einem Perl-Skript Pausen einlegen muss/sollte, wenn ich ich über curl mehrere API-Endpunkte (sagen wir etwa 20) der gleichen API abrufe. Diese Ergebnisse werden in meinem Skript in einer Json-Datei "zusammengeführt" und diese direkt auf einen FTP -Server geladen.

Die Frage ist also wie man das richtig macht?

Aktuell bin ich bei 13 Abrufen, die Requests laufen direkt hintereinander in einer Schleife durch und es funzt wie ich es mir vorgestell habe.

So sieht das aktuell aus:


sub mergegooglelocations {
    my $sub = sub {
        my $filename = shift // return;
        my ($error, @content) = FileRead($filename);
        Debug "Fehler beim Lesen von $filename: $error\n" if $error;
        my $json = join "", @content;
        return decode_json($json);
    };

    my $path = '/opt/fhem/www/googlelocations';

    my %seen;       # id => Place-HashRef
    my $total  = 0; # alle Einträge gezählt
    my $dupes  = 0; # doppelte IDs gezählt
    my @dupe_ids;   # Liste der doppelten IDs

    for (sort glob("$path/location*.json")) {
        my $json = $sub->($_);
        next if !$json || !exists $json->{places};

        for (@{ $json->{places} }) {

            # Nur Einträge mit definierter ID
            next unless defined $_->{id} && length $_->{id};
            $total++;

            # Prüfen auf Duplikat
            if ( exists $seen{ $_->{id} } ) {
                $dupes++;
                push @dupe_ids, $_->{id};
                Debug "Doppelter Eintrag: $_->{id} - " . ($_->{displayName}{text} // 'unbekannt');
                next;
            }

            # Speichern – flache Kopie, um Referenzprobleme zu vermeiden
            $seen{ $_->{id} } = { %$_ };
        }

        Debug "Verarbeitete Datei: $_";
    }

    # Werte aus Hash extrahieren
    my @merged_places = values %seen;

    # JSON schreiben
    FileWrite("$path/merged.json",
        JSON->new->utf8->pretty->encode({ places => \@merged_places })
    );

    # Debug-Ausgabe
    Debug "Gesamt-Einträge gelesen: $total";
    Debug "Einzigartige Einträge: " . scalar(@merged_places);
    Debug "Doppelte Einträge: $dupes";
    Debug "IDs der doppelten Einträge: " . join(", ", @dupe_ids) if $dupes;

    # Datei per scp kopieren
    return system("scp $path/merged.json telekom-hosting:/home/www/public_html/assets/src/locations.json");
}

Fertig, bin ich mit dem Code noch nicht, das unless mag ich noch ausbauen und mit encode_json beschäftigen, was damit der Vorteil ist und ob man auf eval dann verzichten kann. Der Zähler der doppelten Einträge ist auch noch um 1 falsch. Das ist aber ein anderes Thema, es funzt erstmal wie es gedacht war.

Gruß Thomas
#2
Verbrauchsmessung / Aw: shelly-em 50A
Letzter Beitrag von Hermann - 07 Dezember 2025, 21:28:13
Hallo taskill

Ich habe kein shelly em's im einsatz.

Aber ich denke das das Template shelly2em oder shelly3em funktionieren werden.
ausserdem wird das device ja mit autocreate angelegt und das mit allen möglichen readings.
Da muss man sich mal die passenden raus suchen und was selber zusammen basteln.
Ist ja beim shellypmminig3 auch so das gibs auch kein passendes Template.

Gruß
Hermann



 
#3
MQTT / Aw: How-to gesucht um komplexe...
Letzter Beitrag von Devender - 07 Dezember 2025, 21:17:21
Danke für deine Rückmeldung :-)
Ich habe es mit einigem probieren und resetten des Moduls hinbekommen.

Das erkannte MQTT Device darf man nicht mit einem Template erweitert werden, sondern direkt die Befehle konfigurieren.
Das setlist gilt in meinem Fall für Geräte von Mitsubishi und dem Protoart Modul (https://clima.protoart.net/)


Falls jemand ebenfalls das Modul einbinden möchte hier das setlist

attr setlist Restart:restart climacontrol/HVAC_0C8BE0/device/command/restart
Power:on,off climacontrol/HVAC_0C8BE0/heatpump/power/set
Modus:auto,cool,fan,dry,heat climacontrol/HVAC_0C8BE0/heatpump/mode/set
Temperatur:slider,19.00,1.00,30.00 climacontrol/HVAC_0C8BE0/heatpump/set_temperature/set
Luefter:quiet,low,medium,high,superhigh,auto  climacontrol/HVAC_0C8BE0/heatpump/fan/set
↑↓:1,2,3,4,auto  climacontrol/HVAC_0C8BE0/heatpump/vane/set
↔:farleft,left,middle,right,farright,wide,swing climacontrol/HVAC_0C8BE0/heatpump/widevane/set
#4
FHEMWEB / Aw: [ControlMiniDash]Fhemweb W...
Letzter Beitrag von appi - 07 Dezember 2025, 20:20:14
hallo Schwatter
das ist ja ein super Widget, endlich geht's mit Fhem in die richtige Richtung weiter.
Ich glaub langsam ich kann bei Fhem bleiben und muss mich nicht mit HA beschäftigen. 😁

Besten Dank
#5
Sonstige Systeme / Aw: Netatmo Modul - 38_netatmo...
Letzter Beitrag von flydd - 07 Dezember 2025, 20:02:57
Schön, dass das Modul auch bei euch funktioniert. Für mich ist es die Rettung meiner in die Jahre gekommenen FHEM-Installation.

Der WD überprüft in der Default-Einstellung (ohne attr) alle 5 Minuten den Netatmo-Account. Wenn der Account länger als 1 Stunde nicht ,,ok" ist oder ein Gerät so lange auf ,,delayed update" festhängt, startet der WD ein Soft-Recover.

Soft-Recover heißt: Timer zurücksetzen, Tokens neu holen (API & App), interne Caches leeren und einen schnellen Re-Poll anstoßen – praktisch wie ein FHEM-Neustart, aber nur für Netatmo.

Im Normalfall wird aber einfach das App- und API-Token frühzeitig erneuert (ca. 10 Min vor Ablauf).

Außerdem warten Geräte mit IODev nicht ok jetzt kürzer (Back-off nur 5–15 Min statt stundenlang).

Bei ,,Operation is forbidden" stößt das Modul automatisch ein Re-Auth an und pollt kurz danach erneut.

Nebenbei wurde ein kleiner Bug in setRoomMode gefixt.
#6
FHEM Code changes / Revision 30600: 98_help.pm: sm...
Letzter Beitrag von System - 07 Dezember 2025, 20:01:08
Revision 30600: 98_help.pm: small bugfix to prevent warning in log

98_help.pm: small bugfix to prevent warning in log

Source: Revision 30600: 98_help.pm: small bugfix to prevent warning in log
#7
FHEM Code changes / Revision 30599: 01_FHEMWEB.pm:...
Letzter Beitrag von System - 07 Dezember 2025, 20:01:08
Revision 30599: 01_FHEMWEB.pm: do not escape < (Forum #143241)

01_FHEMWEB.pm: do not escape &lt; (Forum: #143241)

Source: Revision 30599: 01_FHEMWEB.pm: do not escape &lt; (Forum #143241)
#8
FHEM Code changes / Revision 30598: 76_SolarForeca...
Letzter Beitrag von System - 07 Dezember 2025, 20:01:08
Revision 30598: 76_SolarForecast: contrib Version 2.0.0

76_SolarForecast: contrib Version 2.0.0

Source: Revision 30598: 76_SolarForecast: contrib Version 2.0.0
#9
FHEMWEB / Aw: Namen-Verlinkung bei Front...
Letzter Beitrag von betateilchen - 07 Dezember 2025, 19:34:58
Zitat von: rudolfkoenig am 07 Dezember 2025, 19:13:22Nachtrag: das Einpacken der Rueckgabe in <html>...</html> sollte aber auch funktionieren, und das Einbauen der Links verhindern.

Das hat bei mir jedenfalls nicht funktioniert, wenn Du es selbst testen möchtest, kannst Du die Modulversion aus https://forum.fhem.de/index.php?msg=1353111 verwenden, da hatte ich das Einpacken getestet.

Zitat von: rudolfkoenig am 07 Dezember 2025, 19:08:59Ich habe den Begrenzer \b gegen (\s) getauscht.
help scheint jetzt zu funktionieren auch nach "define lt dummy", und list auch.

Ja, sieht gut aus. Danke!

Zitat von: rudolfkoenig am 07 Dezember 2025, 19:08:59Etwas off-topic: wenn ich help ohne Argument aufrufe, bekomme ich ... im Log.

Danke für den Hinweis, das habe ich eben zusammen mit einem typo in der commandref korrigiert.
#10
FHEMWEB / Aw: Websocket-Verbindung kann ...
Letzter Beitrag von rudolfkoenig - 07 Dezember 2025, 19:18:32
onclose und onerror werden bereits umgeleitet, und in der Zeile 1285 wird close ausgewertet.
Fehlt nur noch eine Pruefung auf error, und dafuer brauche ich noch einen Testfall...