Hallo zusammen,
ich bastele grad eine Steuerung von Kodi zusammen
define Film1 dummy
attr Film1 alias Trickfilm
attr Film1 genericDeviceType switch
attr Film1 room Alexa
attr Film1 setList on off
attr Film1 webCmd on:off
define n_Film1_on notify Film1:on {fhem ("set wz_KODI open " . ReadingsVal("Film1","currentMedia:","0"))}
define n_Film1_off notify Film1:off set wz_KODI stop
define wzKodi_in_dummy_kopieren notify wz_KODI:currentMedia.* { fhem("setreading Film1 $EVENT")}\
Das blöde ist nur, dass nur der letzte aufgerufene Film wiedergegeben wird und dann nichts mehr.
Jetzt wollte ich das Verzeichnis des zuletzt aufgerufenen Films mit opendir öffnen, aber da scheitert es bei mir an der Verwendung von RegEx.
Film1:on {fhem (my $test = ReadingsVal("Film1","currentMedia:","0");;$test=~ s!^.+?(?=[^/]+$)!!;;ret $test;; "set wz_KODI opendir " . $test;;)}
bringt irgendwie gar nichts. Kann mir bitte jemand auf die Sprünge helfen?
Du weisst dass es ein Modul für KODI/XBMC gibt?
So wie ich das sehe benutzt er das schon...
Er will wohl über Alexa per Dummy eben Kodi steuern...
Irgendwie verstehe ich noch nicht so ganz was genau passieren soll...
EDIT: also schon aber warum die ganze Kopiererei... Also wenn Kodi läuft wird das aktuell laufende in den Dummy kopiert. Und bei Start durch Alexa/Dummy dann wieder zurück... Würde nicht Pause und Play das Kopieren (sich merken) unnötig machen?
Gruß, Joachim
Ja ich benutze das Modul
Ich möchte aus dem Reading "currentmedia: smb://192.168.2.90/Freigabe/Trickfilme/Film.mkv" im Dummy Film1 den Dateinamen entfernen.
Quasi "currentmedia: smb://192.168.2.90/Freigabe/Trickfilme/" soll da nur noch stehen.
EDIT: Das Aufrufen des gespeicherten letzten Filmes funktioniert ja auch, nur will ich dessen Directory öffnen.
Schon klar bzw. verstanden...
Nur: wozu?
Also was willst du erreichen?
Ansonsten mal bei perl Stringmanipulationsfunktionen suchen...
Grad nur Handy, daher kurz...
Gruß, Joachim
ja ich hab eine Stringmanipulation gefunden, aber ich weiss nicht um den korrekten Syntax.
Wozu? Hab ich doch erklärt. Wenn ich nur die einzelne Datei aufrufe, ist nach dem Abspielen dieser Datei Schluss.
Mit opendir kann ich ein Shuffle durch den Ordner machen.... Kinderbespaßung ist hier das Ziel.
Du kannst aber doch in Kodi einstellen, dass der nächste Film etc. automatisch gestartet wird...
Sollte doch so auch gehen?
Was meinst du mit Syntax?
Gruß, Joachim
wer lesen kann ist im Vorteil... sorry, hatte mir das Coding nicht im Detail angesehen...
Dein Coding ist etwas seltsam, das sollte eher so aussehen:
{mach was in perl;fhem("set ...;}
Sind die Dateien immer .mkv (oder in mehreren definierbaren Formaten)? Dann könnte man ganz doof rangehen und die Regex irgendwie so aufbauen:
(.*)/.*.mkv (. und / natürlich escapen - wollte nur das Prinzip klar machen)
Grüße,
Oli
Leider macht er nach einer einzelnen Datei in dem Ordner nicht weiter. Bei opendir schon.
Wenn ich so schreibe
Film1:on {my $test = ReadingsVal("Film1","currentMedia:","0");;$test=~ s!^.+?(?=[^/]+$)!!;;ret $test;; fhem ("set wz_KODI opendir " . $test;;)}
bekomme ich
2018.01.07 23:35:37 1: ERROR evaluating my $TYPE='dummy';my $NAME='Film1';my $EVENT='on';my $SELF='n_Film1_on';my $EVTPART0='on';{my $test = ReadingsVal("Film1","currentMedia:","0");;$test=~ s!^.+?(?=[^/]+$)!!;;ret $test;; fhem ("set wz_KODI opendir " . $test;;)}: syntax error at (eval 1331391) line 1, at EOF
2018.01.07 23:35:37 3: n_Film1_on return value: syntax error at (eval 1331391) line 1, at EOF
nein, sind auch AVIs.
Warum mit regexp rumschlagen, wenn es dafür schöne perl Funktionen gibt?
sub filetest {
use File::Basename;
my $full = "smb://192.168.2.90/Freigabe/Trickfilme/Film.mkv";
my($filename, $directories, $suffix) = fileparse($full);
Debug $filename;
Debug $directories;
Debug $suffix;
}
liefert als Ergebnis:
2018.01.07 23:55:08.930 1: DEBUG>Film.mkv
2018.01.07 23:55:08.937 1: DEBUG>smb://192.168.2.90/Freigabe/Trickfilme/
2018.01.07 23:55:08.937 1: DEBUG>
Läuft damit so wie ichs will!
Bissl umständlich, aber der Weg ist das Ziel.
Vielen Dank!
sub filetest {
my $full = shift;
my $filename = shift;
my $directories = shift;
my $suffix = shift;
use File::Basename;
my $full = ReadingsVal('Film1','currentMedia:','0');
my($filename, $directories, $suffix) = fileparse($full);
fhem "setreading Film1 directory " . $directories;
und notify
Film1:on {fhem("set wz_KODI shuffle on");;fhem ("set wz_KODI opendir " . ReadingsVal("Film1","directory","0"))}
und eventdummy
wz_KODI:currentMedia.* { fhem("setreading Film1 $EVENT");;filetest();;}