Sunrise variabel gestalten

Begonnen von wm1962, 07 April 2019, 13:30:42

Vorheriges Thema - Nächstes Thema

wm1962

Hallo,
ich möchte meine Sunrise- und Sunset-Funktionen über den zweiten Parameter (Offset) variabal gestalten.

dazu habe ich mir einen Slider "du_Sunrise_Delay" definiert:
define du_Sunrise_Delay dummy
attr du_Sunrise_Delay alias Sunrise Delay [min]:
attr du_Sunrise_Delay readingList state
attr du_Sunrise_Delay setList state:slider,-120,5,120


Bei Eingabe übers Web-GUI
define RolladenSunriseAuf_1 at *{sunrise("REAL",[du_Sunrise_Delay:state],"06:00","08:30")} set RollosEG open

kommt folgende FM:
Zitatthe function "sunrise("REAL",[du_Sunrise_Delay:state],"06:00","08:30")" must return a timespec and not syntax error at (eval 33185) line 1, near "du_Sunrise_Delay:"
.

Ändere ich die Definition auf
{sunrise("REAL",Value("du_Sunrise_Delay:state"),"06:00","08:30")} set RollosEG open

oder auch auf
{sunrise("REAL",Value("du_Sunrise_Delay"),"06:00","08:30")} set RollosEG open


kommt keine FM, das at wird zwar berechnet, aber es wird kein Offset dazuaddiert.

Ich habe mir auch schon das Thema unter https://forum.fhem.de/index.php/topic,58191.msg497127.html#msg497127 angeschaut, komme jedoch leider nicht weiter.

Kann mir das jemand weiterhelfen?
RPI 3 mit FHEM, 1x Stackable CUL (433MHz)

rudolfkoenig

Liefert
{ Value("du_Sunrise_Delay")}
das erwartete Ergebnis?
Ist bekannt, dass at den naechsten Zeitpunkt nur nach Ablauf der Aktuellen neu berechnet?
D.h. wenn man per slider die aktuelle Ausfuehrung aendern will, dann braucht man auch ein notfy, was modify auf das at macht.

wm1962

Hallo Herr König,

vielen Dank für die rasche Antwort.
Ich bin im Umgang mit FHEM noch nicht so fit. Könnten Sie mir noch erklären wie das  "notify auf das at" zu definieren wäre?

VG Wilfried
RPI 3 mit FHEM, 1x Stackable CUL (433MHz)

rudolfkoenig

define atNotify notify du_Sunrise_Delay modify RolladenSunriseAuf_1 *{sunrise("REAL",Value("du_Sunrise_Delay"),"06:00","08:30")}

Byte09

#4
anstatt für die gewünschte funktion x devices zu definieren könntest du auch alle in ein MSwitch packen. Kannst du dir mal anschauen , ist im grunde selbsterklärend , ansonsten hilft ein blick in das wiki.

die rawdefinition erstellt ein entsprechendes device im raum 1_test und sollte das gewünschte tun.

gruss Byte09


defmod flexat MSwitch flexat # FreeCmd MSwitch_Self
attr flexat MSwitch_Debug 0
attr flexat MSwitch_Delete_Delays 1
attr flexat MSwitch_Event_Id_Distributor delay:.*=>cmd1 ID 1\

attr flexat MSwitch_Expert 1
attr flexat MSwitch_Extensions 0
attr flexat MSwitch_Help 1
attr flexat MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr flexat MSwitch_Include_Devicecmds 1
attr flexat MSwitch_Include_MSwitchcmds 0
attr flexat MSwitch_Include_Webcmds 0
attr flexat MSwitch_Inforoom MSwitch
attr flexat MSwitch_Lock_Quickedit 1
attr flexat MSwitch_Mode Notify
attr flexat readingList delay
attr flexat room 1_test
attr flexat setList delay:slider,-3600,10,3600
attr flexat webCmd delay
attr flexat webCmdLabel sunrise_offset

