XBMC's synchronisieren

Begonnen von Bednorz, 24 Oktober 2016, 17:44:04

Vorheriges Thema - Nächstes Thema

Bednorz

Hallo,
ich habe hier ein kleines Problem mit einer notify-Definition.
Meine momentane Situation ist, dass ich zwei OpenElec-Raspis jeweils mit einem XBMC-Modul in FHEM (Kuechenanlage, Wohnzimmeranlage) eingebunden habe. Nun würde ich die gerne gegebenenfalls synchronisieren, die sollen also das gleiche gleichzeitig abspielen. Da ich das aber nicht immer möchte, habe ich mir dafür einen dummy-Schalter eingebaut, der wenn er an ist "synchron" bedeutet und wenn er aus ist eben nicht.

Um jetzt alles wirklich zu synchronisieren habe ich mit meinem begrenzten Wissen ein notify definiert:

define SynchronPrimaerWohnzimmer notify { if (Synchronschalter:on && Wohnzimmeranlage:playing) { fhem("set Kuechenanlage open ReadingsVal("Wohnzimmeranlage","currentMedia","")");} }

Leider funktioniert das ganze nicht so wirklich und ich weiß einfach nicht wieso.Wenn einer von euch vielleicht meinen Fehler sieht, würde ich mich über Hilfe freuen.

mfg Bednorz

DazDavid

Hast du es mitlerweile hinbekommen? Falls nein was genau funktioniert denn nicht?
Wenn ich das richtig sehe wird dein Notify nie aufgerufen, da du keine Aufrufbedingung hast (Der Auslöser müsste dann vor die geschweiften Klammern).
Mein Perlwissen ist zwar auch sehr begrenzt und ich bin noch am Lernen aber ich denke es müsste in etwa so aussehen:

define SynchronPrimaerWohnzimmer notify Wohnzimmeranlage:playing {
if ( Value("Synchronschalter") eq "on" ) {fhem("set Kuechenanlage open ReadingsVal("Wohnzimmeranlage","currentMedia","")");}}

ob das mit dem Wohnzimmeranlage:playing so hinhaut weiß ich auch nicht so recht, da ich noch nie ein notify auf einen bestimmten Status gebaut habe.
FHEM (up2date) on Raspberry Pi 3B | nanoCUL 868 MHz | Raspbee Zigbee Gateway | Philips Hue | Osram Lightify | MAX Thermostate

Bednorz

Nein bin leider keinen Schritt weiter. Ich habe eben gerade mal deinen Vorschlag ausprobiert, weil er mir eigentlich richtig und gut vorkam. Leider auch hier wieder eine Enttäuschung.
FHEM erstellt das notify, sagt mir aber direkt dass "}}" (also das Ende der Definition) ein unbekannter Befehl sei:

Unknown command }}, try help.

Das notify wird auch diesmal nicht ausgeführt. Ich bin mir relativ sicher, dass mein Befehl syntaktisch nicht korrekt ist, aber ich finde den Fehler nirgends. Mir hilft leider auch das Wiki nicht wirklich. Also weitersuchen.

mfG Bednorz

Rince

Bitte schreibe in Code Tags.
Damit ist Code besser lesbar
Dazu den Code markieren und über dem Eingabefeld das #-Icon drücken  :)

Das sieht aus wie eine Mischung aus Notify und DOIF. Imho ist DOIF einfacher zu verstehen. Schau mal in der Commandref bei DOIF nach. Da klappt es dann mit :
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Bednorz

Danke für deinen Tipp. Ich habe meinen Definition jetzt folgendermaßen umgeschrieben:

define MediaSynchron DOIF ([Wohnzimmeranlage] eq "playing" and [Synchronschalter] eq "on")
(set Kuechenanlage open ReadingsVal("Wohnzimmeranlage","currentMedia",""))


Das Device wird auch problemlos (und vorallem fehlerlos) erstellt, leider funktioniert das DOIF dennoch nicht. Ich vermute aber, dass der Fehler eher im auszuführenden Befehl liegt. Also beim:

set Kuechenanlage open ReadingsVal("Wohnzimmeranlage","currentMedia","")

Ich habe dazu auch hier im Forum einen gelösten Thread (https://forum.fhem.de/index.php/topic,35702.msg280335.html#msg280335) gefunden, aus dem ich aber leider nicht schlau werde. Vielleicht weiß einer von euch was da gemacht/gemeint wurde.

mfG Bednorz

Rince

Ob das DOIF an sich geht, verrät das Logfile.
Habe den Thread durchgelesen. Wenn ich es richtig interpretiere
ZitatIst natürlich richtig - in diesen Fall soll das DOIF aber nicht sofort
den Stream starten sondern nur die Url setzen.
Ist das Ziel nicht gewesen abzuspielen, sondern nur im Falle es Play-Events das richtige zu spielen.

Dann wäre Damians Code wohl das was du suchst:
DOIF (...) (set MeinXBMCDevice open [streamurl])
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

C0mmanda

Mit einem DOIF habe ich es nicht hinbekommen, es scheitert am auslesen des Readings "currentMedia" im Ausführungsteil.

Mit einem Notify läuft das ganze aber:

WZ_XBMC:playStatus.* {
my $current=ReadingsVal("WZ_XBMC","currentMedia","");

if (Value("KodiTestdummy") eq "on" and ReadingsVal("WZ_XBMC","playStatus","") eq "playing") {
fhem ("set KUE_Kodi open $current");
}
}


WZ_XBMC = Kodi Wohnzimmer.
KodiTestdummy = Dummy für Abfrage "Synchron ja oder nein".
KUE_Kodi = Kodi Küche.

Das klappt problemlos, ABER:
Von "Synchronisation" kann absolut keine Rede sein. Aber das war mir schon klar bevor ich das notify geschrieben habe.

Die zweite Kodi-Instanz hängt 1-2 sec hinterher, was auch vorhersehbar ist.

Kodi 1 fängt an zu spielen -> triggert notify -> notify setzt Kodi 2 auf Play -> Kodi 2 spielt ab.

Da ist 1 sec. noch wenig. Kodi 2 muss ja erst einmal eine Verbindung zur Quelle aufbauen und dann auch anfangen abzuspielen.
Getestet habe ich jetzt mit mp3s vom NAS. Wenn da jetzt zB. Internetstreams ins Spiel kommen wird die Wiedergabe noch weiter auseinander driften.

Ob es eine bessere Lösung mit Kodi gibt oder man besser auf Squeezebox oder ähnliches mit Multiroom-Lösungen setzt kann ich so nicht sagen.

grtz
CmdA

Bednorz

Vielen Dank.
So funktioniert es bei mir auch. Und ja synchron ist das leider nicht wirklich. Wobei es bei Radiostreams gut funktioniert, da die ja unabhängig meiner XBMC's laufen und ich die nur abgreife. Dadurch bleiben die eigentlich synchron, aber wie du schon sagtest: Für die lokalen Medien eher schlecht.
Leider bietet Kodi/XBMC selbst keine zufriedenstellende Multiroom-Lösung.

Eventuell werde ich mir eine Art Datenbankmodul basteln, dass dann beide XBMC's anspricht. Vielleicht kompensiert das den Delay, auch wenn ich es nicht glaube. Aber probieren geht ja bekanntlich über studieren.

mfG Bednorz