Seite 2 von 2

Re: Warnung per Telegram funktioniert nach Update von 3 auf 4 nicht mehr

Verfasst: 20. Dez 2023 15:22
von udo1toni
Du hast ja nicht nur zwei Prozentzeichen, sondern auch zwei Zeilenumbrüche...
Ich hatte die Items etwas nachlässig konfiguriert, ich müsste den Test also eigentlich noch mal wiederholen, allerdings, wenn das Prozentzeichen mit dem Wert mit kommt (und so sollte es eh sein), dann lass einfach bei den Anweisungen strMeldung.append(...) das " %\n" weg, oder lass nur den Teil Leerzeichen und Prozentzeichen weg, so dass nur der Zeilenumbruch eingefügt wird (aber vielleicht ist der sogar auch unnötig). Sobald der String im StringBuilder korrekt ist, kannst Du den über telegram auch raus hauen (mit strMeldung.toString, denn das StringBuilder Objekt ist eine Liste, kein einfacher String)

Re: Warnung per Telegram funktioniert nach Update von 3 auf 4 nicht mehr

Verfasst: 20. Dez 2023 17:14
von tommesd

Code: Alles auswählen

2023-12-20 17:11:02.144 [INFO ] [g.openhab.core.model.script.telegram] - Meldung: Keller Durchnittsfeuchte 59.4 % Vorratskeller 59 % Waschkeller 57 % FlurKeller 57 % Hobbyraum 63 % Gaestezimmer 61 % 

2023-12-20 17:11:02.146 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'FeuchteTelegram-1' failed: Conversion = 'V' in FeuchteTelegram
Jetzt kommt das als Fehler

Das ist die rule

Code: Alles auswählen

rule "Kellerfeuchte Telegram"
when
    Item telegramMessage received update "Kellerfeuchte"
then 
    val telegramAction = getActions("telegram","telegram:telegramBot:Telegram_Bot")
    val StringBuilder strMeldung = new StringBuilder
    strMeldung.append("Keller Durchnittsfeuchte " + gAlleFeuchtigkeitssensorenKeller.state.toString)
    gAlleFeuchtigkeitssensorenKeller.members.forEach[i|
        strMeldung.append(" " + i.name.split("_").get(1) + " " + i.state.toString)
    ]
    strMeldung.append(" ")
    logInfo("telegram","Meldung: {}",strMeldung.toString)
    telegramAction.sendTelegram(strMeldung.toString)
end

Re: Warnung per Telegram funktioniert nach Update von 3 auf 4 nicht mehr

Verfasst: 22. Dez 2023 06:36
von tommesd
Hallo Udo,
hast Du noch eine Idee woran die rule scheitert?

Re: Warnung per Telegram funktioniert nach Update von 3 auf 4 nicht mehr

Verfasst: 22. Dez 2023 07:27
von udo1toni
Oh. Ich hatte eine Antwort geschrieben, aber anscheinend nicht abgeschickt...

Ja, nachdem ich die Doku des Telegram Bindings geöffnet habe, springt es mich an...
sendTelegram(String message) Sends a message.
sendTelegram(String format, Object... args) Sends a formatted message (See https://docs.oracle.com/javase/8/docs/a ... atter.html
(opens new window) for more information).
Und wenn Du dem Link folgst, kannst Du sehen, dass % ein Zeichen ist, welches zur Formatierung verwendet wird.
Erster Versuch: escape das %:

Code: Alles auswählen

telegramAction.sendTelegram(strMeldung.toString.replace("%","\%"))
Jedes % im Text wird mit einem \% ersetzt.

Eventuell musst Du auch statt \% ein %% einfügen, oder vielleicht findest Du mit dem Hinweis die Lösung. Vielleicht besteht sie sogar darin, die ursprüngliche Variante zu nutzen - also mit strMeldung.append(" %\n") - und dort lediglich das vorangestellte Leerzeichen zu entfernen (denke daran, dass es zwei Stellen gibt, an denen das " %\n" ergänzt wurde und nun nicht mehr eingebaut ist).

Re: Warnung per Telegram funktioniert nach Update von 3 auf 4 nicht mehr

Verfasst: 22. Dez 2023 08:39
von tommesd
Hallo Udo,
vielen Dank und schöne Feiertage.
Diese Version funktioniert nun:

Code: Alles auswählen

rule "Kellerfeuchte Telegram"
when
    Item telegramMessage received update "Kellerfeuchte"
then 
    val telegramAction = getActions("telegram","telegram:telegramBot:Telegram_Bot")
    val StringBuilder strMeldung = new StringBuilder
    strMeldung.append("Keller Durchnittsfeuchte " + gAlleFeuchtigkeitssensorenKeller.state.toString)
    gAlleFeuchtigkeitssensorenKeller.members.forEach[i|
        strMeldung.append("%\n" + i.label.split(" ").get(1) + " " + i.state.toString)
    ]
    strMeldung.append("%\n")
    telegramAction.sendTelegram(strMeldung.toString)
end