Module für XBMC

Begonnen von Dennis B., 06 Januar 2013, 22:32:24

Vorheriges Thema - Nächstes Thema

vbs

@coyote8219:
Also für solche Trigger kannst du zB ein notify machen (oder auch DOIF). Mal aus dem Kopf gehackt (klappt wahrscheinlich nicht 1:1, aber ich hoffe du siehst, was gemeint ist):

define maskTriggerDown notify myXbmc:sd_video0_aspectratio { ($EVTPART1 > 2.3) ? FahreMaskierungRunter() : FahreMaskierungHoch() }
define maskTriggerUp notify myXbmc:playStatus { FahreMaskierungHoch() if ($EVTPART1 eq 'stopped') }

http://fhem.de/commandref_DE.html#notify

Evtl. sollte man auch nur auf playStatus "lauschen" und dann im Code aspectratio abfragen und darauf entsprechend reagieren. Bin aber nicht sicher, ob aspectration in dem Moment schon gesetzt ist. Muss man sicherlich etwas rumprobieren...

coyote8219

#421
Hi,

habe die Zeilen probiert und es passiert leider nichts...

Habe das Gefühl das FHEM die Ratio nicht liest oder so... Probiere schon wieder seit drei Stunden rum. Gestern habe ich erst einen Freudentanz gemacht, als ich die AspectRatio sehen konnte...Und nun bekomm ich es schon wieder nicht gebacken :-/

Selbst der stopped Status löst den Befehl nicht aus...Aber im Event Manger wird alles von XBMC angezeigt, nur leider funktioniert das Auslesen anscheinend nicht...

define maskTriggerUp notify wz_XBMC:playStatus { FahreMaskierungHoch('set GPIO_27 on-for-timer 2') if ($EVTPART1 eq 'stopped') }

vbs

Gibt es den Befehl 'FahreMaskierungHoch' tatsächlich bei dir? Normale FHEM Befehle musst du ja absetzen mit zB
fhem("set gpio 2")

coyote8219

Hallo,

der Befehl für Maskierung hoch ist:

GPIO_22 on-for-timer 2


das mit fhem vor der Klammr habe ich auch probiert, aber leider ohne ERFOLG...

coyote8219

#424
Das sind meine Befehle, welche ich momentan probiert habe :-/

define maskTriggerUp notify wz_XBMC:playStatus { fhem('set GPIO_27 on-for-timer 2') if ($EVTPART1 eq 'stopped') }

define maskTriggerDown notify wz_XBMC:sd_video0aspect { ($EVTPART1 > 2.3) ? fhem('set GPIO_22 on-for-timer 2') : fhem('set GPIO_27 on-for-timer 2') }

Also:

GPIO_27 ist zum hochfahren der Maskierung und GPIO_22 ist zum runterfahren...

Mein Ziel ist es das be 21:9 Filmen, bei welchen dann die Ratio über 2.3 ist die Maskierung runterfährt und beim Stoppen des Films wieder hoch...

Bei 16:9 Filmen soll sie einfach oben bleiben, da die Ratio unter 2.3 ist....

vbs

Naja es hilft alles nix. Du musst da etwas systematischer rangehen und dich ranarbeiten. Mach erstmal ein ganz simples notify ala:
define maskTriggerUp notify wz_XBMC:playStatus set meinLicht on
Wenn das klappt, dann zB
define maskTriggerUp notify wz_XBMC:playStatus { fhem("set meinLicht on") }
dann zB
define maskTriggerUp notify wz_XBMC:playStatus { fhem("set meinLicht on") if ($EVTPART1 eq 'stopped') }
usw. usw.
Dann kannst du dich Schritt für Schritt rantasten. Gleich den Endzustand zu probieren mit dem Ergebnis "geht nicht" bringt dich nicht so richtig weiter...

Außerdem ist ein Blick ins Logfile nützlich. Steht da was? Sieht das im EventMonitor ok aus? Alle notify-Geräte haben als state den Zeitpunkt, wann sie zuletzt getriggert wurden. Sieht man, dass sie überhaupt getriggert wurden?

coyote8219

#426
selbst bei der ersten Zeile passiert nichts :-/

define maskTriggerUp notify wz_XBMC:playStatus set GPIO_22 on-for-timer 2