setstate flexat active
setstate flexat 2019-04-08 05:50:53 .Device_Affected FreeCmd-AbsCmd1,MSwitch_Self-AbsCmd1
setstate flexat 2019-04-08 06:00:09 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]set#[sp]RollosEG#[sp]open#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]MSwitch_Self-AbsCmd1#[NF]reload_timer#[NF]no_action#[NF]#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]1#[NF]#[NF]1#[NF]0#[NF]1
setstate flexat 2019-04-08 05:38:07 .Device_Events delay:.*#[tr]no_trigger
setstate flexat 2019-04-08 05:19:35 .First_init done
setstate flexat 2019-04-08 05:38:02 .Trigger_cmd_off no_trigger
setstate flexat 2019-04-08 05:38:02 .Trigger_cmd_on delay:.*
setstate flexat 2019-04-08 06:01:33 .Trigger_condition
setstate flexat 2019-04-08 05:38:02 .Trigger_off no_trigger
setstate flexat 2019-04-08 05:38:02 .Trigger_on no_trigger
setstate flexat 2019-04-08 06:01:33 .Trigger_time on~off~ononly[{sunrise("REAL",ReadingsVal("flexat","delay",0),"06#[dp]00","08#[dp]30")}]~offonly~onoffonly
setstate flexat 2019-04-08 05:19:35 .V_Check V2.00
setstate flexat 2019-04-08 06:02:10 EVENT last_activation_by:event
setstate flexat 2019-04-08 06:02:10 EVTFULL flexat:last_activation_by:event
setstate flexat 2019-04-08 06:02:10 EVTPART1 flexat
setstate flexat 2019-04-08 06:02:10 EVTPART2 last_activation_by
setstate flexat 2019-04-08 06:02:10 EVTPART3 event
setstate flexat 2019-04-08 06:01:33 Trigger_device MSwitch_Self
setstate flexat 2019-04-08 05:38:02 Trigger_log off
setstate flexat 2019-04-08 06:02:10 delay 110
setstate flexat 2019-04-08 06:02:10 last_activation_by event
setstate flexat 2019-04-08 06:02:10 last_cmd 1
setstate flexat 2019-04-08 06:02:10 last_event last_activation_by:event
setstate flexat 2019-04-08 05:39:23 last_exec_cmd set flexat reload_timer
setstate flexat 2019-04-08 06:02:10 state active

Damian

Auszug aus der Commandref zu DOIF:

ZitatIndirekte Zeitangaben können auch als Übergabeparameter für Zeitfunktionen, wie z. B. sunset oder sunrise übergeben werden:

define di_time DOIF ([{sunrise(0,"[begin]","09:00")}-{sunset(0,"18:00","[end]")}]) (set lamp off) DOELSE (set lamp on)

Bei einer Änderung des angegebenen Status oder Readings wird die geänderte Zeit sofort im Modul aktualisiert.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

wm1962

@rudolfkoenig
Zitat von: rudolfkoenig am 07 April 2019, 13:36:58
Liefert
{ Value("du_Sunrise_Delay")}
das erwartete Ergebnis?
Leider nicht, da hatte ich mich zu früh gefreut, mit:
Zitat*{sunrise("REAL",{Value("du_Sunrise_Delay")},"06:00","08:30")} set RollosEG open
kommt im Log-File folgende FM:
2019.04.08 11:18:44 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 57) line 1.
2019.04.08 11:18:44 3: eval: {sunrise("REAL",{Value("du_Sunrise_Delay")},"06:00","08:30")}



@Damian
Zitat von: Damian am 08 April 2019, 08:18:20
Auszug aus der Commandref zu DOIF:
Leider auch nicht, mit:
Zitat*{sunrise("REAL","[du_Sunrise_Delay]","06:00","08:30")} set RollosEG open
kommt im Log-File folgende FM:
2019.04.08 11:21:32 1: PERL WARNING: Argument "[du_Sunrise_Delay]" isn't numeric in division (/) at ./FHEM/99_SUNRISE_EL.pm line 92.
2019.04.08 11:21:32 3: eval: {sunrise("REAL","[du_Sunrise_Delay]","06:00","08:30")}



@Byte09
Vielen Dank für deine ausführliche Anleitung,
ich habe mich jedoch an deine Lösung noch nicht herangewagt
RPI 3 mit FHEM, 1x Stackable CUL (433MHz)

wm1962

@Byte09

ich habe mich nun doch an den MSwitch gewagt.
Ich habe die Befehle wie von Dir vorgegeben in der Kommandozeile eingegeben, inkl. den Datumsangaben.
Bin mir nicht sicher, ob ich das richtig gemacht habe.

