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");
}

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
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.
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.
Zitat von: rudolfkoenig am 07 Dezember 2025, 19:08:59Etwas off-topic: wenn ich help ohne Argument aufrufe, bekomme ich ... im Log.