Hauptmenü

[Template] kodicontrol

Begonnen von draddy, 20 März 2022, 18:32:07

Vorheriges Thema - Nächstes Thema

draddy

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","")) : "")}
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

draddy

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

OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

draddy

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 ;)
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

jemu75

Vielen Dank für das Template draddy. Ich habe das mit dem Release v.3.32.0 übernommen.  :)

binford6000

Ich habe in meinem KODI-Template noch sowas drin:
"rightBtn": "mdi-menu",
"rightMenu": ["off:off","reboot:reboot","shutdown:shutdown","suspend:suspend"]


VG Sebastian

draddy

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




OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V