FHEM Forum

FHEM => Automatisierung => Thema gestartet von: UliM am 20 Januar 2014, 22:42:24

Titel: LightScene: HomeStatus mittels LightScene realisieren?
Beitrag von: UliM am 20 Januar 2014, 22:42:24
Hi,
probiere gerade das erste mal mit LightScene herum - coole Sache  8)
Mein Gedanke ist, den HomeStatus  (http://www.fhemwiki.de/wiki/Zuhause-Status (http://www.fhemwiki.de/wiki/Zuhause-Status)) mittels LightScene abzubilden - vielleicht ist es dafür aber auch gar nicht gedacht...

Ich habe schon hinbekommen, dass für mein FHT nicht die measured-temp, sondern desired-temp gesetzt wird - durch set <device> set <scene> <device> <command>

Beim Setzen einer bestimmten scene sollen außerdem ein paar at-devices erzeugt werden zum verzögerten ein/ausschalten bestimmter Geräte.
Geht auch das? Und wenn, dann wie?   (Einen dummy anlegen und diesem den perl-code zur Erzeugung der at anhängen hab ich versucht - dann kriegt der dummy den perl-code per set als state verpasst :)

Vielen Dank schon im Voraus für eure Hilfe,
Gruß,
Uli

PS: auch bei "echten" LightScenes möchte man ja vielleicht einige Aktionen verzögert ausführen, z.B. das Runterdimmen des Lichts erst nach30 Sekunden starten. Vielleicht könnte man ja ein "delay" mit angeben, das dann im Hintergrund ein at anlegt?  Z.B. mit  set <device> set <scene> <device> <command>|00:00:30 oder so....
Titel: Antw:LightScene: at erzeugen?
Beitrag von: justme1968 am 21 Januar 2014, 09:03:59
natürlich eis es nicht dafür gedacht :) aber was heisst das schon.

wie im anderen thread schon erwähnt war bis her die haupt idee einen gerade aktuellen zustand 'einzufrieren' und zu speichern und später wieder herzustellen. deshalb auch das lightSceneParamsToSave das du pro device setzen kannst um genau zu konfigurieren was wie gespeichert und wie es wieder hergestellt wird.

für das verzögerte ausführen müsste eigentlich das fhem interne sleep funktionieren. ich muss mal schauen wie ich das von aussen triggern kann. damit könnte man dann einfach 'sleep xx; set yy off' als command setzen. wenn es nicht direkt mit sleep geht könnte ich mir aber trotzdem diese syntax vorstellen.

gruss
  andre
Titel: Antw:LightScene: at erzeugen?
Beitrag von: justme1968 am 21 Januar 2014, 18:26:14
ich hab eben den fix für den update der device icons im der derail ansicht eingecheckt.

damit kann man jetzt wieder den status über die icons zusammenklicken wenn das device es erlaubt.

gruss
  andre
Titel: Antw:LightScene: at erzeugen?
Beitrag von: Rince am 22 Januar 2014, 10:22:37
Sag mal Andre, hast du mal darüber nachgedacht das Modul unter neuem Namen nochmal einzuchecken?
Light ist ja nun ein eher kleiner Teil davon :)
Titel: Antw:LightScene: at erzeugen?
Beitrag von: justme1968 am 22 Januar 2014, 17:39:36
ich hab gerade mal eine version zur probe eingecheckt die eine verzögerte Ausführung kann. das sleep muss erst mal noch von hand mit set eingebaut werden und es muss zwingend am anfang stehen:set <lc> set <scene> <device> sleep 5;; set h 10

ich muss mal schauen wie man das komfortabler machen kann.

gruss
  andre
Titel: Antw:LightScene: at erzeugen?
Beitrag von: UliM am 22 Januar 2014, 18:51:40
Hi,
och schade - für mein Gusto würde die Variante mit <timespec> mehr Flexibilität bieten, da man auch Wiederholungen angeben könnte, zB +*{2}00:02:00  - damit schalte ich zB 2x die Musik an, um langsames booten des wiedergebenden Rechners aufzufangen.
Und programmtefhnisch wär's m.E. auch einfacher: wenn der Befehl ein | enthält, splitte nach | und nimm alles davor für den set-Befehl und alles dahinter als timespec. Statt set auszuführen, lege ein at an mit
define at_<scene>_<device> at <timespec> <set-Befehl wie immer>

Vielleicht komm ich am WE dazu und kann Dir nen patch schicken :)

Gruß, Uli
Titel: Antw:LightScene: at erzeugen?
Beitrag von: justme1968 am 22 Januar 2014, 19:11:12
ich mag das dahinter hängen gar nicht. du kannst nie sicher sein ob das | mit dem dahinter nicht doch zum set gehört. das muss auf jeden fall out of band angegeben werden.

die version die ich jetzt gebaut habe ist aber so flexibel das sie das was du möchtest direkt mit erschlägt :). das sleep am anfang ist erst mal nur das schlüsselwort um zwischen CommandSet und AnalyzeCommandChain zu unterscheiden. du kannst also z.b. einset <lc> set <scene> <device> sleep 0;; define myAt +*{2}00:02:00 set myMusic on machen. wenn schon nicht mehr nur set dann nicht gleich auf at festlegen :)

ich denke es sollte ein zusätzliches set mit einer syntax in der art sein:set <lc> command <scene> <device> <command>

gruss
  andre


Titel: Antw:LightScene: at erzeugen?
Beitrag von: UliM am 22 Januar 2014, 22:15:33
wow, cool :)
Titel: Antw:LightScene: at erzeugen?
Beitrag von: UliM am 25 Januar 2014, 10:42:39
Moin,
hab mal weiter an HomeStatus via LightScene gebastelt. Dank Deines updates scheint das nun komplett machbar zu sein :)
Im screenshot mal der aktuelle Stand.