und hier ein kleiner Ausschnitt aus der Log-Datei:
2015.05.04 20:51:33 1: GPIO_22: entfernt
2015.05.04 20:51:33 1: GPIO_27: entfernt
2015.05.04 20:51:33 1: Including fhem.cfg
2015.05.04 20:51:33 3: telnetPort: port 7072 opened
2015.05.04 20:51:33 3: WEB: port 8083 opened
2015.05.04 20:51:33 3: WEBphone: port 8084 opened
2015.05.04 20:51:33 3: WEBtablet: port 8085 opened
2015.05.04 20:51:33 2: eventTypes: loaded 120 events from ./log/eventTypes.txt
2015.05.04 20:51:33 1: Including ./log/fhem.save
2015.05.04 20:51:34 1: 192.168.2.26:9090 reappeared (wz_XBMC)
2015.05.04 20:51:42 3: deletereading wz_XBMC sd_.* : Deleted reading sd_audio0codec for device wz_XBMC
Deleted reading sd_video0codec for device wz_XBMC
Deleted reading sd_audio0language for device wz_XBMC
Deleted reading sd_video0height for device wz_XBMC
Deleted reading sd_video0width for device wz_XBMC
Deleted reading sd_video0aspect for device wz_XBMC
Deleted reading sd_video0stereomode for device wz_XBMC
Deleted reading sd_audio0channels for device wz_XBMC
Deleted reading sd_video0duration for device wz_XBMC
2015.05.04 20:51:46 3: deletereading wz_XBMC sd_.* : Deleted reading sd_audio0codec for device wz_XBMC
Deleted reading sd_video0codec for device wz_XBMC
Deleted reading sd_audio0language for device wz_XBMC
Deleted reading sd_video0height for device wz_XBMC
Deleted reading sd_video0width for device wz_XBMC
Deleted reading sd_video0aspect for device wz_XBMC
Deleted reading sd_video0stereomode for device wz_XBMC
Deleted reading sd_audio0channels for device wz_XBMC
Deleted reading sd_video0duration for device wz_XBMC

Und bei State steht Active....

coyote8219

Zitat von: coyote8219 am 04 Mai 2015, 20:52:47
selbst bei der ersten Zeile passiert nichts :-/

define maskTriggerUp notify wz_XBMC:playStatus set GPIO_22 on-for-timer 2

und hier ein kleiner Ausschnitt aus der Log-Datei:
2015.05.04 20:51:33 1: GPIO_22: entfernt
2015.05.04 20:51:33 1: GPIO_27: entfernt
2015.05.04 20:51:33 1: Including fhem.cfg
2015.05.04 20:51:33 3: telnetPort: port 7072 opened
2015.05.04 20:51:33 3: WEB: port 8083 opened
2015.05.04 20:51:33 3: WEBphone: port 8084 opened
2015.05.04 20:51:33 3: WEBtablet: port 8085 opened
2015.05.04 20:51:33 2: eventTypes: loaded 120 events from ./log/eventTypes.txt
2015.05.04 20:51:33 1: Including ./log/fhem.save
2015.05.04 20:51:34 1: 192.168.2.26:9090 reappeared (wz_XBMC)
2015.05.04 20:51:42 3: deletereading wz_XBMC sd_.* : Deleted reading sd_audio0codec for device wz_XBMC
Deleted reading sd_video0codec for device wz_XBMC
Deleted reading sd_audio0language for device wz_XBMC
Deleted reading sd_video0height for device wz_XBMC
Deleted reading sd_video0width for device wz_XBMC
Deleted reading sd_video0aspect for device wz_XBMC
Deleted reading sd_video0stereomode for device wz_XBMC
Deleted reading sd_audio0channels for device wz_XBMC
Deleted reading sd_video0duration for device wz_XBMC
2015.05.04 20:51:46 3: deletereading wz_XBMC sd_.* : Deleted reading sd_audio0codec for device wz_XBMC
Deleted reading sd_video0codec for device wz_XBMC
Deleted reading sd_audio0language for device wz_XBMC
Deleted reading sd_video0height for device wz_XBMC
Deleted reading sd_video0width for device wz_XBMC
Deleted reading sd_video0aspect for device wz_XBMC
Deleted reading sd_video0stereomode for device wz_XBMC
Deleted reading sd_audio0channels for device wz_XBMC
Deleted reading sd_video0duration for device wz_XBMC

Und bei State steht Active....

Und gebe ich in der comand Zeile set GPIO_22 on-for-timer 2, schaltet das Relais auch...

vbs

Achso, ich glaub du musst noch zB .* anfügen:
define maskTriggerUp notify wz_XBMC:playStatus.* set meinLicht on

coyote8219

Super...Den Stop Befehl habe ich nun zum laufen gebracht...

