Hallo Zusammen!
Ich hab jetzt schon eine ganze Weile gesucht und habe schon einige Beispiele gefunden und ausprobiert - aber irgendwie klappt das nicht so wirklich mit dem DOIF.
Mittlerweile habe ich den Code so vereinfacht, dass ich in einem DOIF mit einem Zeitwert, der in einem Zeit-Dummy gespeichert ist einen anderen Dummy setzen möchte. Einfacher geht es eigentlich nicht - aber irgendwie klappt das bei mir nicht.
Das ist mein Zeit-Dummy:
defmod du_Rollo_Zeit_hoch_Wochenende dummy
attr du_Rollo_Zeit_hoch_Wochenende alias Zeit hoch WE:
attr du_Rollo_Zeit_hoch_Wochenende devStateIcon .*:rc_BLANK
attr du_Rollo_Zeit_hoch_Wochenende group Rollos_Settings
attr du_Rollo_Zeit_hoch_Wochenende icon icoUhr
attr du_Rollo_Zeit_hoch_Wochenende room Rollo
attr du_Rollo_Zeit_hoch_Wochenende setList state:time
attr du_Rollo_Zeit_hoch_Wochenende sortby 11
attr du_Rollo_Zeit_hoch_Wochenende webCmd state
Diese Zeitvorgabe möchte ich in einer DOIF auswerten und einen anderen Dummy schalten:
defmod do_test DOIF ([du_Rollo_Zeit_hoch_Wochenende])(set du_Rollos_osten hoch)
attr do_test room Rollo
Und hier der Dummy den ich setzen möchte:
defmod du_Rollos_osten dummy
attr du_Rollos_osten alias Rollos auf Ostseite:
attr du_Rollos_osten devStateIcon .*:rc_BLANK
attr du_Rollos_osten group Rollos
attr du_Rollos_osten icon fts_shutter_updown
attr du_Rollos_osten room Rollo
attr du_Rollos_osten setList state:hoch,runter
attr du_Rollos_osten sortby 90
attr du_Rollos_osten webCmd state
Irgendwie klappt das aber mit meinem Zeit-Dummy nicht wirklich. Wenn ich eine Uhrzeit, anstatt dem Dummy, angebe, dann klappt alles bestens. Aktuell würde ich vermuten, dass das irgendwie an meinem Zeit-Dummy liegt oder an der Abfrage in dessen in der DOIF.
Könnte mir hier vielleicht einer der erfahreneren helfen?
Herzlichsten Dank!
Aus commandref:
Anwendungsbeispiel: Lampe soll zu einer bestimmten Zeit eingeschaltet werden. Die Zeit soll über den Dummy time einstellbar sein:
define time dummy
set time 08:00
define di_time DOIF ([[time]])(set lamp on)
attr di_time do always
Gesendet von meinem SM-J510FN mit Tapatalk
Zitat von: knopf_piano am 19 November 2017, 14:48:41
Aus commandref:
Anwendungsbeispiel: Lampe soll zu einer bestimmten Zeit eingeschaltet werden. Die Zeit soll über den Dummy time einstellbar sein:
define time dummy
set time 08:00
define di_time DOIF ([[time]])(set lamp on)
attr di_time do always
Gesendet von meinem SM-J510FN mit Tapatalk
Danke knopf_piano - die commandref habe ich auch gelesen und vieles mehr. Aber ich will die Zeit nicht mit einem set Befehl setzen sondern in einem Dummy-Device im Frontend editierbar machen.
Es gibt ja einige Beispiele wo das so funktionieren soll - aber irgendwie klappt es bei mir nicht.
Zitat von: litronics am 19 November 2017, 14:53:12
Danke knopf_piano - die commandref habe ich auch gelesen und vieles mehr. Aber ich will die Zeit nicht mit einem set Befehl setzen sondern in einem Dummy-Device im Frontend editierbar machen.
Es gibt ja einige Beispiele wo das so funktionieren soll - aber irgendwie klappt es bei mir nicht.
Siehe wiki zu wakeup light.
ich hab eins so im fhemweb
####
define Dum_wakeUpLightTime dummy
attr Dum_wakeUpLightTime alias Wakeup Light Zeit
attr Dum_wakeUpLightTime group Licht EG
attr Dum_wakeUpLightTime icon light_on-for-timer
attr Dum_wakeUpLightTime room EG
attr Dum_wakeUpLightTime setList state:time
attr Dum_wakeUpLightTime webCmd state
Gesendet von meinem SM-J510FN mit Tapatalk
So sieht mein Dummy auch aus - aber irgendwie schaff ich es nicht den in der DOIF zu verwenden.
Könntest Du vielleicht dein DOIF mal dazu posten, wenn Du eins hast?
So wie im Commandref funktioniert bei mir perfekt
defmod ditime DOIF ([[time]])(set du on)
attr ditime do always
Zeig mal ein "list" von deinen Devices.
Zitat von: amenomade am 19 November 2017, 18:56:08
So wie im Commandref funktioniert bei mir perfekt
defmod ditime DOIF ([[time]])(set du on)
attr ditime do always
Zeig mal ein "list" von deinen Devices.
Da wird wohl die eckige doppelklammer fehlen, wenns nicht geht
Gesendet von meinem SM-J510FN mit Tapatalk
So jetzt hab ich mich einen ganzen Tag rumprobiert, gegoogelt, im Wiki und im Forum gelesen - am Ende habe ich das Problem gefunden - aber noch keine Lösung dafür :(
Ich habe ein Dummy in dem ich die Zeit angeben möchte mit folgender Konfiguration:
defmod du_Rollo_Zeit_hoch_Wochenende dummy
attr du_Rollo_Zeit_hoch_Wochenende alias Zeit hoch WE:
attr du_Rollo_Zeit_hoch_Wochenende devStateIcon .*:rc_BLANK
attr du_Rollo_Zeit_hoch_Wochenende group Rollos_Settings
attr du_Rollo_Zeit_hoch_Wochenende icon icoUhr
attr du_Rollo_Zeit_hoch_Wochenende room Rollo
attr du_Rollo_Zeit_hoch_Wochenende setList state:time
attr du_Rollo_Zeit_hoch_Wochenende sortby 11
attr du_Rollo_Zeit_hoch_Wochenende webCmd state
Ist ja genau so, wie es in den ganzen Beispielen angegeben ist.
Wenn ich in dem Device jetzt die Zeit über die angezeigten Schieberegler einstelle und auf SET klicke, dann wird im STATE "state 08:00" gespeichert.
Wenn ich das Device dann einfach mit [du_Rollo_Zeit_hoch_Wochenende] in einer DOIF verwenden möchte, meckert er, dass er eine Zeitangabe im Format (xx:xx:xx) haben möchte und nicht "state 08:00".
OK - ist grundsätzlich verständlich und nachvollziehbar.
Aus meiner Sicht gibt es jetzt zwei Lösungsmöglichkeiten - entweder ich gewöhne dem Dummy ab im STATE den String "state " vor die Uhrzeit zu schreiben oder ich filter den mit einer RegEx zur Laufzeit raus.
An der RegEx habe ich mich schon probiert aber irgendwie klappt das nicht und jetzt hätte ich das ganze schon in eine do() Anweisung gekapselt:
[{do { (my $tmp = ReadingsVal("du_Rollo_Zeit_hoch_Wochenende", "state", "state 22:00")) =~ m/(\d\d:\d\d)/; $tmp }}]
Hab ich hier ein Problem in meiner Konfiguration, einen Denkfehler oder was ist falsch?
Mir gehen jetzt so langsam die Ideen aus...
Geht das nicht?
defmod ditime DOIF ([[time]:00])(set du on)
@accessburn: mit [time] = "state 08:00" bestimmt nicht.
@litronics: Also... zwei Möglichkeiten:
Möglichkeit 1: du lässt dein Dummy so wie es ist, und nutzt nicht den Schieberegler von "set", sondern den von state oben ("+" klicken, dann einstellen, dann "-" klicken". Siehe Bild
Möglichkeit 2: webCmd weg, und attr du_Rollo_Zeit_hoch_Wochenende setList :time
Dann kannst Du nur noch über den Regler von "set" einstellen.
Für deine Tests würde ich devStateIcon .*:rc_BLANK erstmal weg lassen, damit Du siehst, was in state kommt...
Ahja, und ich habe vergessen: warum ein zusätzliches Dummy dafür? Du kannst das einfach direkt im DOIF als Reading haben.
define ditime DOIF ([[$SELF:mytime]])(set du on)
attr ditime do always
attr ditime readingList mytime
attr ditime setList mytime:time
attr ditime state [ditime:mytime]
attr ditime webCmd mytime
@litronics:
jetzt nimm folgendes:
define di_time DOIF ([[Dum_wakeUpLightTime]])(set lamp on)
attr di_time do always
attr di_time room test
define Dum_wakeUpLightTime dummy
attr Dum_wakeUpLightTime alias Wakeup Light Zeit
attr Dum_wakeUpLightTime group Licht EG
attr Dum_wakeUpLightTime icon light_on-for-timer
attr Dum_wakeUpLightTime room test
attr Dum_wakeUpLightTime setList state:time
attr Dum_wakeUpLightTime webCmd state
define lamp dummy
attr lamp room test
attr lamp webCmd on:off
Mehr helfen kann ich nicht.
@knopf_piano: ich glaube, Du hast nicht gelesen/verstanden, was sein Problem ist. Das Problem liegt im Dummy. Teste selbst mit deiner Definition:
define Dum_wakeUpLightTime dummy
attr Dum_wakeUpLightTime alias Wakeup Light Zeit
attr Dum_wakeUpLightTime group Licht EG
attr Dum_wakeUpLightTime icon light_on-for-timer
attr Dum_wakeUpLightTime room test
attr Dum_wakeUpLightTime setList state:time
attr Dum_wakeUpLightTime webCmd state
Jetzt nutze bitte den Schieberegler neben "set" - SIEHE BILD, rot markiert - klicke dann auf "set" und guck mal was Du dann im STATE des Dummy hast - blau markiert: statt das erwartete "12:50", das mit dem DOIF funktionieren würde, steht "state 12:50", was das DOIF nicht mag.
Bild mit der blaue Markierung...
Zitat von: amenomade am 20 November 2017, 09:21:38
Bild mit der blaue Markierung...
@amenomade: Herzlichsten Dank - Du hast meine Tag gerettet und mir die fehlenden Puzzelsteine gegeben :)
Ich hatte in der GUI immer das Problem, dass ich nicht auf das "-" geklickt habe und da hat sich im Dummy natürlich nix geändert (Enter hilft ja auch nicht). Deswegen hab ich die Schieberegler beim SET verwendet und hab mir so das Prolbem wohl selbst gemacht.
Ist es eigentlich gewollt, dass die GUI hier anders arbeitet als der SET-Befehl - oder ist das ein Bug??
ah so,
aber warum will man das so machen?
Zitat von: amenomade am 20 November 2017, 08:30:34
@accessburn: mit [time] = "state 08:00" bestimmt nicht.
Hast recht, falsch herum gedacht. Ich hatte ähnliches Probleme mit dem setzen eines ATs aus FTUI heraus.
Ich nehme alles zurück und behaupte das Gegenteil :-D
Zitat von: knopf_piano am 20 November 2017, 09:29:49
aber warum will man das so machen?
Gute Frage - scheint mir persönlich ein schöner Weg die Konfiguration (welche aus mehreren Werten (Dummies) besteht) in der GUI darzustellen und editierbar zu machen.
Zumindest ist das der Weg, den ich aktuell kenne - mag also bedeuten, dass es da noch viele andere Wege zum Ziel gibt die ich nicht kenne.
Zitat von: litronics am 20 November 2017, 10:58:54
Gute Frage - scheint mir persönlich ein schöner Weg die Konfiguration (welche aus mehreren Werten (Dummies) besteht) in der GUI darzustellen und editierbar zu machen.
Zumindest ist das der Weg, den ich aktuell kenne - mag also bedeuten, dass es da noch viele andere Wege zum Ziel gibt die ich nicht kenne.
nene, falsch ausgedrückt, ich meinte, warum man im dummy-device für die Zeitauswahl "set" anwendet, um die Zeit einzustellen. Das ist doch im FHEMWEB nicht sichtbar.
Ich vermute, du wußtest nicht, dass du +/- für die Zeitübernahme bemühen musst, daher dein Weg über das "set".
Ja, das ist unschön bzw. verwirrend, dass dann "state xx:xx" drin steht.
Zitat von: knopf_piano am 20 November 2017, 12:07:36
nene, falsch ausgedrückt, ich meinte, warum man im dummy-device für die Zeitauswahl "set" anwendet, um die Zeit einzustellen. Das ist doch im FHEMWEB nicht sichtbar.
Ich vermute, du wußtest nicht, dass du +/- für die Zeitübernahme bemühen musst, daher dein Weg über das "set".
Ja, das ist unschön bzw. verwirrend, dass dann "state xx:xx" drin steht.
Ja wenn das die Frage war hast Du den Nagel auf den Kopf getroffen :)
Ich hab nie auf "-" geklickt und damit hat sich auch nix verstellt.
Das ist an der Stelle echt suboptimal gelöst :(