Hab jetzt die device-Bezeichnungen mal als Trennzeile zwischen den aktuellen Schaltstand und die Liste der scenes verschoben - find's so übersichtlicher, vielleicht magst Du ähnlich übernehmen.

Mit dem setCmd komm ich noch nicht ganz klar.
Ich habe gesetzt:
attr LS setCmd home  define LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play;LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play

1. In der Liste der scenes sieht man davon nix. Eine Spalte "setCmd" wäre gut. Je scene muss man ja nicht den ganzen Befehl sehen, aber irgendwas um darzustellen dass da weitere Kommandos ausgeführt werden fänd ich gut - und wenn's nur das Wort "Commands" ist.

2. ein get LS scene home liefert
define: ;LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play
Sieht seltsam aus dadurch, dass zu Anfang das define: so abgesetzt ist. Eine Beschiftung setCmd: und dann das gesamte hinterlegte Kommando fänd ich übersichtlicher.
Wird denn der Inhalt unverändert an AnalyzeCommand übergeben? Sprich funktioniert auch die Unterscheidung ; vs ;; ?

Nach einem
attr LS setCmd home  sleep 0;define LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play;LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play
sieht Ausgabe unerwartet aus:
sleep: ;0;;define LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play
Auch ist dieses command nun ZUSÄTZLICH zum o.g. vorhanden - ich hatte mit Überschreiben gerechnet. Mir ist nun nicht klar, wie ich  ein einmal gesetztes setCmd verändern könnte (abgesehen vom direkten Bearbeiten der .dd.save-Datei).

Gespannt auf Deine Antwort :)

LG, Uli

PS: Soll ich einen neuen Fred "HomeStatus über LightScene" aufmachen?
Titel: Antw:LightScene: at erzeugen?
Beitrag von: justme1968 am 25 Januar 2014, 11:27:21
mit der formatierung war ich nie besonders glücklich. ich denke ich mache das auf html eben noch etwas besser.

1. ja. stimmt. wie wäre es mit 'commands' und einem tooltip in dem dann mehr steht?

2. ich glaube da geht noch etwas durcheinander. setCmd ist kein attribut sondern ein kommando. aber das ist vielleicht auch nur ein tippfehler. aber du hast das <device> vergessen und statt dessen wurde 'define' als device name verwendet.

es muss also immer 'set <lc> setCmd <scene> <device> ...' heissen. also:set LS setCmd home wz_IRmacminiPlayPause  define LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play;LS_home1 at +00:00:20 set wz_IRmacminiPlayPause on;;define LS_home2 at +00:01:40 set iTunes2 play;sleep 5;set iTunes2 speaker all;sleep 5;set iTunes2 play

das ; am anfang ist für mich die unterscheidung zwischen (altem) set und setCmd. das könnte ich beim get noch besser darstellen. set und setCmd machen im prinzp genau das gleiche. das setCmd baut nur intern das ; an den anfang dazu wenn du ein set mit einem ; am anfang selber machst kommt es genau auf das gleiche raus wie das setCmd.

ja. natürlich sollte ein neues comando auf das gleiche device in der gleichen szene das alte set oder das alte kommando überschreiben. es geht auch gar nicht anders weil es intern ein hash auf scene und device ist. du hast aber jedes mal das device vergessen und ein mal wurde dann define als device genommen und ein mal sleep :)

das mit den ; und ;; funktioniert auch. beim set musst genau das eingeben das du auf der kommando zeile eingeben würdest aber mit allen ; verdoppelt. also ; -> ;; und ;; -> ;;;;. das liegt dadran das das ganze im prinzip zwei mal durch AnalyzeCommandChain läuft. ein mal wenn fhem das set kommando parst (hier wird jeweils aus einem verdoppelten ;; ein einfaches ;) und dann beim zweiten mal wenn die szene aufgerufen wird. hier müssen die ; einfach vorkommen so wie es auf der kommando zeile auch eingegeben wird.

gruss
  andre

ps: ich mag das aufteilen in immer neue threads gar nicht :)
Titel: Antw:LightScene: HomeStatus mittels LightScene realisieren?
Beitrag von: UliM am 25 Januar 2014, 12:27:31
Hi Andre,
ad 1) Gute Idee.
Bei 2) hatte ich zwar den Tippfehler mit attr, das wäre aber vll gar nicht so abwegig zum späteren Bearbeiten eines hinterlegten Befehls. Denn wenn man später so
nen Befehjl mal korrigieren/verändern möchte, wäre das durch das Vorbelegen des Bearbeitungsfelds bei den Attributen ein komfortabler Weg. Aktuell müsste man ein get LS <scene> anzeigen, den Befehl in die Zwischenablage nehmen, und dann beim Überschreiben mittels set LS set... pasten und korrigieren. Egal, geht ja auch so :)

ad 2) jau, war ein Tippfehler. Dass ein setCmd an ein device gehängt werden muss, hatte ich nicht so verstanden - ich hatte mit Zuordnung auf der Ebene der scene gerechnet. Dann isses jetzt aber klar. Die verdoppelten ; werden sicher zu Verwirrungen führen - aber das liegt wie Du schon schreibst an fhem.pl .

Gruß, Uli

PS: ok - hab den Titel des originären posts aktualisiert
PPS: hab den ersten Wurf des Wiki-Artikels fertig. Screenshot können wir ja ggf noch austauschen, setCmd setz ich später noch dazu. Kannst Du bitte mal drüberschauen und ggf korrigieren/erweitern oder mir feedback schicken: http://www.fhemwiki.de/wiki/Zuhause-Status