Allerdings hänge ich nun bei der Ratio...
Das ist die letzt Config die funktioniert:

define maskTriggerDown notify wz_XBMC:sd_video0aspect.* { fhem("set GPIO_22 on-for-timer 2") }

sobald ich noch die Ratio reinpacke...geht es leider nicht mehr:

define maskTriggerDown notify wz_XBMC:sd_video0aspect.* { ($EVTPART1 > 2.3) ? fhem("set GPIO_22 on-for-timer 2") }

Muss da vielleicht noch ein READVALUE rein?

vbs

Den "?"-Operator kannst du so nicht benutzen, denk ich. Probier mal mehr so in der Art:
{ FahreMaskierungHoch() if ($EVTPART1 eq 'stopped') }

coyote8219

Habe es zum laufen gebracht...Hier für alle das Ergebnis, wenn sie auch eine Maskierung adden wollen:

Maskierung wieder hoch nach dem Film...
define maskTriggerUp notify wz_XBMC:playStatus.* { fhem("set GPIO_27 on-for-timer 2") if ($EVTPART1 eq 'stopped') }

Maskierung runter Film startet:
define maskTriggerDown notify wz_XBMC:sd_video0aspect.* { if( ReadingsVal("wz_XBMC","sd_video0aspect",0) > 2.3 ) { fhem "set GPIO_22 on-for-timer 2" } }

Nun habe ich nur noch das Problem, das wenn der Film in einer Playlist läuft nicht der maskTriggerDown getriggert wird...STop funktioniert bei jedem Trigger in der Playlist...Nur Maskierung runter löst nicht aus?


coyote8219

#432
Habe schon das Problem gefunden...

Ich habe auf XBMC ein Programm laufen, welches Cinema Experience heisst. Dies bewirkt, das wie im richtigen Kino, beim starten des Films ein Kino Inro kommt, dann ein Trailer, dann ein Sound Intro und dann der richtige Film...

Das Problem hier ist nun, das am Ende vom Sound Intro das eine Relais schaltet (Maskierung runter für Stop), weil das Sound Intro ja gestoppt ist....Aber im gleichen Moment startet dann die Maskierung...sprich die Befehle überlagern sich...Gibt es ein Befehl mit dem ich set GPIO_22 on-for-timer mit 3 Sekunden verzögerung starten kann?

Edit: Auch hierfür habe ich die Lösung gefunden...Ich habe einen Sleep Befehl eingebaut:

define maskTriggerDown notify wz_XBMC:sd_video0aspect.* { if( ReadingsVal("wz_XBMC","sd_video0aspect",0) > 2.3 ) { fhem "sleep 3;; set GPIO_22 on-for-timer 2" } }

Fettes Danke an VBS!!!!!!!!

Ohne Deine Hilfe hätte das nicht geklappt :-)

Jetzt hätte ich aber noch eine Frage, da ja nun bei jedem stop das Relais schaltet. Gibt es vielleicht auch einen Status "0" für XBMC welchen ich abfragen könnte? Quasi das Relais für Maskierung hochfahren schaltet nur bei Status 0?

Am allerbesten wäre eigentlich eine Movie-Abfrage, bei der nur geschaltet wird wenn größer als 2.3 und nur dann am Ende bei Stop hochgefahren wird...Gibt es dafür einen Befehl:

notify videoaspect, wenn > 2.3, dann fahre Maskierung runter. Wurde Maskierung runter gefahren, fahre bei Stopp wieder hoch...

coyote8219

Also um es noch mal verständlicher zu machen möchte ich nun das folgenden notify in den anderen integrieren:

Der folgende Befehl:
define maskTriggerUp notify wz_XBMC:playStatus.* { fhem("set GPIO_27 on-for-timer 2") if ($EVTPART1 eq 'stopped') }

sol in den folgenden integriert werden, so dass am Ende des Film bei status "stopped" wieder hochgefahren wird...

define maskTriggerDown notify wz_XBMC:sd_video0aspect.* { if( ReadingsVal("wz_XBMC","sd_video0aspect",0) > 2.3 ) { fhem "sleep 3;; set GPIO_22 on-for-timer 2" } }

Wäre super cool, wenn mir jemand wieder einen Tip oder die Lösung geben könnte...Ist meine letzte Hürde, dann ist es perfekt...

volschin

Einen Dummy definieren, der beim Runterfahren auf on gesetzt wird, diesen beim Stopp abfragen und nach hochfahren wieder auf Off setzen.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge