Hauptmenü

Leinwandsteuerung

Begonnen von Breaked, 05 August 2015, 10:32:01

Vorheriges Thema - Nächstes Thema

Breaked

Hey.

Habe mir eine Leinwandsteuerung gebaut, die auch soweit funktioniert.

define Leinwand_runter DOIF ([Harmony:currentActivity] eq "starting Film Beamer") (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([Harmony:currentActivity] eq "PowerOff") (set LW.Hoch on-for-timer 1)

Das Problem ist bei der Sache, wenn ich von "Film Beamer" auf sagen wir "Fernsehen TV" wechsle, bleibt die Leinwand logischer Weise unten, da sie nur durch den PowerOff-Befehl hochfahren würde, Beamer aus usw..


Gibt es einen Möglichkeit, dass das DOIF auch darauf reagieren kann, wenn ich die Aktion auf der Harmony wechsle?
Stehe glaube ich etwas auf dem Schlauch.
Bereit für dein eigenes Smart Home?
http://ownsmarthome.de

rretsiem

Hi,

mit einem "or" im DOELSEIF solltest du das doch prüfen können.

define Leinwand_runter DOIF ([Harmony:currentActivity] eq "starting Film Beamer") (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([Harmony:currentActivity] eq "PowerOff" or [Harmony:currentActivity] eq "Fernsehen TV") (set LW.Hoch on-for-timer 1)

Oder aber su baust einen separaten "Zweig" mit DOELSEIF. Eine weitere Möglichkeit wäre ein DOELSE am Ende und einfach dann immer hochfahren der Leinwand wenn eine der IF Bedingungen nicht zutrifft.

Zitat von: Breaked am 05 August 2015, 10:32:01
Hey.

Habe mir eine Leinwandsteuerung gebaut, die auch soweit funktioniert.

define Leinwand_runter DOIF ([Harmony:currentActivity] eq "starting Film Beamer") (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([Harmony:currentActivity] eq "PowerOff") (set LW.Hoch on-for-timer 1)

Das Problem ist bei der Sache, wenn ich von "Film Beamer" auf sagen wir "Fernsehen TV" wechsle, bleibt die Leinwand logischer Weise unten, da sie nur durch den PowerOff-Befehl hochfahren würde, Beamer aus usw..


Gibt es einen Möglichkeit, dass das DOIF auch darauf reagieren kann, wenn ich die Aktion auf der Harmony wechsle?
Stehe glaube ich etwas auf dem Schlauch.

Breaked

Das sieht doch schon gut aus!

Ich denke aber, dass ich damit nur das "Problem" haben werden, dass das Relais um die Leinwand hochzufahren, bei jeder Aktion angesteuert wird.
Oder sehe ich das gerade verkehrt?
Bereit für dein eigenes Smart Home?
http://ownsmarthome.de

Wuppi68

mach doch einfach

if (Beamer in Harmony = On) then Leinwand runter else Leinwand hoch
FHEM unter Proxmox als VM

Breaked

#4
Sinngemäß würde ich es nun so schreiben:

define Leinwand.runter if ([Harmony:currentActivity] eq "starting Film Beamer") then (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) else (set LW.Hoch on-for-timer 1)

Damit sollte die Funktion fürs Film schauen auf dem Beamer ja funktionieren.
Da ich aber z.B. auch nicht nur die Aktion für Film verwenden will, sondern auch für PS4, wie müsste ich den Code abändern?
So?:

define Leinwand.runter if ([Harmony:currentActivity] eq "starting Film Beamer" || "starting PS4.Beamer") (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) else (set LW.Hoch on-for-timer 1)


Wenn ich mir nun überlege, dass ich an diesem Beispiel Film Beamer gestartet habe, danach aber PS4 Beamer starte (ohne dazwischen eine andere Aktion ohne Beamer zu starten), würde die Leinwand quasi ein weiteres Mal herunterfahren?!

Wie könnte ich das perfekt lösen? Sehe leider für mich keine passende Lösung ...

Für die Harmony habe ich folgende Readings:

activity   
currentActivity
previousActivity


Bereit für dein eigenes Smart Home?
http://ownsmarthome.de

Wuppi68

Spar die das "Gehampel" mit der Activity :-)

Nehm den Status vom Beamer in der Harmony und koppel daran einfach Deine Leinwand.

So ungefähr:

define Leinwand DOIF ([Beamer:state] eq "ON") (Set Leinwandrunter) DOELSE (set Leinwandhoch)

ist aus dem Kopf und sollte so funktionieren.
Beamer ist dein SubDevice in der Harmony

Hat den Charmanten Vorteil, dass Du nicht so viele Dinge in Deine Abfragen/Programme verarbeiten musst.

Denn eines gilt: Ist der Beamer an --> wird die Leinwand gebraucht
FHEM unter Proxmox als VM

Breaked

Das ist natürlich eine klasse Idee!
Habe gerade nochmal ins Wiki geschaut und den Teilabschnitt wohl irgendwie damals überlesen: http://www.fhemwiki.de/wiki/Harmony#Fhem_Devices_auf_Ger.C3.A4teebene

Das man die Geräte einzeln anlegen kann, ist natürlich klasse - in jeder Hinsicht.
Trotzdem werde ich es mit deinem Code nicht zu 100% zum laufen bekommen - leider.
Ich poste nun besser mal meine gesamte Steuerung:
Zitatdefine Leinwand_Strom DOIF ([Harmony:currentActivity] eq "starting Film Beamer") (set Aktor.Fernseher on) DOELSEIF ([Harmony:currentActivity] eq "PowerOff") (set Aktor.Fernseher off)
attr Leinwand_Strom do resetwait
attr Leinwand_Strom group Leinwand
attr Leinwand_Strom room Wohnzimmer
attr Leinwand_Strom state 0
attr Leinwand_Strom wait 0:600

define Leinwand_runter DOIF ([Harmony:currentActivity] eq "starting Film Beamer") (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([Harmony:currentActivity] eq "PowerOff") (set LW.Hoch on-for-timer 1)
attr Leinwand_runter group Leinwand
attr Leinwand_runter room Wohnzimmer

Zur Erklärung:
Hinter dem Fernseher ist ein Aktor, der den Strom von Leinwand und Beamer trennt.
Erst wenn die Aktivität von der Harmony aus gestartet wird, schaltet der Aktor ein und der HarmonyHub regelt den Rest.


Habe nun ja einen neuen Ansatz und werde mal weiter rum basteln :)
Die Lösung kann ich danach (hoffentlich) präsentieren.
Bereit für dein eigenes Smart Home?
http://ownsmarthome.de

Wuppi68

Zitat von: Breaked am 05 August 2015, 13:47:34
Das ist natürlich eine klasse Idee!
Habe gerade nochmal ins Wiki geschaut und den Teilabschnitt wohl irgendwie damals überlesen: http://www.fhemwiki.de/wiki/Harmony#Fhem_Devices_auf_Ger.C3.A4teebene

Das man die Geräte einzeln anlegen kann, ist natürlich klasse - in jeder Hinsicht.
Trotzdem werde ich es mit deinem Code nicht zu 100% zum laufen bekommen - leider.
Ich poste nun besser mal meine gesamte Steuerung:
Zur Erklärung:
Hinter dem Fernseher ist ein Aktor, der den Strom von Leinwand und Beamer trennt.
Erst wenn die Aktivität von der Harmony aus gestartet wird, schaltet der Aktor ein und der HarmonyHub regelt den Rest.


Habe nun ja einen neuen Ansatz und werde mal weiter rum basteln :)
Die Lösung kann ich danach (hoffentlich) präsentieren.

ich glaube, da fehlt noch ein mini Stück bei Dir ...

die Harmony kennt keine Leinwand, also interressiert sie sich auch nicht dafür. Dafür kennt Sie aber den Beamer. Jetzt startest Du eine Aktion mit dem Beamer und die Harmony regelt alles Dich OHNE die Leinwand zu kennen.
In FHEM setzt Du halt nur den Status des Beamers auf die Leinwand um.

also ungefähr so....

define Leinwand_Strom DOIF ([Beamer:state] eq "ON") (set Aktor.Fernseher on;;set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([Beamer:state] eq "OFF") (set LW.Hoch on-for-timer 1;;sleep 20;;set Aktor.Fernseher off)
attr Leinwand_Strom do resetwait
attr Leinwand_Strom group Leinwand
attr Leinwand_Strom room Wohnzimmer
attr Leinwand_Strom state 0
attr Leinwand_Strom wait 0:600


zur besseren lesbarkeit noch einmal der DEF Teil aus dem WEB Internerface:


([Beamer:state] eq "ON")
  (set Aktor.Fernseher on,
   set LW.Runter on-for-timer 1,
   sleep 16.5,
   set LW.Stop on-for-timer 1)
DOELSEIF ([Beamer:state] eq "OFF")
  (set LW.Hoch on-for-timer 1,
   sleep 20,
   set Aktor.Fernseher off)

FHEM unter Proxmox als VM

Breaked

#8
Es funktioniert - dein Ansatz mit dem Beamer abfragen war perfekt! :)

Hier mein Code:

define Leinwand_Strom DOIF ([Harmony:currentActivity] eq "starting Film Beamer" or [Harmony:currentActivity] eq "starting PS4.Beamer") (set Aktor.Fernseher on) DOELSE (set Aktor.Fernseher off)
attr Leinwand_Strom do resetwait
attr Leinwand_Strom group Leinwand
attr Leinwand_Strom room Wohnzimmer
attr Leinwand_Strom state 0
attr Leinwand_Strom wait 0:600

define Leinwand_runter DOIF ([harmony_21748128:power] eq "on") (set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([harmony_21748128:power] eq "off") (set LW.Hoch on-for-timer 1)
attr Leinwand_runter group Leinwand
attr Leinwand_runter room Wohnzimmer


Erklärung:
- harmony_21748128 ist mein Beamer, anders hat es bei mir auf die Schnelle nicht funktioniert
- Sobald die Aktivität von der Harmony Film.Beamer oder PS4.Beamer ist, wird der Strom eingeschaltet
- Die Leinwand fährt runter, sobald der Beamer als on detektiert wird und bleibt solang unten, bis das Reading vom Beamer auf off geht
  Das wäre der Fall, wenn man auf einen Aktion bei der Harmony umschaltet, bei der kein Beamer benötigt wird.
  Ist dieser Fall eingetroffen, geht das Reading des Beamers auf off und die Leinwand fährt wieder hoch.

Vielen Dank an Dich, Wuppi!
Wobei dein Code natürlich um einiges übersichtlicher und komprimierter ist - daran muss ich wohl noch arbeiten :D
Daher werde ich wohl trotzdem deinen verwenden.
Bereit für dein eigenes Smart Home?
http://ownsmarthome.de

Wuppi68

jetzt nimmst Du noch deine Leinwandstrom Befehle mit in das Leinwand DOIF rein und Du kannst es komplett raus werfen. Du fragst dort ja nach Starte Beamer (Film oder PS4 ) ab um dem Beamer per Hub einzuschalten ...

Jetzt bekommst Du noch ne weitere Beamerfreundliche Daddelkonsole oder ähnlich und musst das DOIF und die Harmony entsprechend anpassen ...

Mache doch eine rundum sorglos Version :-)


define LeinwandRaufRunter DOIF ([harmony_21748128:power] eq "on") (set Aktor.Fernseher on;;set LW.Runter on-for-timer 1;; sleep 16.5;; set LW.Stop on-for-timer 1) DOELSEIF ([harmony_21748128:power] eq "off") (set LW.Hoch on-for-timer 1;; set Aktor.Fernseher on-for-timer 600)
attr LeinwandRaufRunter group Leinwand
attr LeinwandRaufRunter room Wohnzimmer
attr LeinwandRaufRunter wait 0:600


jetzt läuft Deine Anlage autonom mit FHEM basierend auf den Beamerzustand in der Harmony
- eingeschaltet wird sofort Strom für Beamer und Leinwand (evtl Verzögerung für Stromeinschaltvorgang in die Harmony mit reinnehmen bzw. auch nach Stromeinschalten)
- Leinwand fährt runter
- Du guckst auf die Leinwand und schaltest aus
- Beamer wird Aktion im Hub ausgeschaltet --> triggert FHEM DOIF und die Leinwandfährt hoch und schaltet noch einmal die Stromversorgung für 10 Minuten an (danach ist diese dann bei Homematic auch aus). Die 10 Minuten sind für den Beamer zum abkühlen ....
- Das Wait sichert die Stromversorgung gegen zu frühes ausschalten

Solange Du dein Beamer in der Harmony nicht umbenennst brauchst Du danch "nie" wieder an FHEM dran :-)
FHEM unter Proxmox als VM

Breaked

Super Sache und Bomben Erklärung!

Ich danke dir vielmals :) :)
Bereit für dein eigenes Smart Home?
http://ownsmarthome.de