LightScene: HomeStatus mittels LightScene realisieren?

Begonnen von UliM, 20 Januar 2014, 22:42:24

Vorheriges Thema - Nächstes Thema

UliM

Hi,
probiere gerade das erste mal mit LightScene herum - coole Sache  8)
Mein Gedanke ist, den HomeStatus  (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....
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rince

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 :)
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)

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

UliM

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
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

justme1968

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


hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

UliM

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

UliM

#8
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?
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

justme1968

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 :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

UliM

#10
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

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