TV Headend Server Status in Sitemap

  • Hallo,

    ich würde gerne ein paar Infos meines TVHeadend Servers in Openhab darstellen.
    Besonders wichtig wäre mir zu wissen, welche nächsten aufnahmen geplant sind. Damit ich die Suchtimer einfacher im Auge behalten kann.
    Ich bin auf dieses Projekt gestoßen. Leider ist es mit Copy & Pate und ein paar Anpassungen nicht getan und der Code übersteigt mal wieder meinen Horizont.

    in /etc/openhab2/scripts/shell habe ich folgende jsonpathtransform.sh angelegt


    unter /etc/openhab2/transform
    habe ich die folgenden Dateien angelegt

  • dann noch ein paar rules


  • bei der "mitgelieferten" Sitemap bekomme ich leider keinen output
    Configuration model 'tvheadend.sitemap' is either empty or cannot be parsed correctly!


    bei einer einfacheren Sitemap

    Bekomme ich wenigstens

    TVH Version
    4.3~ce09077

    subscriptions
    0

    finished
    135

    TVH Finished size
    - MB

    upcoming
    4

    next recording
    -.- -:-

    angezeigt.

    Hat jemand von euch Lust das mit mir hinzufummeln??

    Alternativ überlege ich, wie man aus @horschte 's telegrambenachrichtigungs Code

    Code
    val telegramAction = getActions("telegram","telegram:telegramBot:bot")
    rule "aufnahmen"
    when
        Item TVH_Aufnahme received command
    then
    var String tvheadendapi = sendHttpGetRequest("http://benutzer:passwort@syno:9981/api/dvr/entry/grid_finished?limit=1&sort=stop_real&dir=desc")
    var String aufnahmename = transform("JSONPATH", "$.entries.*.title.ger", tvheadendapi)
    var String kanal = transform("JSONPATH", "$.entries.*.channelname", tvheadendapi)

    Etwas ähnliches hinbasteln könnte?
    Also einfach die Abfrage in ein item schreiben lassen, daß man dann in die sitemap packen kann......

  • hab mal kurz rübergeschaut. mal im vertrauen...was du da machen willst ist quatsch. grundsätzlich geht das natürlich aber man neigt speziell beim smarthome einstieg ne menge völlig überflüssigen kram einzubinden. du wirst da so gut wie nie oder wenn überhaupt mal was anschauen. was interessieren kommende aufnahmen, die abgeschlossenen sind doch wichtig. wen interessiert die tvh version usw usw.
    mach ne benachrichtigung und gut ist. mehr wirst du wenns fertig ist auch nicht wirklich nutzen.
    so jedenfalls ist meine erfahrung.
    wenn überhaupt würde ich maximal den namen der nächsten aufnahme anzeigen lassen.

  • Na, die nächsten Aufnahmen fänd ich schon interessant.
    Machmal weiß ich, daß eine Aufnahme progrmmiert sein müsste. Das würde ich halt gerne sehen.
    Bei dem Rest hast Du Recht.
    überflüssig....

    Deswegen auch die Idee, deinen Ansatz zu nutzen.
    Aber wie schreibt man das in ein item???

  • hab mal geschaut. per api kann man recht gut die gewünschten anzahl an anstehenden aufnahmen abfragen, chronologisch ordnen und dann per jsonpath die titel extrahieren...bspw
    [
      "Bundesliga Pur Klassiker",
      "Winter in Schwaben"
    ]
    diese wiederum kann man per .split(',') und .get(X) trennen und per rule den items zuordnen.
    allerdings hab ich in einer testrule noch das problem, dass wenn es mehr .get(x) abfragen als reale anstehende aufnahmen gibt die rule crasht.
    in dem fall werden die items nicht mehr zuverlässig mit infos gefüllt. die aufnahmen sind auch nicht durchnummeriert zum weiteren filtern.
    muss ich mal schauen wie man das am besten lösen könnte. (edit: funktioniert über den umweg anzahl der aufnahmen abfragen und erst dann innerhalb einer if abfrage mit dem value "aufnahmenahme" arbeiten)

    wieviel einträge willst du denn gelistet haben?

  • das wären bei 10 einträgen (10 x aufnahmename, 10x unixtime konvertierung) also ca 30 items und ein arsch voll rules. das willste wirklich? deine sitemap wird dann 100m lang [af]

    hier ein brainstorming beispiel um die namen der 3 nächsten aufnahmen (siehe item TVH_Aufnahmen -> "limit") chronologisch anzuzeigen. api abruf musst du natürlich anpassen.

    items:

    Code
    String TVH_Aufnahmen  "[%s]"       { http="<[http://name:passwort@192.168.2.3:9981/api/dvr/entry/grid_upcoming?limit=3&sort=start_real:60000:JSONPATH($.entries.*.title.ger)]" }
    Number TVH_Aufnahmen_Anzahl "[%d]"  {http="<[http://name:passwort@192.168.2.3:9981/api/dvr/entry/grid_upcoming:60000:JSONPATH($.total)]"}
    String TVH_Aufnahme1  "[%s]"
    String TVH_Aufnahme2  "[%s]"
    String TVH_Aufnahme3  "[%s]"

    rules:

    sitemap

    Code
    Text item=TVH_Aufnahme1 visibility=[TVH_Aufnahme1 != "LEER"]
    Text item=TVH_Aufnahme2 visibility=[TVH_Aufnahme2 != "LEER"]
    Text item=TVH_Aufnahme3 visibility=[TVH_Aufnahme3 != "LEER"]

    für die startzeiten der aufnahmen müsste bei jedem eintrag der unix time stamp per api abgerufen, dann in einer rule konvertiert und zum item gepostet werden.

  • AAAHHH man muß das HTTP Binding installieren und dann gehts.

    dachte das ist klar, weil es ja im channel steht [ah]

    Du bist mein Held

    bin aber schon vergeben [ad]

    Aber wie geht das mit der Anzeige der Zeit??

    zeit ist etwas komplexer. die tvh api gibt einen unix timestamp für die jeweiligen aufnahmen aus -> https://de.wikipedia.org/wiki/Unixzeit
    es muss also erstmal wieder ein abruf für die aufnahmen gemacht werden
    - dann split um einen einzelnen wert zu bekommen
    - dann replace um überflüssige zeichen zu entfernen
    - dann den extrahierten timestamp in ein lesbares datum wandeln und zu einem item posten

  • hier nochmals alles komplett mit uhrzeit zum testen. tvh serverdaten wieder anpassen.
    im anhang ist auch noch ein record icon. runterladen, entpacken und nach /etc/openhab2/icons/classic schieben

    vorschau:

    items:

    Code
    Number      TVH_Aufnahmen_Anzahl    "[%d]"                                                  {http="<[http://name:passwort@192.168.2.3:9981/api/dvr/entry/grid_upcoming:60000:JSONPATH($.total)]"}
    String      TVH_Aufnahmen           "[%s]"                                                  { http="<[http://name:passwort@192.168.2.3:9981/api/dvr/entry/grid_upcoming?limit=3&sort=start:60000:JSONPATH($.entries.*.title.ger)]" }
    String      TVH_Aufnahme1           "[%s]"                                  <recording>
    String      TVH_Aufnahme2           "[%s]"                                  <recording>
    String      TVH_Aufnahme3           "[%s]"                                  <recording>
    String      TVH_Aufnahmen_Zeit      "[%d]"                                                  {http="<[http://name:passwort@192.168.2.3:9981/api/dvr/entry/grid_upcoming?limit=3&sort=start:60000:JSONPATH($.entries.*.start)]"}
    DateTime    TVH_Aufnahme1_Zeit      "[%1$td.%1$tm. um %1$tH:%1$tM Uhr]"     <time>
    DateTime    TVH_Aufnahme2_Zeit      "[%1$td.%1$tm. um %1$tH:%1$tM Uhr]"     <time>
    DateTime    TVH_Aufnahme3_Zeit      "[%1$td.%1$tm. um %1$tH:%1$tM Uhr]"     <time>

    rules:

    sitemap:

    Code
    Text	item=TVH_Aufnahme1_Zeit		visibility=[TVH_Aufnahme1 != "LEER"]
    Text	item=TVH_Aufnahme1		visibility=[TVH_Aufnahme1 != "LEER"]
    Text	item=TVH_Aufnahme2_Zeit		visibility=[TVH_Aufnahme2 != "LEER"]
    Text	item=TVH_Aufnahme2		visibility=[TVH_Aufnahme2 != "LEER"]
    Text	item=TVH_Aufnahme3_Zeit		visibility=[TVH_Aufnahme3 != "LEER"]
    Text	item=TVH_Aufnahme3		visibility=[TVH_Aufnahme3 != "LEER"]
  • Entschuldigung,
    ich habe gestern den ganzen Tag den Maler gespielt.
    Schlafzimmer tapeziert.
    Blöde Idee, wenn es um 17 Uhr zappenduster ist.

    Ich habe die files angelegt und in der items Datei meine Serverdaten eingetragen.

    Ich kriege allerdings nur den Text angezeigt : -.-. um -:- Uhr
    Im Browser steht dann:
    SSE-Abonnement fehlgeschlagen: Im Fallback-Modus ausgeführt

Jetzt mitmachen!

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