Ich habe eine Sub in myUtils mit Hilfe von ChatGPT eingefügt, die eigentlich auch funktioniert, aber die Umlaute werden nicht korrekt dargestellt, sondern statt dessen Sonderzeichen Fragezeichen in einer Raute. Die Versuche von ChatGPT dies zu beseitigen, blieben leider ohne Erfolg.
Hier mal ein Beispiel, im Browser ist alles richtig dargestellt und im Reading dan so z.B.:
pure fm - berlins electronic radio - now ON-AIR: Kids� ft. Robins - Better Days
sub fetch_and_save_radio_info {
my $url = 'http://192.168.178.78/YamahaExtendedControl/v1/tuner/getPlayInfo';
my $ua = LWP::UserAgent->new;
my $response = $ua->get($url);
if ($response->is_success) {
my $json = decode_json($response->content);
return undef unless exists $json->{dab};
my $sender = $json->{dab}->{service_label};
my $dls = $json->{dab}->{dls};
# Variablen für Titel setzen
my ($current_title, $next_title) = ("", "-");
# Überprüfe auf verschiedene Muster
if ($dls =~ /^JETZT ON AIR :: (.*?) :: (.*)$/) {
# Variante mit "JETZT ON AIR ::", Doppelpunkte werden durch " - " ersetzt
$current_title = "$1 - $2";
} elsif ($dls =~ / --- /) {
# Zwei Titel vorhanden, trennt den String bei ' --- '
($current_title, $next_title) = split(/ --- demn.chst: /, $dls);
} else {
# Nur ein Titel vorhanden, speichere diesen als current_title
$current_title = $dls;
}
# Speichern in den FHEM-Dummy
fhem("setreading DI_SenderTitel Sender $sender");
fhem("setreading DI_SenderTitel Titel_Gerade $current_title");
fhem("setreading DI_SenderTitel Titel_Demnaechst $next_title");
} else {
warn "Fehler beim Abrufen der Daten: ", $response->status_line, "\n";
return undef;
}
}
Gibt es da einen einfachen Weg zur Korrektur?
Für Hilfe, Tipps und Infos diesbezüglich wäre ich sehr dankbar.
- Der Umweg über LWP::UserArgent ist komplett überflüssig, FHEM stellt eigene Funktionen für den Aufruf einer URL bereit, z.B. GetFileFromURL()
- Für die Konvertierung von/nach UTF8 gibt es ebenfalls Funktionen in FHEM utf8ToLatin1() und latin1ToUtf8()
Vielen Dank für die Tipps.
Ich habe deine Empfehlungen eingearbeitet, kann aber die Funktionalität meines Code noch nicht bestätigen, mangels gelieferter Umlaute.
uPDATE: Alles funktioniert. Nochmals vielen Dank.
Der neue Code sieht so aus:
sub fetch_and_save_radio_info {
my $url = 'http://192.168.178.78/YamahaExtendedControl/v1/tuner/getPlayInfo';
# Verwende die FHEM-eigene Funktion GetFileFromURL
my $response_content = GetFileFromURL($url);
if ($response_content) {
# Konvertiere den Inhalt von Latin-1 nach UTF-8
my $utf8_content = latin1ToUtf8($response_content);
my $json = decode_json($utf8_content);
return undef unless exists $json->{dab};
my $sender = $json->{dab}->{service_label};
my $dls = $json->{dab}->{dls};
# Variablen für Titel setzen
my ($current_title, $next_title) = ("", "-");
# Überprüfe auf verschiedene Muster
if ($dls =~ /^JETZT ON AIR :: (.*?) :: (.*)$/) {
# Variante mit "JETZT ON AIR ::", Doppelpunkte werden durch " - " ersetzt
$current_title = "$1 - $2";
} elsif ($dls =~ / --- /) {
# Zwei Titel vorhanden, trennt den String bei ' --- '
($current_title, $next_title) = split(/ --- demn.chst: /, $dls);
} else {
# Nur ein Titel vorhanden, speichere diesen als current_title
$current_title = $dls;
}
# Speichern in den FHEM-Dummy
fhem("setreading DI_SenderTitel Sender $sender");
fhem("setreading DI_SenderTitel Titel_Gerade $current_title");
fhem("setreading DI_SenderTitel Titel_Demnaechst $next_title");
} else {
warn "Fehler beim Abrufen der Daten von der URL: $url\n";
return undef;
}
}
Zitat von: betateilchen am 14 August 2024, 19:49:56- Der Umweg über LWP::UserArgent ist komplett überflüssig, FHEM stellt eigene Funktionen für den Aufruf einer URL bereit, z.B. GetFileFromURL()
- Für die Konvertierung von/nach UTF8 gibt es ebenfalls Funktionen in FHEM utf8ToLatin1() und latin1ToUtf8()
wo findet man denn Funktionen, wie z. B. latin1ToUtf8 ?
Zitat von: Invers am 15 August 2024, 11:42:06wo findet man denn Funktionen, wie z. B. latin1ToUtf8 ?
Hallo,
nur, in dem man es weiß oder in die fhem.pl schaut. Ist schon interessant, was man da so alles an Nützlichem findet.
Grüße Jörg
Zitat von: JoWiemann am 15 August 2024, 11:50:45in dem man es weiß oder in die fhem.pl schaut
oder hier im Forum mal die Suche benutzt, bevor man eine Frage stellt.
Zitat von: betateilchen am 15 August 2024, 14:51:35Zitat von: JoWiemann am 15 August 2024, 11:50:45in dem man es weiß oder in die fhem.pl schaut
oder hier im Forum mal die Suche benutzt, bevor man eine Frage stellt.
Du kannst mal getrost davon ausgehen, dass ich immer die Suche nutze, bevor ich hier Fragen stelle. Um das zu wissen, bin ich ja schon lange genug dabei. Ich bekomme auch noch dazu oft mit, dass Andere darauf verwiesen werden. Ich lese hier auch täglich, ohne zu fragen.
Zitat von: JoWiemann am 15 August 2024, 11:50:45Zitat von: Invers am 15 August 2024, 11:42:06wo findet man denn Funktionen, wie z. B. latin1ToUtf8 ?
Hallo,
nur, in dem man es weiß oder in die fhem.pl schaut. Ist schon interessant, was man da so alles an Nützlichem findet.
Grüße Jörg
Danke, guter Tipp. Mir wäre das nicht in den Sinn gekommen, da mal rein zu sehen.
Ich ging immer davon aus, dass man so etwas in der Commandref oder einer anderen Liste finden würde.