FHEM Forum

FHEM => Frontends => FHEMapp => Thema gestartet von: draddy am 20 März 2022, 18:32:07

Titel: [Template] kodicontrol
Beitrag von: draddy am 20 März 2022, 18:32:07
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","")) : "")}
Titel: Antw:template kodicontrol
Beitrag von: draddy am 20 März 2022, 18:59:45
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

Titel: Antw:template kodicontrol
Beitrag von: draddy am 20 März 2022, 21:32:15
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 ;)
Titel: Antw:Gelöst: template kodicontrol
Beitrag von: jemu75 am 23 März 2022, 15:34:24
Vielen Dank für das Template draddy. Ich habe das mit dem Release v.3.32.0 übernommen.  :)
Titel: Antw:Gelöst: template kodicontrol
Beitrag von: binford6000 am 23 März 2022, 16:28:08
Ich habe in meinem KODI-Template noch sowas drin:
"rightBtn": "mdi-menu",
"rightMenu": ["off:off","reboot:reboot","shutdown:shutdown","suspend:suspend"]


VG Sebastian
Titel: Antw:Gelöst: template kodicontrol
Beitrag von: draddy am 09 April 2022, 14:45:09
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