Frage zu Automatisierung mit Kodi , der Harmony und der Beleuchtung.

Begonnen von Jumbo, 25 September 2015, 18:07:46

Vorheriges Thema - Nächstes Thema

Jumbo

Hi

Ich habe im moment bei FHEM alles so eingestellt , dass wenn ich bei Kodi einen Film anfange , dass die Beleuchtung langsam runter dimmt. Bei Pause kommt sie langsam wieder Hoch.

Nun ist es aber so , dass verschiedene Add Ons in Kodi (Cinemavision) z.b. zuerst einen Trailer Spielen , dann noch ein anderes Video , und dann erst den Film. Jedes mal , dimmt er dann hoch und wieder runter.

Wie könnte man das umgehen , dass man sagt z.b. falls nicht länger als 3s Pause, dann nicht hochdimmen ?

Hier mein Code :

define notify_XBMC_status notify NUC:playStatus.* { if (ReadingsVal("NUC", "type", "") eq "movie"){\
   if (ReadingsVal("NUC", "playStatus", "") eq "playing"){\
       fhem("set Stuff1,Stuff2 0 0 2");;\
    }\
   if (ReadingsVal("NUC", "playStatus", "") eq "playing"){\
       fhem("set Stuff3,Stuff4 off");;\
    }\
  if (ReadingsVal("NUC", "playStatus", "") eq "playing"){\
       fhem("set HUEDevice1,HUEDevice2,HUEDevice3 pct 0 : transitiontime 70");;\
    }\
    if (ReadingsVal("NUC", "playStatus", "") eq "paused"){\
       fhem("set HUEDevice1,HUEDevice2,HUEDevice3 pct 100 : transitiontime 70");;\
    }\
   if (ReadingsVal("NUC", "playStatus", "") eq "stopped"){\
       fhem("set HUEDevice1,HUEDevice2,HUEDevice3 pct 100 : transitiontime 70");;\
    }\
   if (ReadingsVal("NUC", "playStatus", "") eq "stopped"){\
       fhem("set LED_Podest rgb 0AF7FF 5");;\
    }\
   if (ReadingsVal("NUC", "playStatus", "") eq "paused"){\
       fhem("set LED_Podest rgb 0AF7FF 5");;\
    }\
   if (ReadingsVal("NUC", "playStatus", "") eq "playing"){\
       fhem("set LED_Podest off 2");;\
    }\
    if (ReadingsVal("NUC", "playStatus", "") eq "stopped"){\
        fhem("set LED_Traap rgb 0AF7FF 2");;\
     }\
    if (ReadingsVal("NUC", "playStatus", "") eq "paused"){\
        fhem("set LED_Traap rgb 0AF7FF 2");;\
     }\
    if (ReadingsVal("NUC", "playStatus", "") eq "playing"){\
        fhem("set LED_Traap off 2");;\
    }\
    }\
    }\

UliM

Eine Möglichkeit wäre, per watchdog das Licht nur dann zu schalten, wenn das letzte play mindestens x sekunden zurückliegt.
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Jumbo

so etwa in der art :

define watchNUC watchdog paused 00:00:03 NUC:playStatus.playing set Stuff1,Stuff2 on


?

Jumbo

nee, das ist falsch , das watchdog müsste irgendwie hier rein , oder nicht ?

