hast du mal versucht die currenttime abzurufen? also die aktuelle Zeit des zb films in sekunden?
ich finde da irgendwie den passenden aufruf nicht.
hast du mal versucht die currenttime abzurufen? also die aktuelle Zeit des zb films in sekunden?
ich finde da irgendwie den passenden aufruf nicht.
Player.GetProperties ist die passende Methode. Im zurückgegebenen array time hast du hour, minute und second zur verfügung.
{
"jsonrpc": "2.0",
"id": "1",
"method": "Player.GetProperties",
"params": {
"playerid": 0,
"properties": [
"speed",
"position",
"time",
"playlistid"
]
}
}
Alles anzeigen
gibt
{
"id": "1",
"jsonrpc": "2.0",
"result": {
"playlistid": 0,
"position": 3,
"speed": 0,
"time": {
"hours": 0,
"milliseconds": -627,
"minutes": 0,
"seconds": 0
}
}
}
Alles anzeigen
zurück
Player.GetProperties ist die passende Methode. Im zurückgegebenen array time hast du hour, minute und second zur verfügung.
Code Alles anzeigen{ "jsonrpc": "2.0", "id": "1", "method": "Player.GetProperties", "params": { "playerid": 0, "properties": [ "speed", "position", "time", "playlistid" ] } }
gibtCode Alles anzeigen{ "id": "1", "jsonrpc": "2.0", "result": { "playlistid": 0, "position": 3, "speed": 0, "time": { "hours": 0, "milliseconds": -627, "minutes": 0, "seconds": 0 } } }
zurück
das hatte ich bereits gefunden, aber da ist das problem das er mir nicht die gesammten sekunden angibt, sondern immer alles gleichzeitig füllt, das heisst die minutes seconds und die milliseconds und hours.
also zb bei 2 minuten 30 sekunden laufzeit, teilt er das auf die oder 4 einträge auf.
dann müsste ich das ganze ja umrechnen
wie ist denn die ausgabe?
wie ist denn die ausgabe?
bei 00:16:52
wäre es
das umrechnen ist ja möglich, aber dann das ganze jede sekunde und dann noch postupdate ins item ist heftig.
der hintergrund, ne progressbar braucht ja die sekunden soweit ich das im kopf habe.
hours * 3600 + minutes * 60 + seconds ist keine Option?
hours * 3600 + minutes * 60 + seconds ist keine Option?
wäre auch mein ansatz. wobei ich da eher mit minuten rechnen würde. wer will seine systeme für sowas nebensächliches dermaßen quälen.
einfach per cron minütlich abfragen....natürlich nur wenn das kodisystem an ist. formatieren kannste den kram dann per js
hours * 3600 + minutes * 60 + seconds ist keine Option?
wäre auch mein ansatz. wobei ich da eher mit minuten rechnen würde. wer will seine systeme für sowas nebensächliches dermaßen quälen.einfach per cron minütlich abfragen....natürlich nur wenn das kodisystem an ist. formatieren kannste den kram dann per js
Danke euch beiden.
Klar da habe ich ja drüber nachgedacht, aber das muss ja schon mindestens alle 2 Sekunden ausgeführt werden.
Das ist natürlich schon sehr oft. Aber für ein raspberry4 normalerweise ja peanuts, mal sehen wie openhab reagiert.
edit
ja muss ich nen ping machen.
openhab würde das auch problemlos schaffen. ich würde trotzdem aufwand/belastung etc dem nutzen gegenüberstellen. wie oft schaut man sich sowas an?
openhab würde das auch problemlos schaffen. ich würde trotzdem aufwand/belastung etc dem nutzen gegenüberstellen. wie oft schaut man sich sowas an?
ist schon richtig, aber wenn dann mache ich es richtig, ist ja ein kompletter ersatz für das kodi binding.
openhab würde das auch problemlos schaffen. ich würde trotzdem aufwand/belastung etc dem nutzen gegenüberstellen. wie oft schaut man sich sowas an?
habe das mal versucht, aber irgendwie passt etwas nicht
var Number hours = transform("JSONPATH", "$.result.time.['hours']", json_time)
var Number minutes = transform("JSONPATH", "$.result.time.['minutes']", json_time)
var Number seconds = transform("JSONPATH", "$.result.time.['seconds']", json_time)
json_currenttime.postUpdate( hours * 3600 + minutes * 60 + seconds)
[errorbox]Script execution of rule with UID 'meinscript-4' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.lib.NumberExtensions.operator_multiply(java.lang.Number,java.lang.Number) on instance: null in meinscript
[/errorbox]
aber in meinem Fall ist gar nix NULL,
Meiner bescheidenen Meinung nach muss der Punkt vor der eckigen Klammer weg. Also time['hours'] usw. Auch bei den Minuten und Sekunden und so weiter.
Meiner bescheidenen Meinung nach muss der Punkt vor der eckigen Klammer weg. Also time['hours'] usw. Auch bei den Minuten und Sekunden und so weiter.
ich kreige ja die richtigen werte zurück. die werte sind da. aber das rechnen im postupdate macht nur probleme.
Ich glaube ich muss irgendwie die var eintsge wie zb hours in einen dezimaltype umwandeln.
Wenn ich nämlich den var Eintrag erst in ein item schreibe dann kann ich mit .state as dezimaltype arbeiten.
Aber die var ist ja kein .state
Vielleicht hat @horschte oder @SkyBird1980 die Lösung?
hier die Lösung, dank der hilfe im openhab forum.
var Number hours = Float::parseFloat(transform("JSONPATH", "$.result.time['hours']", json_time))
var Number minutes = Float::parseFloat(transform("JSONPATH", "$.result.time['minutes']", json_time))
var Number seconds = Float::parseFloat(transform("JSONPATH", "$.result.time['seconds']", json_time))
json_currenttime.postUpdate(hours *3600 + minutes *60 + seconds)
und zwar sind alle einträge in der var Number automatisch Strings, nur mit dem Float::parseFloat[tt][/tt] wird es zu einer Number, und nur damit kann man rechnen.
hier ist jetzt das ganze Biest, das ersetzt das Kodi Binding was eh nur zickt.
import java.net.URLEncoder
rule "json abfrage - ping Kodi"
when
Time cron "0/3 * * ? * * *" // alle 3 sekunden
then
//JSON Aufruf
//var request = "%7B%20%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22JSONRPC.Ping%22%2C%20%22id%22%3A%201%20%7D"
//var String url = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request
//var String json = sendHttpGetRequest(url)
// Auswerten und an Item ubergeben
//var String pingkodi = transform("JSONPATH", "$.result", json)
//json_kodiping.postUpdate(pingkodi)
if (ShieldPingOnline.state == ON)
{
kodi_isactive.sendCommand(ON)
}
if (ShieldPingOnline.state != ON)
{
kodi_isactive.sendCommand(OFF)
}
end
rule "json abfrage - player aktiv - or titel change"
when
Time cron "0/3 * * ? * * *" // alle 3 sekunden
then
if (kodi_isactive.state == ON)
{
// JSON Aufruf - titel abrufen
var request_label = "%7b%22jsonrpc%22%3a+%222.0%22%2c+%22method%22%3a+%22Player.GetItem%22%2c+%22params%22%3a+%7b+%22playerid%22%3a+1+%7d%2c+%22id%22%3a+%22VideoGetItem%22%7d"
var String url_label = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request_label
var String json_label = sendHttpGetRequest(url_label)
var String activeplayertype_label = transform("JSONPATH", "$.result.item.label", json_label)
json_activeplayertype_label.postUpdate(activeplayertype_label)
//JSON Aufruf - player aktiv
var request = "%7b%22jsonrpc%22%3a+%222.0%22%2c+%22method%22%3a+%22Player.GetActivePlayers%22%2c+%22id%22%3a+1%7d"
var String url = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request
var String json = sendHttpGetRequest(url)
// Auswerten und an Item ubergeben
var String playeractive = transform("JSONPATH", "$.result", json)
playernowplayingactive.postUpdate(playeractive)
if (playernowplayingactive.state != NULL )
{
startplayingtypescript.sendCommand(ON)
logInfo("INFO", "KODI SPIELT ETWAS AB")
}
if (playernowplayingactive.state == NULL)
{
startplayingtypescript.sendCommand(OFF)
// ALLE ITEMS ZURUECKSETZEN
json_type.postUpdate("UNDEF")
json_title.postUpdate("UNDEF")
json_rating.postUpdate("0")
json_year.postUpdate("0")
json_fanart.postUpdate("")
json_poster.postUpdate("")
json_genre.postUpdate("UNDEF")
json_runtime.postUpdate("0")
json_episode.postUpdate("0")
json_season.postUpdate("0")
json_showtitle.postUpdate("UNDEF")
json_icon.postUpdate("")
json_thumb.postUpdate("")
json_plot.postUpdate("UNDEF")
json_season_episode.postUpdate("UNDEF")
json_currenttime.postUpdate("0")
logInfo("INFO", "KODI SPIELT NICHTS AB")
}
}
end
rule "json abfrage - file type - movie or episode or channel abfrage ausloesen"
when
Item startplayingtypescript changed to ON
or
Item json_activeplayertype_label changed
then
//JSON Aufruf
var request = "%7b%22jsonrpc%22%3a+%222.0%22%2c+%22method%22%3a+%22Player.GetItem%22%2c+%22params%22%3a+%7b+%22playerid%22%3a+1+%7d%2c+%22id%22%3a+%22VideoGetItem%22%7d"
var String url = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request
var String json = sendHttpGetRequest(url)
// Auswerten und an Item ubergeben
var String activeplayertype = transform("JSONPATH", "$.result.item.type", json)
json_activeplayertype.postUpdate(activeplayertype)
logInfo("INFO", "SCRIPT HOLE MEDIEN TYPE GESTARTET")
// Mediatype vergleichen und festlegen
if (json_activeplayertype.state == "movie")
{
nowplayingkodimovie.sendCommand(ON)
logInfo("INFO", "Mediatype : movie" )
}
if (json_activeplayertype.state == "channel")
{
nowplayingkodichannel.sendCommand(ON)
logInfo("INFO", "Mediatype : channel" )
}
if (json_activeplayertype.state == "episode")
{
nowplayingkodiepisode.sendCommand(ON)
logInfo("INFO", "Mediatype : episode" )
}
if (json_activeplayertype.state == "unknown")
{
nowplayingkodiepisode.sendCommand(OFF)
nowplayingkodimovie.sendCommand(OFF)
nowplayingkodichannel.sendCommand(OFF)
logInfo("INFO", "Mdiatype : unknwon" )
}
end
rule "json abfrage - Time "
when
Time cron "0/10 * * ? * * *" // alle 10 sekunden
then
if (playernowplayingactive.state != NULL )
{
//JSON Aufruf
var request_time = "%7B%22jsonrpc%22%3A%222.0%22%2C%22method%22%3A%22Player.GetProperties%22%2C%22params%22%3A%7B%22playerid%22%3A1%2C%22properties%22%3A%5B%22percentage%22%2C%22time%22%2C%22totaltime%22%5D%7D%2C%22id%22%3A%221%22%7D"
var String url_time = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request_time
var String json_time = sendHttpGetRequest(url_time)
var Number hours = Float::parseFloat(transform("JSONPATH", "$.result.time['hours']", json_time))
var Number minutes = Float::parseFloat(transform("JSONPATH", "$.result.time['minutes']", json_time))
var Number seconds = Float::parseFloat(transform("JSONPATH", "$.result.time['seconds']", json_time))
json_currenttime.postUpdate(hours *3600 + minutes *60 + seconds)
logInfo("INFO", "Currenttime" + json_currenttime )
}
end
rule "json abfrage - movie"
when
Item nowplayingkodimovie received command ON
then
//JSON Aufruf
var request = "%7B%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22Player.GetItem%22%2C%20%22params%22%3A%20%7B%20%22properties%22%3A%20%5B%22title%22%2C%22art%22%2C%22rating%22%2C%22year%22%2C%22runtime%22%2C%22genre%22%2C%22plot%22%5D%2C%20%22playerid%22%3A%201%20%7D%2C%20%22id%22%3A%20%22VideoGetItem%22%7D"
var String url = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request
var String json = sendHttpGetRequest(url)
var String title = transform("JSONPATH", "$.result.item.title", json)
var String rating = transform("JSONPATH", "$.result.item.rating", json)
var String year = transform("JSONPATH", "$.result.item.year", json)
var String runtime = transform("JSONPATH", "$.result.item.runtime", json)
var String genre = transform("JSONPATH", "$.result.item.genre", json)
var String plot = transform("JSONPATH", "$.result.item.plot", json)
var String fanart = transform("JSONPATH", "$.result.item.art.fanart", json)
var String poster = transform("JSONPATH", "$.result.item.art.poster", json)
json_title.postUpdate(title)
json_rating.postUpdate(rating)
json_year.postUpdate(year)
json_genre.postUpdate(genre)
json_runtime.postUpdate(runtime)
json_plot.postUpdate(plot)
// episoden items zurücksetzen , da diese sonst noch gefuellt sind durch den titel wechsel
json_episode.postUpdate("0")
json_season.postUpdate("0")
json_showtitle.postUpdate("UNDEF")
// FANART
var String newValuefanart = fanart.toString
var String newValuefanartencoded = URLEncoder::encode(newValuefanart)
var String fanartcomplete = "http://192.168.0.164:8023/image/" + newValuefanartencoded
// POSTER
var String newValueposter = poster.toString
var String newValueposterencoded = URLEncoder::encode(newValueposter)
var String postercomplete = "http://192.168.0.164:8023/image/" + newValueposterencoded
// Fanart / Poster an Strings uebergeben
json_fanart.postUpdate(fanartcomplete)
json_poster.postUpdate(postercomplete)
logInfo("INFO", "fanart url" + postercomplete)
end
rule "json abfrage - episode"
when
Item nowplayingkodiepisode received command ON
then
//JSON Aufruf
var request = "%7B%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22Player.GetItem%22%2C%20%22params%22%3A%20%7B%20%22properties%22%3A%20%5B%22runtime%22%2C%22title%22%2C%22art%22%2C%22rating%22%2C%22year%22%2C%22season%22%2C%22episode%22%2C%22showtitle%22%2C%22genre%22%2C%22plot%22%5D%2C%20%22playerid%22%3A%201%20%7D%2C%20%22id%22%3A%20%22VideoGetItem%22%7D"
var String url = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request
var String json = sendHttpGetRequest(url)
var String title = transform("JSONPATH", "$.result.item.title", json)
var String rating = transform("JSONPATH", "$.result.item.rating", json)
var String year = transform("JSONPATH", "$.result.item.year", json)
//var String type = transform("JSONPATH", "$.result.item.type", json)
var String runtime = transform("JSONPATH", "$.result.item.runtime", json)
var String genre = transform("JSONPATH", "$.result.item.genre", json)
var String plot = transform("JSONPATH", "$.result.item.plot", json)
var String fanartepisode = transform("JSONPATH", "$.result.item.art['tvshow.fanart']", json)
var String posterepisode = transform("JSONPATH", "$.result.item.art['tvshow.poster']", json)
var String episode = transform("JSONPATH", "$.result.item.episode", json)
var String season = transform("JSONPATH", "$.result.item.season", json)
var String showtitle = transform("JSONPATH", "$.result.item.showtitle", json)
//json_type.postUpdate(type)
json_title.postUpdate(title)
json_rating.postUpdate(rating)
json_year.postUpdate(year)
json_genre.postUpdate(genre)
json_runtime.postUpdate(runtime)
json_episode.postUpdate(episode)
json_season.postUpdate(season)
json_plot.postUpdate(plot)
json_showtitle.postUpdate(showtitle)
json_season_episode.postUpdate("Staffel " + season + " Episode " + episode)
// FANART
var String newValuefanart = fanartepisode.toString
var String newValuefanartencoded = URLEncoder::encode(newValuefanart)
var String fanartcomplete = "http://192.168.0.164:8023/image/" + newValuefanartencoded
// POSTER
var String newValueposter = posterepisode.toString
var String newValueposterencoded = URLEncoder::encode(newValueposter)
var String postercomplete = "http://192.168.0.164:8023/image/" + newValueposterencoded
// Fanart / Poster an Strings uebergeben
json_fanart.postUpdate(fanartcomplete)
json_poster.postUpdate(postercomplete)
logInfo("INFO", "episoden labels :" + fanartcomplete)
end
rule "json abfrage - channel"
when
Item nowplayingkodichannel received command ON
then
//JSON Aufruf
var request = "%7B%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22Player.GetItem%22%2C%20%22params%22%3A%20%7B%20%22properties%22%3A%20%5B%22plot%22%2C%22title%22%2C%22art%22%2C%22runtime%22%2C%22genre%22%5D%2C%20%22playerid%22%3A%201%20%7D%2C%20%22id%22%3A%20%22VideoGetItem%22%7D"
var String url = "http://kodi:1234@192.168.0.164:8023/jsonrpc?request=" + request
var String json = sendHttpGetRequest(url)
var String title = transform("JSONPATH", "$.result.item.title", json)
var Number runtime = Float::parseFloat(transform("JSONPATH", "$.result.item.runtime", json_time))
//var String runtime = transform("JSONPATH", "$.result.item.runtime", json)
var String genre = transform("JSONPATH", "$.result.item.genre", json)
var String plot = transform("JSONPATH", "$.result.item.plot", json)
var String icon = transform("JSONPATH", "$.result.item.art.icon", json)
var String thumb = transform("JSONPATH", "$.result.item.art.thumb", json)
//json_type.postUpdate(type)
json_title.postUpdate(title)
json_genre.postUpdate(genre)
json_plot.postUpdate(plot)
json_runtime.postUpdate(runtime *60)
// FANART
var String newValuefanart = icon.toString
var String newValuefanartencoded = URLEncoder::encode(newValuefanart)
var String fanartcomplete = "http://192.168.0.164:8023/image/" + newValuefanartencoded
// POSTER
var String newValueposter = thumb.toString
var String newValueposterencoded = URLEncoder::encode(newValueposter)
var String postercomplete = "http://192.168.0.164:8023/image/" + newValueposterencoded
// Fanart / Poster an Strings uebergeben
json_poster.postUpdate(fanartcomplete)
json_thumb.postUpdate(postercomplete)
logInfo("INFO", "fanart url" + postercomplete)
end
Alles anzeigen
weisst du wie man die schauspieler + Bilder abrufen kann?
ich finde im Wiki Video.Cast, aber ich weiss nicht genau wie der aufruf aussehen muss?!
Keine Ahnung. Was ich aber sofort sehe ist das bei deinen Request eine id fehlt.
Keine Ahnung. Was ich aber sofort sehe ist das bei deinen Request eine id fehlt.
ich muss dich nochmal nerven, ich versuche die InProgressTvShows abzugreifen, und diese zu sortieren, aber egal was ich angebe der Vogel ignoriert meine Sortierung.
kannst du das mal testen?
{"jsonrpc": "2.0", "method": "VideoLibrary.GetInProgressTVShows", "params": { "limits": { "start" : 0, "end": 6}, "properties" : ["title","art","year","genre","runtime","playcount","rating"], "sort": { "order": "descending", "method": "lastplayed", "ignorearticle": true } }, "id": "libTvShows"}
laut wiki sollte folgendes gehen:
{
"type": "object",
"id": "List.Sort",
"properties": {
"useartistsortname": {
"default": false,
"type": "boolean"
},
"order": {
"default": "ascending",
"enums": [
"ascending",
"descending"
],
"type": "string"
},
"ignorearticle": {
"default": false,
"type": "boolean"
},
"method": {
"default": "none",
"enums": [
"none",
"label",
"date",
"size",
"file",
"path",
"drivetype",
"title",
"track",
"time",
"artist",
"album",
"albumtype",
"genre",
"country",
"year",
"rating",
"userrating",
"votes",
"top250",
"programcount",
"playlist",
"episode",
"season",
"totalepisodes",
"watchedepisodes",
"tvshowstatus",
"tvshowtitle",
"sorttitle",
"productioncode",
"mpaa",
"studio",
"dateadded",
"lastplayed",
"playcount",
"listeners",
"bitrate",
"random"
],
"type": "string"
}
}
}
Alles anzeigen
Ich glaube du hast Recht und einen Bug gefunden.
Ich glaube du hast Recht und einen Bug gefunden.
Oki danke dir
Habs jetzt umgangen, indem ich mir alle Serien hole und diese nach lastplayed und Playcount 0 sortiere. Das scheint zu gehen.
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!