FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: kamp am 08 Juni 2024, 21:54:04

Titel: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: kamp am 08 Juni 2024, 21:54:04
Hallo, ich habe ein notify, in dem ich mir Unwetterwarnung aus einem Reading an mein Nextcloud-Talk senden möchte. Das funktioniert soweit, nur wenn ein Umlaut enthalten ist, geht es nicht.

Bsp Reading das geht (ohne Anführungszeichen): "Unwetterwarnung Test"
Bsp Reading das nicht geht (ohne Anführungszeichen): "Unwetter Sturmböen"


Hier das Def aus dem Notify:

Unwetter:warnung:.* {
my $typ = ReadingsVal("Unwetter","typ","OK");;
if($typ eq "WARN") {
my $umsg = ReadingsVal("Unwetter","warnung","keine Unwetterdaten....");;
fhem("set Talk msg Unwetterwarnung!\\n$umsg");;
}
elsif($typ eq "ALERT") {
my $umsg = ReadingsVal("Unwetter","warnung","keine Unwetterdaten....");;
fhem("set Talk msg Unwetteralarm!\\n$umsg");;
}
elsif($typ eq "WARNHIGH") {
my $umsg = ReadingsVal("Unwetter","warnung","keine Unwetterdaten....");;
fhem("set Talk msg Hohe Unwetterwarnung!\\n$umsg");;
}
}

Was muss ich tun, damit es auch mit Umlauten geht?
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: betateilchen am 08 Juni 2024, 22:02:39
ZitatProblem mit Umlaute in Perl-Befehl fhem()

Erstens ist fhem() überhaupt kein perl Befehl, sondern eine perl Funktion.
Zweitens ist diese Funktion vermutlich nicht die Ursache für Dein Problem.

Die Ursache dürfte vermutlich in Deinem device "Talk" liegen. Da ich das aber nicht kenne und ich auch nicht weiß, welchen TYPE das device nutzt, kann ich Dir keine Lösung vorschlagen. Aber Du musst irgendwie dafür sorgen, dass beim Verschicken der Nachricht der korrekte Zeichensatz von "Talk" verwendet wird.
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: kamp am 08 Juni 2024, 22:31:23
defmod Talk HTTPMOD none 0
attr Talk icon robot
attr Talk room Zentrale
attr Talk set01Data {"token":"redacted", "message":"$val"}
attr Talk set01Name msg
attr Talk set01TextArg 1
attr Talk set01URL https://bot:redacted@cloud.redacted/ocs/v2.php/apps/spreed/api/v1/chat/redacted
attr Talk setHeader1 Content-Type: application/json
attr Talk setHeader2 Accept: application/json
attr Talk setHeader3 OCS-APIRequest: true
attr Talk stateFormat Nextcloud Talk

setstate Talk Nextcloud Talk

Wie sehe ich da den Zeichensatz?

Ich denke nicht, dass es am Talk-Httpmod liegt, denn wenn ich in FHEM eingebe "set Talk msg Unwetterwarnung!\nSturmböen" funktioniert es mit dem Umlaut. Es muss daher an was anderem liegen.
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: Beta-User am 09 Juni 2024, 07:56:45
Der code enthält auch einen Logik Fehler: wo/wann wird $umsg eingelesen...?
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: kamp am 10 Juni 2024, 16:39:22
Diesen Kommentar verstehe ich nicht, sorry... Wüsste nicht wo da ein Logikfehler ist und umsg nicht eingelesen werden soll... Das funktioniert ja einwandfrei und damit habe ich kein Problem, nur wenn eben ein Umlaut darin ist gehts nicht.

...
my $umsg = ReadingsVal("Unwetter","warnung","keine Unwetterdaten....");;
...
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: betateilchen am 10 Juni 2024, 17:14:24
Den Kommentar hatte ich auch nicht verstanden.
Das einzige, was ich an der Logik ändern würde: Ich würde die Wertzuweisung vor die if Abfrage stellen, dann braucht man die nur einmal im code, und die Abfrage mit einem else abschließen statt einem elsif.

Unwetter:warnung:.* {
  my $typ = ReadingsVal("Unwetter","typ","OK");;
  my $umsg = ReadingsVal("Unwetter","warnung","keine Unwetterdaten....");;
  if ($typ eq "WARN") {
    fhem("set Talk msg Unwetterwarnung!\\n$umsg");;
  } elsif ($typ eq "ALERT") {
    fhem("set Talk msg Unwetteralarm!\\n$umsg");;
  } else ($typ eq "WARNHIGH") {
    fhem("set Talk msg Hohe Unwetterwarnung!\\n$umsg");;
  }
}

Dein Umlautproblem kommt vermutlich von hier:

attr Talk set01Data {"token":"redacted", "message":"$val"}
Vermutlich muss $val entsprechend in den richtigen Zeichensatz codiert werden.
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: andies am 19 Juni 2024, 05:53:55
Ich hatte mit dem TelegramBot einen vermutlich ähnlichen Fehler. Während ich auf der Kommandozeile
set Bot _msg TestÄausführen konnte, ergab der eigentlich identische Befehl
fhem(,,set Bot _msg TestÄ")eine Fehlermeldung (ich habe natürliche andere Anführungszeichen benutzt, ich schreibe das am Handy und bin momentan zu faul, die richtigen zu suchen).

Ich konnte nicht herauskriegen, was da los war und umschiffe Umlaute jetzt.
Titel: Aw: Problem mit Umlaute in Perl-Befehl fhem()
Beitrag von: kamp am 13 August 2024, 14:48:17
also ich denke auch, dass hier der Fehler wo anders liegt, nicht in unseren Eingaben. Ich ersetze jetzt auch alle Umlaute...nicht "schoen", aber so werde ich nun vor "Sturmboeen" gewarnt :/