Kodi Status ans Smarthome übermitteln

  • Ich bevorzuge es auch, wenn etwas pro-aktiv seinen Status dem System mitteilen kann.

    Kannst du "proaktiv" etwas genauer definieren?

    Ich meine, mir ist bewusst was "proaktiv" semantisch bedeutet. Mich würde nur interessieren in wie fern eine "proaktive" Handlung (also ein vorausgeplantes Ereignis) bei Kodi Sinn macht. Soll ein Smarthome-System das Licht schon dimmen, weil es "erahnt", dass ein Film gestartet werden könnte?

    Für mich machen proaktive Meldungen nur dann Sinn, wenn entsprechende Telemtriedaten vorliegen und das auch nur bei ganz wenigen Ereignissen. Somit darf ein System melden, wenn es erahnt, dass die Festplatte voll wird. Diese Berechnung muss natürlich über einen gewissen (sehr langen) Zeitraum erfolgen, damit statistisch ausgewertet werden kann, wann das der Fall ist.

  • Ansonsten bin ich komplett bei horschte. Kodi soll dann was senden, wenn etwas passiert. Und das geht problemlos über die API.

    genau das ist auch mein gedankenansatz. die api funktioniert hervorragend und bietet irre viele funktionen. von daher ist es doch sinnvoller boardmittel zu nutzen als sich eine weitere potenzielle fehlerquelle an board zu holen.
    das soll aber trotzdem keine kritik meinerseits an eurer lösung sein. wenn das für euch die bevorzugte lösung ist, dann ist auch alles gut. ich wollte lediglich einen hinweis geben.

  • @horschte
    Ja gut, jeder Jeck ist anders ;)
    Aber auch in deinem Fall ist ja eine Erweiterung nötig, nur halt eben auf der anderen Seite beim Smart-Home System.
    Diese muss auch von Zeit zu Zeit aktualisiert werden, um z.B. auf API-Änderungen zu reagieren.

    @DaVu
    Pro-Aktiv war vielleicht ein unglücklich gewähltes Wort.
    Ich meine damit lediglich die Herangehensweise, ob pushing oder polling.
    Ähnlich wie es hier am Beispiel von Messengern erklärt wird.

    Natürlich kommt man mit beiden Methoden zum Ziel und als Endanwender bekommt man in der Regel auch nix davon mit.
    Daher, jeder wie man's mag.

  • Aber auch in deinem Fall ist ja eine Erweiterung nötig, nur halt eben auf der anderen Seite beim Smart-Home System.

    ja...aber genau diese ebene ist doch auch fürs licht was geschaltet werden soll zuständig. daher....alles unter einem dach.

    Diese muss auch von Zeit zu Zeit aktualisiert werden, um z.B. auf API-Änderungen zu reagieren.

    das funktioniert problemlos, da die communitys um die smarthomesysteme/entwicklung riesig ist und sich auf die integration von drittsystemen spezialisiert hat. beim o.g. kodi-addon bist du auf maintainer, im schlechtesten fall eine person angewiesen.

    Ich meine damit lediglich die Herangehensweise, ob pushing oder polling.

    kodi informationen werden über die api auch in echtzeit ins smarthome system gesendet. das ist kein rein zeitbasiertes/verzögertes polling falls du das dachtest.

  • kodi informationen werden über die api auch in echtzeit ins smarthome system gesendet. das ist kein rein zeitbasiertes/verzögertes polling falls du das dachtest.

    Das ist nicht 100% korrekt. Dafür muss man aber auch verstehen wohin Kodi was sendet ;), bzw. worauf das Smarthome System zugreift.

    Kodi sendet solche Informationen an seinen eigenen internen Webserver und nicht direkt an das Smarthome System. Nehmen wir mal das Beispiel "Yatse"...eine Remote app, deren Status anzeigt welcher Film gerade abgespielt wird...zum Beispiel ;) . Die App kann noch viel mehr.

    Nehmen wir also an, ich habe eine Tastatur an mein Kodi angeschlossen, navigiere damit zu meiner Bibliothek und starte einen Film. Dann öffne ich Yatse und Yatse zeigt mir direkt an, welcher Film abgespielt wird. Woher weiß Yatse das? Die App weiß es deshalb, weil die App jede verdammte Sekunde einen Request an den Webserver sendet:


    Hier habe ich einfach nur die App geöffnet und Kodi macht nichts. Kodi spielt keinen Film ab. Es ist einfach nur im Hauptmenü. Ich bediene die App auch nicht. Ich schaue sie mir einfach nur an. Schaut man sich die Zeitstempel an, dann sieht man, dass fast jede Sekunde ein Request an den Webserver gesendet wird, der den aktuellen Status enthält und Yatse diesen abfragt. In dem Fall aus dem Log oben werden in sehr kurzen Abständen folgendes abgefragt:

    * ist JSON "da" .... Incoming request: {"id":596,"jsonrpc":"2.0","method":"JSONRPC.Ping"}
    * welcher Player ist aktiv: Incoming request: {"id":560,"jsonrpc":"2.0","method":"Player.GetActivePlayers"}
    * welche Lautstärke ist eingestellt: Incoming request: {"id":489,"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["volume","muted"]}}

    Diese Abfragen wiederholen sich immer wieder. Da Yatse den Status immer wieder wissen möchte um es wenigstens halbwegs in Echtzeit zu haben. Wirklich Echtzeit ist das nicht. Es ist eine Verzögerung.

    Somit ist es im Endeffekt schon ein "Polling" der App und das muss die App auch jede Sekunde machen. Denn Kodi sendet nichts an ein Smarthome System. Das kann ich in Kodi gar nicht einstellen ohne ein entsprechendes Add-on zu installieren, welches eine "Monitoring"-Funktion anbietet. Kodi sendet also seinen Status ausschließlich an seinen eigenen Webserver und ein anderes System (sei es nun ein Smarthome-System oder eine App, die auf die API zugreift), muss diese Informationen "erfragen"....also pullen ;)

    Wenn man da mal ein Wireshark drüber laufen lässt, möchte ich gar nicht wissen, wieviel Netzwerktraffic durch so eine App oder ein Smarthome-System verursacht wird.


    @horschte Deswegen habe ich den Bereich, den du von mir Zitiert hast, wieder aus meinem Posting entfernt. Weil es nicht richtig ist. ;)

    3 Mal editiert, zuletzt von DaVu (13. September 2021 um 10:31)

  • @horschteJa stimmt natürlich, im Fall der Kodi API ist Echtzeit möglich. Das Beispiel aus Beitrag 2, an das ich dabei dachte, ist Polling.

    Ich habe als Systeme ioBroker und node-red in Verwendung. Und da bekomme ich aber schon mit, dass viele Adapter/Nodes letzten Endes von einzelnen Personen abhängig sind. Vom Prinzip tut sich da nicht viel, das System an sich wird von einer Community vorangetrieben und dann gibt es da die vielen Erweiterungen von einzelnen Entwicklern.

    Aber wie du bereits in deinem vorletzten Beitrag hast durchblicken lassen, es gibt hierbei kein Richtig oder Falsch. Man hat verschiedene Lösungsansätze und damit die Qual der Wahl :)

  • Aber genau das ist doch mein Problem.
    Ich kann über die API alle x Sekunden abfragen, wird gerade was abgespielt?
    Ich möchte aber, dass Kodi das Signal gibt, ich spiele jetzt Film xyz ab

    Gibt es dazu auch eine Möglichkeit über die API? Also das Kodi darauf aktiv etwas sendet, wenn es eine Änderung gibt?
    Ich verstehe die API immer nur so, dass ich da Informationen abrufen kann oder etwas an Kodi schicken kann.
    Das würde aber heißen, dass ich immer wieder "nachfragen" muss, ob eine Änderung stattgefunden hat und geanu das ist bei MQTT halt anders, weil da das Endgerät (hier Kodi) alle Änderungen hin meldet und darauf reagiert werden kann.
    Wenn das auch über die API möglich ist, habt ihr dazu irgendwelche Infos?

  • Ich bin auch kein Experte, aber die Kodi-Addons der Smarthome Systeme verwenden die Kodi API vermutlich über eine Websocket-Verbindung. Da wird beim Start nur einmal per Handshake die Verbindung aufgebaut und dann findet eine ständige Kommunikation zu beiden Seiten statt.Nur um festzustellen, ob Kodi überhaupt online ist, wird wahrscheinlich vor dieser Verbindung in gewissen Abständen eine Anfrage gesendet. Davon bekommst du als Nutzer aber nichts mit.

  • Nein, wie oben beschrieben und aufgezeigt gibt es per Default in Kodi keine Möglichkeit permanent oder per bestimmter Aktion etwas an eine entgegengesetzte Schnittstelle zu senden.

    Eine API ist per Definition eine Schnittstelle die angesprochen wird. Keine Schnittstelle, die sendet.

    Addons können diese Aufgabe übernehmen. Diese senden dann halt an die entgegesetzte Schnittstelle. Daher gibt es ja auch Addons für FHEM oder ähnliches.

    Kodi Boardmittel sind aber nicht in der Lage an eine andere Schnittstelle zu senden. Diese senden an den internen Webserver und darüber können diese Informationen ausgelesen werden. Deswegen funktionieren Apps wie Yatse ja auch nur wenn der Webserver aktiv ist. Schalte ich den aus, dann laufen die Requests ins Leere.

    So zumindest mein Verständnis in dieser Sache.

  • Wenn das auch über die API möglich ist, habt ihr dazu irgendwelche Infos?

    Schau Dir einmal die Dokumentation der Kodi Schnittstelle in Home Assistant an: https://www.home-assistant.io/integrations/kodi/
    Dort gibt es zum einen die Möglichkeit der Steuerung und zum anderen die Möglichkeit Events zu bekommen, wenn Kodi etwas ausführt. Das funktioniert wohl per Remote Procedure Call.

    Hier laufen macOS, iOS, iPadOS, tvOS, watchOS, Proxmox, Home Assistant OS, QTS, Raspberry Pi OS, piCorePlayer und Fire OS

  • Remote Procedure Call ist die API und home assistant macht es auch über Abfragen und daraus Events machen.
    Dazu müsste aber eine Endlosschleife laufen, die immer wieder alles mögliche abfragt. Das geht völlig an "smart" vorbei.
    Aber ich merke schon, dass ich damit hier nicht weiter komme.
    Trotzdem Danke für die Antworten.

  • Nicht, dass das jetzt besonders wichtig wäre, für die Diskussion hier, aber

    Eine API ist per Definition eine Schnittstelle die angesprochen wird. Keine Schnittstelle, die sendet.

    Woher kommt das?

    Es gibt massenweise APIs, die ungefragt senden/auf ungefragtes Senden reagieren. Moderne Event-basierte Programmierung basiert darauf. Ist leider aufwändiger und komplexer, als altes Polling, aber natürlich viel Resourcen-schonender. Einige Beispiele: Uraltes Unix/Posix signal(). Oder inotify (statt Filesysteme zu pollen auf Veränderung) inotify(7) - Linux manual page (man7.org). Auf Windows ist es ähnlich - auf Empfängerseite gibt es dann die WaitFor...() Funktionen (die praktisch keine Resourcen brauchen im Vergleich zu Polling).
    Selbst habe ich an Schach-APIs mitgearbeitet - erwähne das, weil es leicht klar wird, wo der Vorteil von Senden/Events wird: Statt ununterbrochen den Schachgegner zu fragen: Hast du dich endlich für den neuen Zug entschieden? Wartet man ruhig auf den "Event", dass der Gegner den nächsten Zug mitteilt.

    Bei Monitoring/Alarming APIs ist beides üblich - Agent wartet, bis er gepollt wird, oder/und schickt selbstständig Alarme an ein Backendsystem, wenn was schief geht.

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

  • Genau so ist es.

    Unsere Schnittstelle heißt ja nicht umsonst JSON-RPC ;)

    Es ist ein Remote-"Call" und kein "Push"

    Deswegen geht es aber nicht zwingend komplett an "Smart" vorbei. Ich finde sogar, dass es so individuell möglich ist Kodi fast überall einbinden zu können und ich bin deswegen auch nicht auf irgendwelche Bots, Agents, Clients oder Addons angewiesen. Sowas gefällt mir persönlich sehr gut.

    Wenn man aber was anderes möchte, was absolut legitim ist, dann ist die Kodi-interne API nicht das richtige.

    Man darf nur nicht vergessen, dass lokal installierte Addons die dann an ein anderes System senden, im Endeffekt nichts anderes machen als permanent das lokale System abzufragen. Nur das diese Abfragen dann die CPU belasten und nicht das Netzwerk. Man müsste sich ggf die "XBMC.Monitor()"-Funtktion nochmal genauer anschauen und was damit so geht. Ggf könnte man darüber das System "überwachen" und dann bei Vorfall eines Bestimmten Umstandes reagieren. Das dann als Service Addon geschrieben und die Aktion an die Schnittstelle des Smarthome-Systems senden

    Ach ...es gibt da sooo viele Möglichkeiten.

  • @buers

    Das war eine Vermutung von mir. So kenne ich halt von Kodi. Wenn es andere APIs gibt, die auch automatisch senden, dann danke für die Richtigstellung [ay]

    Kodi macht halt nur Polling soweit ich weiß. Wie gesagt, die XBMC.Monitor() Funktion könnte da noch was reißen. Sicher bin ich mir da aber auch nicht.

Jetzt mitmachen!

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