setstate flexat active
setstate flexat 2019-04-08 05:50:53 .Device_Affected FreeCmd-AbsCmd1,MSwitch_Self-AbsCmd1
setstate flexat 2019-04-08 06:00:09 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]set#[sp]RollosEG#[sp]open#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]MSwitch_Self-AbsCmd1#[NF]reload_timer#[NF]no_action#[NF]#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]1#[NF]#[NF]1#[NF]0#[NF]1
setstate flexat 2019-04-08 05:38:07 .Device_Events delay:.*#[tr]no_trigger
...
...


Kannst Du mir da weiterhelfen?
RPI 3 mit FHEM, 1x Stackable CUL (433MHz)

Damian

Zitat von: wm1962 link=topic=99409.msg928242#msg928242 date=15547168
color=red]@Damian[/color]Leider auch nicht, mit:kommt im Log-File folgende FM:
2019.04.08 11:21:32 1: PERL WARNING: Argument "[du_Sunrise_Delay]" isn't numeric in division (/) at ./FHEM/99_SUNRISE_EL.pm line 92.
2019.04.08 11:21:32 3: eval: {sunrise("REAL","[du_Sunrise_Delay]","06:00","08:30")}



du_Sunrise_Dalay muss eine Sekundenanzahl sein, Zahlen werden nicht in Anführungszeichen gesetzt, also:

DOIF ([{sunrise("REAL",[du_Sunrise_Delay],"06:00","08:30")}]) (set ....


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Byte09

#9
Zitat von: wm1962 am 08 April 2019, 16:55:23
@Byte09

ich habe mich nun doch an den MSwitch gewagt.
Ich habe die Befehle wie von Dir vorgegeben in der Kommandozeile eingegeben, inkl. den Datumsangaben.
Bin mir nicht sicher, ob ich das richtig gemacht habe.

setstate flexat active
setstate flexat 2019-04-08 05:50:53 .Device_Affected FreeCmd-AbsCmd1,MSwitch_Self-AbsCmd1
setstate flexat 2019-04-08 06:00:09 .Device_Affected_Details FreeCmd-AbsCmd1#[NF]cmd#[NF]cmd#[NF]set#[sp]RollosEG#[sp]open#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]0#[NF]#[NF]0#[NF]0#[NF]1#[ND]MSwitch_Self-AbsCmd1#[NF]reload_timer#[NF]no_action#[NF]#[NF]#[NF]delay1#[NF]delay1#[NF]00#[dp]00#[dp]00#[NF]00#[dp]00#[dp]00#[NF]#[NF]#[NF]0#[NF]0#[NF]1#[NF]1#[NF]#[NF]1#[NF]0#[NF]1
setstate flexat 2019-04-08 05:38:07 .Device_Events delay:.*#[tr]no_trigger
...
...


Kannst Du mir da weiterhelfen?

du musst sie nicht einzeln eingeben . es handelt sich um eine rawdefinition, die du komplett in einem rutsch importieren kannst ( und musst )

siehe hier : https://wiki.fhem.de/wiki/Import_von_Code_Snippets

gruss Byte09

wm1962

@Damian

wenn ich die Anführungszeichen weglasse
*{sunrise("REAL",[du_Sunrise_Delay],"06:00","08:30")} set RollosEG open ; set RolloTerrasse open

kommt die FM
the function "sunrise("REAL",[du_Sunrise_Delay],"06:00","08:30")" must return a timespec and not Bareword "du_Sunrise_Delay" not allowed while "strict subs" in use at (eval 3537) line 1.
.


Kann es sein dass DOIF anders arbeite als AT ?
RPI 3 mit FHEM, 1x Stackable CUL (433MHz)

Damian

Zitat von: wm1962 am 08 April 2019, 19:20:43
@Damian

wenn ich die Anführungszeichen weglasse
*{sunrise("REAL",[du_Sunrise_Delay],"06:00","08:30")} set RollosEG open ; set RolloTerrasse open

kommt die FM
the function "sunrise("REAL",[du_Sunrise_Delay],"06:00","08:30")" must return a timespec and not Bareword "du_Sunrise_Delay" not allowed while "strict subs" in use at (eval 3537) line 1.
.


Kann es sein dass DOIF anders arbeite als AT ?

ja, das kann sehr gut sein ;)

https://fhem.de/commandref_DE.html#DOIF

https://commandref.fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF