Problem mit Umlaute in Perl-Befehl fhem()

Begonnen von kamp, 08 Juni 2024, 21:54:04

Vorheriges Thema - Nächstes Thema

kamp

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?

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kamp

#2
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.

Beta-User

Der code enthält auch einen Logik Fehler: wo/wann wird $umsg eingelesen...?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

kamp

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

betateilchen

#5
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

andies

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.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann