Autor Thema: [Template] kodicontrol  (Gelesen 625 mal)

Offline draddy

  • Full Member
  • ***
  • Beiträge: 211
  • let's grow, it glows in the dark.
    • Franzke IT Service
[Template] kodicontrol
« 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","")) : "")}
« Letzte Änderung: 09 April 2022, 14:48:47 von draddy »
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1
Gefällt mir Gefällt mir x 3 Liste anzeigen

Offline draddy

  • Full Member
  • ***
  • Beiträge: 211
  • let's grow, it glows in the dark.
    • Franzke IT Service
Antw:template kodicontrol
« Antwort #1 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

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

Offline draddy

  • Full Member
  • ***
  • Beiträge: 211
  • let's grow, it glows in the dark.
    • Franzke IT Service
Antw:template kodicontrol
« Antwort #2 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 ;)
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1

Offline jemu75

  • Moderator
  • Sr. Member
  • ***
  • Beiträge: 840
    • FHEM App
Antw:Gelöst: template kodicontrol
« Antwort #3 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.  :)
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline binford6000

  • Tester
  • Hero Member
  • ****
  • Beiträge: 1503
  • 🏠⚙️💡🛠📱
Antw:Gelöst: template kodicontrol
« Antwort #4 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
Proxmox mit: nextcloud, fhem, pihole, docker, bitwarden, deconz, TasmoAdmin
fhem mit: deconz, Sonos2mqtt, alexa-fhem, Telegram, livetracking, fhemApp als Frontend
Testumgebung: docker pull fhem/fhem

Offline draddy

  • Full Member
  • ***
  • Beiträge: 211
  • let's grow, it glows in the dark.
    • Franzke IT Service
Antw:Gelöst: template kodicontrol
« Antwort #5 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




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