define notify_XBMC_status notify NUC:playStatus.* { if (ReadingsVal("NUC", "type", "") eq "movie"){\
    if (ReadingsVal("NUC", "playStatus", "") eq "paused"){\
       fhem("set HUEDevice1,HUEDevice2,HUEDevice3 pct 100 : transitiontime 70");;\
    }\


aber ich weiss nicht genau wie .

Könnte mir da jemand helfen bitte  ?

UliM

Moin,
hab nochmal drüber nachgedacht - fürchte da hab ich Dich auf nen Holzweg geschickt. Watchdog ist quasi als selbständiger Prüfmeachnismus super, aber nicht als Bedingung in irgendwelchen if-Konstrukten.

Was ich als Deine Problemstellung verstanden habe ist:
wenn stop, dann licht nur dimmen, wenn letztes stop mindestens x sekunden zurückliegt
wenn start, dann licht nur dimmen, wenn letztes start mindestens x sekunden zurückliegt

D.h., Du musst die Zeitdifferenz seit dem letzten entspr. event rausfinden. Blöd ist, dass Du zwei unterschiedliche events hast (start/stop), die aber auf demselben reading geführt werden (playStatus). Deshalb fällt der einfachere Weg über ReadingsTimeStamp aus.
Als erstes braucht es einen Ort, an dem Du den jeweils letzten Zeitpunkt von play bzw. pause ablegen kannst.

define NUCstartTime dummy
define NUCstopTime dummy

Damit hast Du den Ablageort für den Zeitstempel. Nun muss der Zeitstempel gesetzt werden. Das kannst Du leicht in Deinen bisherigen code einbauen - überall da, wo Du die Lampe schaltetst:
fhem "set NUCstartTime ".time;
fhem "set NUCstopTime ".time;
usw.


Nun musst Du noch in die Bedingung, ob das Licht gedimmt werden muss, prüfen if ( ( time - Value('NUCstartTime') ) >10), also ob seit dem letzten play-event min. 10 Sekunden vergangen sind.

Rauskommen müsste dann sowas wie:
define notify_XBMC_status notify NUC:playStatus.* { if (ReadingsVal("NUC", "type", "") eq "movie"){\
   if ( ReadingsVal("NUC", "playStatus", "") eq "playing"){\
     if ( (time - Value("NUCstartTime") ) > 30){\
         fhem("set Stuff1,Stuff2 0 0 2");;\
         fhem("set Stuff3,Stuff4 off");;\
     }\
     fhem "set NUCstartTime ".time;;\
   }\
 


Nicht getestet, nur ein Lösungsansatz.

Vielleicht kennt jemand anderes einen eleganteren Weg - würde mich interessieren.

Und ganz unabhängig davon: Um dieses ganze ;;\ usw. loszuwerden, lagere die Routine besser nach myUtils aus. Dann kriegst Du ggf. auch vernünftige Fehlermeldungen.

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Jumbo

Ich habe jetzt mal ein bisschen damit rumgespielt , es geht aber noch nicht.

Aber so nach deinem Lösungsansatz, muss ich dann paused und stopped rausnehmen ? und dann nur noch playing drin lassen ?


Jumbo

Ich hab's jetzt mal so gemacht zum testen , aber da ist nich irgendwo der Wurm drin :



define NUCstartTime dummy
define NUCstopTime dummy

define notify_XBMC_status notify NUC:playStatus.* { if (ReadingsVal("NUC", "type", "") eq "movie"){\
   if (ReadingsVal("NUC", "playStatus", "") eq "playing"){\
   if ( (time - Value("NUCstartTime") ) > 3){\
         fhem("set LED_Traap off");;;;\
     }\
     fhem "set NUCstartTime ".time;;;;\
   }\

   if (ReadingsVal("NUC", "playStatus", "") eq "paused"){\
   if ( (time - Value("NUCstopTime") ) > 3){\
         fhem("set LED_Traap on");;;;\
     }\
     fhem "set NUCstopTime ".time;;;;\
   }\
   }\



Beim Starten (playing) geht die LED sofort aus. Beim Pausen , geht die LED sofort an . Egal ob innerhalb der 3 sek oder wenn ich länger wie 3 sek warte.

UliM

Hat denn das Schreiben der Werte auf die dummies geklappt?

Irgendwelche Meldungen im log?

Was erscheint im Log, wenn Du in Deinem notify einbaust Debug "timesincelaststart ".(time - Value("NUCstartTime"));;\

Warum ;;;; und nicht ;; ?

Hast Du das jetzt immernoch auf nem notify, oder inziwschen in myUtils?
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Jumbo

Ist noch immer im notify. ich muss mir das erst anlesen im myUtils, habe das noch nie gemacht.


Jumbo

ja, das schreiben in die Dummy's klappt :


NUCstartTime
state

1443270327.3927

2015-09-26 14:25:27


NUCstopTime
state

1443270321.82286

2015-09-26 14:25:21


und das debug :

2015.09.26 14:32:06.611 1: DEBUG>timesincelaststart 9.54044890403748
2015.09.26 14:32:10.429 3: deletereading NUC sd_.* : Deleted reading sd_video0codec for device NUC
Deleted reading sd_video0width for device NUC
Deleted reading sd_audio0codec for device NUC
Deleted reading sd_audio1codec for device NUC
Deleted reading sd_video0duration for device NUC
Deleted reading sd_video0aspect for device NUC
Deleted reading sd_audio0channels for device NUC
Deleted reading sd_audio1channels for device NUC
Deleted reading sd_audio0language for device NUC
Deleted reading sd_video0stereomode for device NUC
Deleted reading sd_video0height for device NUC
Deleted reading sd_audio1language for device NUC
2015.09.26 14:32:10.458 1: DEBUG>timesincelaststart 3.84712290763855
2015.09.26 14:32:12.135 3: deletereading NUC sd_.* : Deleted reading sd_audio1channels for device NUC
Deleted reading sd_audio0channels for device NUC
Deleted reading sd_video0aspect for device NUC
Deleted reading sd_audio1language for device NUC
Deleted reading sd_video0height for device NUC
Deleted reading sd_video0stereomode for device NUC
Deleted reading sd_audio0language for device NUC
Deleted reading sd_audio0codec for device NUC
Deleted reading sd_video0width for device NUC
Deleted reading sd_video0codec for device NUC
Deleted reading sd_video0duration for device NUC
Deleted reading sd_audio1codec for device NUC
2015.09.26 14:32:12.160 1: DEBUG>timesincelaststart 1.70102310180664
2015.09.26 14:32:13.889 3: deletereading NUC sd_.* : Deleted reading sd_audio0language for device NUC
Deleted reading sd_video0height for device NUC
Deleted reading sd_audio1language for device NUC
Deleted reading sd_video0stereomode for device NUC
Deleted reading sd_video0aspect for device NUC
Deleted reading sd_audio1channels for device NUC
Deleted reading sd_audio0channels for device NUC
Deleted reading sd_audio1codec for device NUC
Deleted reading sd_video0duration for device NUC
Deleted reading sd_video0width for device NUC
Deleted reading sd_video0codec for device NUC
Deleted reading sd_audio0codec for device NUC
2015.09.26 14:32:13.909 1: DEBUG>timesincelaststart 1.74954414367676


UliM

Hi,
im log steht, dass timsince 9sec ist.
Setz doch im Notify den Schwellwert mal auf 20sec (zumindest zum Testen) - vielleicht sind die 3s ja einfach zu kurz.

Woher kommen denn die ganzen "deletereading"s?

Und setz doch mal den verbose-Wert der zu schaltenden devices so, dass die Schaltvorgänge auch geloggt werden, dann kann man auch im log sehen, wann set LED_Traap off usw. geschaltet werden.

Fehlermeldungen gibt's keine - mir scheint aber die schließemnde gescweifte Klammer des ersten if zu fehlen - zähl da noch mal nach.
Sonst einfach noch ein bischen rumprobieren, ggf. noch ein paar Debug-Meldungen einbauen um das Verhalten nachvollziehen zu können.

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Jumbo

Danke Uli, werde ich testen.

ich denke dass die deletereadings hiervon kommen :

attr NUC event-on-change-reading (state|playStatus|time|totaltime|season|episode|currentTitle|currentShowtitle)


weil ich nur das brauche , löscht er den rest.