Tvheadend Aufnahmebenachrichtigung an Openhab

  • Irgendwie blicke ich jetzt überhaupt nicht mehr durch
    es gibt ein Telgram Binding da kann man dann
    Supported Things Telegram Bot konfigurieren

    telegram.things

    Code
    Thing telegram:telegramBot:PatricksHAB_bot [ chatIds="123456", botToken="123456", parseMode="Markdown" ]


    und noch ein "Telegram Action"
    für das ich beim ersten Mal eine /services/telegram.cfg angelegt hatte.

    Dort sind auch die chatID und der Token hinterlegt


    beim Beenden der Aufnahme gibt es den Fehler


    2020-04-16 17:52:26.997 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'aufnahmen': org/apache/commons/httpclient/HttpClient


    im Openhab Wiki sehen die Befehle irgendwie anders aus - oder ??


    Code
    rule "Send telegram with Formatted Message"
    when
       Item Foo changed
    then
       val telegramAction = getActions("telegram","telegram:telegramBot:2b155b22")
       telegramAction.sendTelegram("item Foo changed to %s and number is %.1f", Foo.state.toString, 23.56)
    end

    Diese val telegramAction gibt es in Deiner rule nicht.

  • Jetzt habe ich eine neue Fehlermeldung.

    Code
    2020-04-16 21:32:02.835 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'aufnahmen': An error occurred during the script execution: Could not invoke method: org.openhab.binding.telegram.bot.TelegramActions.sendTelegram(org.eclipse.smarthome.core.thing.binding.ThingActions,java.lang.String,java.lang.Object[]) on instance: null
  • das neue telegram binding schreit gerade zu nach nützlichen integrationen.
    ich muss mir echt mal anschauen wie handbrake über kommandozeile funktioniert.

    hier mal ein screenshot vom neuen telegram binding. hab mal eine dummyrule getestet.

    könntest du davon wohl deinen Code Mal Posten wie das ganze aussehen muss ?

    Das mit der Heizungssteuerung finde ich auch sehr interessant

  • könntest du davon wohl deinen Code Mal Posten wie das ganze aussehen muss ?

    du brauchst das telegram binding und diese beiden channels davon in deiner items datei(muss natürlich auf deine werte angepasst werden)

    Code
    String  Telegram_Last_ReplyID  ""  { channel="telegram:telegramBot:bot:replyId" }
    String  Telegram_Last_Text  ""  { channel="telegram:telegramBot:bot:lastMessageText" }

    dann noch
    1. eine rule die bei einem bestimmten event triggert und dir deine auswahlbuttons per telegramm sendet....du kannst beliebig viele buttons senden:

    Code
    rule "abends licht aus"
    when
        Time cron "0 0 0 * * ?"
    then
    telegramAction.sendTelegramQuery("Es ist Mitternacht und im Wohnzimmer ist noch Licht an. Soll ich es für dich ausschalten?", "Mitternacht_Wohnzimmerlicht", "Ja bitte", "In 15 Minuten")
    end


    ....und 2. eine rule die deine buttonauswahl auswertet


    in der ersten rule zeile 5 ist Mitternacht_Wohnzimmerlicht deine erstellte reply id, kannst du natürlich beliebig anpassen. dahinter folgen kommagetrennt deine gewünschten antwortbuttons.
    die zweite rule triggert bei einer änderung deiner bestimmten reply id....hier im beispiel in zeile 3 siehst du aus der ersten rule wieder die Mitternacht_Wohnzimmerlicht
    in zeile 5-8 und 9-14 wird dann ein zu deinen buttons passender befehl ausgeführt.
    reply ids kannst du beliebig viele erstellen. du brauchst immer 2 rules...eine triggerrule die buttons sendet und einen reply id wert, die zweite die auf einen bestimmten reply id wert reagiert und auswertet.

  • Mit der Umstellung auf OH3 muß ich ja die config des HTTP Binding anpassen.
    Das habe ich jetzt hoffentlich auch hinbekommen. Es hängt jetzt an der rule.

    Code
    String      TVH_Letzte_Aufnahme_Name "Letzte Aufnahme Name" {channel="http:url:tvheadend_aufnahme_abgeschlossen:TVH_Letzte_Aufnahme_Name"}
    String      TVH_Letzte_Aufnahme_Kanal "Letzte Aufnahme Kanal" {channel="http:url:tvheadend_aufnahme_abgeschlossen:TVH_Letzte_Aufnahme_Kanal"}

    und ich habe tatsächlich die beiden Items "befüllt"

    Code
    2022-01-10 07:03:20.308 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'TVH_Letzte_Aufnahme_Name' changed from NULL to Familienfest und andere Schwierigkeiten
    2022-01-10 07:03:20.312 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'TVH_Letzte_Aufnahme_Kanal' changed from NULL to TELE 5

    Aber, wie passe ich die rule da jetzt an, damit ich den Inhalt der Items per Telegram verschicke???

    bisher sieht die rule so aus:

    var String aufnahmename= status.TVH_Letzte_Aufnahme_Name ???

  • Hab es ganz allein hinbekommen!

    Naja eigentlich copy&paste einer anderen rule von @horschte

  • So ganz rund läuft die Sache nicht.
    manchmal kriege ich keine Benachrichtigung und relativ häufig steht in der Benachrichtigung die vorletzte Aufnahme drin.

    Ich muß wohl die rule ein wenig bremsen. Also irgendwo ein Thread::sleep(60000) einbauen? Damit TVH_Letzte_Aufnahme_Name und TVH_Letzte_Aufnahme_Kanal auf jedenfall aktuell sind.
    Nur wo ?

  • das hatte hier jemand schonmal auch gehabt. die verzögerung muss vor "sendTelegram". ich würde aber einen timer anstatt eines threadsleep einsetzen...bspw

  • Obwohl ich den Timer auf 2 Minuten gesetzt habe, gibt es wieder die Benachrichtigung für die vorletzte Aufnahme. Dann probiere ich noch einmal 3 Minuten.
    Ich könnte doch aber auch den Trigger ändern?? Item TVH_Letzte_Aufnahme_Name changed


    ich hoffe die Klammern stimmen?

  • ich würde aber einen timer anstatt eines threadsleep einsetzen

    Was immer da für eine Programmiersprache folgt - die kenne ich wohl nicht. Aus Kenntnis von anderen Programmiersprachen kann ich mir aber nicht vorstellen, dass das mit dem Timer so funktionieren kann. Da werden Variablen Werte zugewiesen, dann wird gewartet. Dadurch werden sich die zugewiesenen Werte ja kaum ändern (außer das handelt sich bei der verwendeten Sprache um einen raffinierten Referenz-Mechanismus auf globale Objekte - aber so sieht das nun wirklich nicht aus).

    Mag schon sein, dass grundsätzlich da Zeitsynchronisierung eine pragmatische Lösung ist. Sehr oft ist das aber gefährlich. Ein Elektriker wird sich normalerweise nicht auf seinen Kumpel verlassen "In 5 Minuten werde ich den Strom abgeschaltet haben, dann kannst du ...", sondern das prüfen. Wie gesagt, in dem Fall mag es ok sein. Bisweilen sehe ich in Admin-Skripts in großen Umgebungen sleeps in dem Sinne - so nach 10 Minuten wird schon alles initialisiert sein, DB da, ... Dann greife ich drauf zu. Wenn jetzt Mal nach schwerwiegendem Ausfall Tausend Server gleichzeitig gestartet werden, dauert es auf ein Mal länger, und es wird ganz schwer alles wieder ans Laufen zu kriegen.

    Moderne APIs sollten meines Erachtens Events, Zustands-Überprüfungen, andere Synchronisierungs-Mechanismen als eine Wartezeit bieten.

    Kodi 21.1, 17.6, 21.1, 16, 20.5 on Windows 11 Pro, Android 6, Android 12, FireTV Box 2nd Gen, FireTV 4k Max 2nd Gen
    Media on NAS, OpenMediaVault 6 (Debian Linux).

  • Dadurch werden sich die zugewiesenen Werte ja kaum ändern

    der name der sendung wird in dem fall mittels http binding in openhab nur alle 60sek aktualisiert, daher die notwendige wartezeit.
    patrik hat lediglich einen logikfehler in seiner rule. die werte werden da am anfang bestimmt, dürfen jedoch erst nach dem timer bestimmt werden.
    zum thema sleep findest du hier ein paar infos:
    https://community.openhab.org/t/why-have-my-…-bad-idea/47695

  • Den Timer auf drei Minuten zu setzen hilft nichts.
    @horschte: Muß die Rule nicht etwas warten, bis die var String gefüllt werden? Jetzt wartet sie ja nur mit den Versand?

    ja natürlich....das folgende muss in den timer, nicht an den anfang der rule.

    Code
    var String aufnahmename = TVH_Letzte_Aufnahme_Name.state.toString
    var String kanal = TVH_Letzte_Aufnahme_Kanal.state.toString

    der timer in deiner rule ist ausserdem falsch. das muss so aufgebaut sein...

    Code
    createTimer(now.plusMinutes(1), [|
                ............................................................
                ])

    weiterhin halte ich deinen trigger Item TVH_Letzte_Aufnahme_Name changed nicht für nutzbar. das hast du ja plötzlich so abgeändert.
    so wird die rule nämlich auch laufen wenn du das system startest ( TVH_Letzte_Aufnahme_Name = NULL. bei der ersten tvh abfrage ändert sich schon der name von null auf den korrekten namen,
    also nimm wie oben schonmal empfohlen TVH_Aufnahme als auslöser,
    das könnte dann bspw so aussehen:

    Code
    when
        Item TVH_Aufnahme changed from ON to OFF
    then

    damit stellst du sicher, dass beim systemstart oder neuladen der items nichts ausgelöst wird...ein NULL wert wird damit ja ausgeschlossen.

  • Das der TVH_Letzte_Aufnahme_Name als trigger nicht geeignet ist, habe ich auch schon bemerkt. Wenn ich die neueste Aufnahme nämlich lösche, rücken die anderen nach und der erste Name in der Liste ändert sich und ich bekomme eine Benachrichtigung.

    Probiere die neue Rule heute abend aus.

  • Das der TVH_Letzte_Aufnahme_Name als trigger nicht geeignet ist, habe ich auch schon bemerkt. Wenn ich die neueste Aufnahme nämlich lösche, rücken die anderen nach und der erste Name in der Liste ändert sich und ich bekomme eine Benachrichtigung.

    genau deshalb. die o.g. lösung sollte funktionieren. mir würde kein szenario einfallen, an dem es zu einem falschen start der rule kommen würde.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!