moin
hab mal wieder gefummelt ... xD
in kombination mit Kodi Modul in FHEM nutzbar ;)
{
"name": "kodiremote",
"author": "draddy",
"date": "2022-03-20",
"expand": true,
"status":
{
"bar": ["playStatus:playing:100:success", "playStatus:paused:50:success", "playStatus::0:success"]
},
"main": [
{
"leftBtn": ["state:opened:mdi-skip-previous","state::mdi-skip-previous:disabled"],
"leftClick": ["state::prev"],
"midBtn": ["playStatus:playing:mdi-pause", "playStatus:stopped:mdi-stop", "playStatus::mdi-play"],
"midClick": ["playStatus:playing:pause", "playStatus::play"],
"midLong": ["playStatus:playing:stop", "state::select"],
"rightBtn": ["state:opened:mdi-skip-next","state::mdi-skip-next:disabled"],
"rightClick": ["state::next"]
},
{
"leftBtn": ["state::mdi-home"],
"leftClick": ["state::home"],
"midBtn": ["state::mdi-menu-up::success"],
"midClick": ["state::up"],
"rightBtn": ["state::mdi-information-variant"],
"rightClick": ["state::showosd"]
},
{
"leftBtn": ["state::mdi-menu-left::success"],
"leftClick": ["state::left"],
"midBtn": ["state::mdi-kodi::success"],
"midClick": ["state::select"],
"rightBtn": ["state::mdi-menu-right::success"],
"rightClick": ["state::right"]
},
{
"leftBtn": ["state::mdi-arrow-u-left-top"],
"leftClick": ["state::back"],
"midBtn": ["state::mdi-menu-down::success"],
"midClick": ["state::down"],
"rightBtn": ["state::mdi-menu"],
"rightClick": ["state::contextmenu"]
},
{
"leftBtn": ["state::mdi-volume-minus"],
"leftClick": ["state::volumeDown"],
"midBtn": ["mute:off:mdi-volume-high", "mute::mdi-volume-off"],
"midClick": ["mute:off:mute", "mute::mute"],
"rightBtn": ["state::mdi-volume-plus"],
"rightClick": ["state::volumeUp"]
}
],
"info": {
"left1": ["mute:on::mdi-volume-off", "playStatus:playing::mdi-play", "playStatus:stopped::mdi-stop", "playStatus:::mdi-pause"],
"left2": ["currentArtist:$:%s"],
"mid1": ["myLabel::%s"],
"right2": ["currentTitle::%s"]
}
}
have fun
Jens
€dit: um das Problem mit "label" zu umschiffen habe ich ein userReading "myLabel" gemacht und lasse in Info mid1 jetzt dieses darstellen.
Da es nur bei type "song" oder "channel" (TV) sinn macht, wird es auch nur in diesen fällen gesetzt.
myLabel { ReadingsVal($name,"type","") eq "channel" ? (ReadingsVal($name,"label","")) : (ReadingsVal($name,"type","") eq "song" ? (ReadingsVal($name,"currentAlbum","")) : "")}
grade noch auf nen "fehler" gekommen, vll hat jemu ne idee ...
info: mid1
lable passt dann, wenn es z.b. Live TV ist (ist dann der Aktuelle sender) bei musik ist lable aber wohl = song ..
kann ich da irgendwie ne if / else machen?
müsste mit dem reading: type auslesen können was aktuell läuft - müsste dann halt nur sagen "wenn type = song schreibe currentAlbum else label"
sonst müsste ich das im device regeln, und man müsste, wenns einem wichtig ist, halt noch ein userReading hinzufügen.
thx
Hier nochmal fürs repo.
hoffe Formatierung passt soweit.
wie gesagt, wenn "myLable" angezeigt werden soll (entweder aktueller TV Sender oder Album bei Musik)
wird das userReading benötigt.
myLabel { ReadingsVal($name,"type","") eq "channel" ? (ReadingsVal($name,"label","")) : (ReadingsVal($name,"type","") eq "song" ? (ReadingsVal($name,"currentAlbum","")) : "")}
sollte eventuell in die Info auf Git mit dazu dann ;)
Vielen Dank für das Template draddy. Ich habe das mit dem Release v.3.32.0 übernommen. :)
Ich habe in meinem KODI-Template noch sowas drin:
"rightBtn": "mdi-menu",
"rightMenu": ["off:off","reboot:reboot","shutdown:shutdown","suspend:suspend"]
VG Sebastian
moin,
habe mit den neuen Möglichkeiten am Kodi Template rumgebaut ...
damit alles läuft, sind Einige userReadings nötig
myPlayTimePCT { ReadingsVal($name,"playStatus","") eq "playing" ? (myPlayedPCT(hms2secs(ReadingsVal($name,"totaltime","1")),hms2secs(ReadingsVal($name,"time","1")))) : 0},
myLabel { ReadingsVal($name,"playStatus","") eq "playing" ? (ReadingsVal($name,"type"," ") eq "channel" ? (ReadingsVal($name,"label"," ").":") : (ReadingsVal($name,"type"," ") eq "song" ? (ReadingsVal($name,"currentAlbum"," ")) : " ")): " "},
myTitle { ReadingsVal($name,"playStatus","") eq "playing" ? (" ".ReadingsVal($name,"currentTitle"," ")) : " "},
myArtist { ReadingsVal($name,"playStatus","") eq "playing" ? (ReadingsVal($name,"type", " ") eq "song" ? ReadingsVal($name,"currentArtist"," ") : " " ) : " " },
myAppPlay { ReadingsVal($name,"playStatus","") eq "playing" ? (ReadingsVal($name,"type","") eq "song" ? (ReadingsVal($name,"myLabel"," ")) : (ReadingsVal($name,"myLabel"," ")." ".ReadingsVal($name,"myTitle"," "))) : " " },
myAppMusic { ReadingsVal($name,"playStatus","") eq "playing" ? (ReadingsVal($name,"myArtist","") eq " " ? "false" : (ReadingsVal($name,"currentArtist"," ")." - ".ReadingsVal($name,"currentTitle"," "))) : "false"},
openchannel { ReadingsVal($name,"type"," ") eq "channel" ? (ReadingsVal($name,"myLabel"," ")) : " "},
playItem { ReadingsVal($name,"playStatus","") eq "playing" ? (ReadingsVal($name,"myLabel"," ")." - ".ReadingsVal($name,"myTitle"," ")) : " "}
das ein oder andere mag mit dem aktuellen Bugfix nicht mehr nötig sei, aber, es stört auch nicht wirklich, zudem kann ich so sicher stellen, dass "myArtist" z.B. leer ist, wenn keine Musik spielt. (im Modul bleiben einige Readings gerne "hängen" wenn man von beispielsweise von Musik auf Film wechselt oder so)
dazu muss in die 99_myUtils.pm
#24H Timestamp to Seconds
sub hms2secs($){
my ($t) = @_;
return substr($t,0,2) * 3600 + substr($t,3,2) * 60 + substr($t,6,2);
}
#Kodi % of Track Played
sub myPlayedPCT($$) {
my ($total, $elapsed) = @_;
if ($total < 1 || $elapsed < 1) { return 0 };
return ($elapsed / ($total) * 100);
}
Diese Readings müssen einmalig mittels setreading in der FHEM console angelegt werden:
setreading <KODIDEVICENAME> tState other
setreading <KODIDEVICENAME> appControl true
das erste wird benötigt, um zwischen TV und Media Mode umzuschalten (siehe Screenshots)
das zweite steuert die anzeige von den Steuerelementen (3er block in der mitte)
Ursprünglich war der Plan, die Erkennung Media oder TV automatisch zu machen, das Problem jedoch, mit jedem Senderwechsel ändert sich das Reading "type" was zu unerwünschtem verhalten führt.
wer damit leben kann, dass beim Sender wechsel die untere Leiste kurz wechselt kann natürlich auch ein userReading auf tState setzen, etwa so
tState { ReadingsVal($name,"type","") eq "channel" ? "channel" : "other" }
das aktuelle template läuft unter kodiremote1 - kann also zusätzlich mal reingesetzt werden zum rumprobieren. da die subs in der 99 nur für die statusbar benötigt werden, kann man diese zum testen auch weglassen ;)
Zur Statusbar: diese wird halt Abhängig von eurem updateInterval "gefüttert" ..
das Menü im TV Mode (unten mitte) ist als Favoritenliste gedacht, diese sollte man also an die eigenen Wünsche anpassen ;)
hf
Jens