Hallo zusammen,
seit kurzen nenne ich einen HM-HM-LC-DW-WM DualWhite LED Dimmer mein eigen,
der sich Dank martinp876 auch problemlos in meine HM-Welt integrieren lies.
Jetzt möchte ich den LED-Controller verwenden um eine Konstantlichtregelung zu bauen,
bei der sich analog zum Sonnenstand Helligkeit und Lichtfarbe ändern (zumindest in grober
Näherung)
Das klappt soweit auch ganz gut - um es komplett dynamisch abbilden zu können müsste
man aber die ramptime aus dem pct Befehl auch als Variable
oder Perl Code setzen können. So In der Art:
DEF ([{sunrise("CIVIL")}])
(set eg_garderobe_HELLIGKEIT press)
(set eg_garderobe_HELLIGKEIT pct 40 0 {hms2secs(sunset_rel("CIVIL"))/2})
(set eg_gardedobe_FARBE pct 100 0 {hms2secs(sunset_rel("CIVIL"))/2})
(set eg_garderobe_HELLIGKEIT pct 5 {hms2secs(sunset_rel("NAUTIC"))})
DOELSEIF ([23:00])
(set eg_garderobe_HELLIGKEIT press)
Wobei das command (set eg_garderobe_HELLIGKEIT pct 5 {hms2secs(sunset_rel("NAUTIC"))})
über die Attribute wait und timerWithWait verzögert wird.
Attributes:
group Haussteuerung
room STEUERUNG
timerWithWait 1
wait 0,5,0,{hms2secs(sunset_rel("CIVIL"))/2}:0
Wie gesagt es funktioniert alles bis auf das setzen der ramptime.
Das Perl snipped für sich alleine liefert sauber die Sekunden zurück - nur als ramptime wird´s halt nicht ausgewertet.
Ist da nur die manuelle Angabe von Werten in Sekunde möglich oder gibt es einen Trick, so dass auch Perl Code
akzeptiert wird?
Bin gespannt auch Euer Feedback...
...wie jetzt ?
Hat wirklich niemand eine Idee wie ich die ramptime als Variable oder Perlcode setzen kann ?
Das kenne ich so gar nicht von diesem Forum ;)
Sonst hat man eher das Problem, sich für einen der vielen Vorschläge von Euch entscheiden zu müssen :)
Versuch's mal so:
DEF ([{sunrise("CIVIL")}])
(set eg_garderobe_HELLIGKEIT press)
((set eg_garderobe_HELLIGKEIT pct 40 0 {hms2secs(sunset_rel("CIVIL"))/2}))
((set eg_gardedobe_FARBE pct 100 0 {hms2secs(sunset_rel("CIVIL"))/2}))
((set eg_garderobe_HELLIGKEIT pct 5 {hms2secs(sunset_rel("NAUTIC"))}))
DOELSEIF ([23:00])
(set eg_garderobe_HELLIGKEIT press)
Wenn das auch nicht klappt, dann verschiebe die Frage in den richtigen Forums-Bereich (DOIF) da gibts dann vielleicht auch schneller eine richtige Antwort.
Hi TomLee,
danke für Dein Feedback.
Irgendwie stehe ich auf dem Schlauch und erkenne Deinen Änderungsvorschlag nicht.
Kannst Du mir dabei bitte etwas auf die Sprünge helfen?
ZitatWenn das auch nicht klappt, dann verschiebe die Frage in den richtigen Forums-Bereich (DOIF) da gibts dann vielleicht auch schneller eine richtige Antwort.
Ja - war mir nicht sicher wo das Thema hingehört. Das DOIF funktioniert ja.
Nur der Paramater für die
ramptime wird halt nicht interpertiert und statt dessen der Default Value gesetzt.
Und das ist imho ja eine Frage des HM Devices - oder liege ich damit falsch?
Keine Ahnung obs heute immer noch so klappt, habs nicht getestet, meine Suche nach deinem Problem hatte mich hierhin (https://forum.fhem.de/index.php/topic,34907.msg272202.html#msg272202) geführt.
...ahhh jetzt ja!
Jetzt sehe auch ich Deinen Änderungsvorschlag mit den zusätzlichen Klammern.
Aber wie im zitierten Thread schon geschrieben: Da sieht mal das Command vor lauter Klammern nicht mehr ;)
Unter dem Gesichtspunkt ist meineFrage im DOIF Forum wohl doch besser aufgehoben.
Hier mit Perlvariablen ohne jegliche Attribute im DOIF-Perl-Modus:
DOIF {if ([{sunrise("CIVIL")}]) {
my $ramptime1=hms2secs(sunset_rel("CIVIL"))/2;
my $ramptime2=hms2secs(sunset_rel("NAUTIC"));
fhem"set eg_garderobe_HELLIGKEIT press";
set_Exec("hell",5,"fhem\"set eg_garderobe_HELLIGKEIT pct 40 0 $reamptime1;set eg_gardedobe_FARBE pct 100 $ramptime1\""); # um 5 Sekunden verzögert
set_Exec("dunkel",5+$ramptime1,"fhem\"set eg_garderobe_HELLIGKEIT pct 5 $ramptime2\"") # verzögert um 5+$ramptime1
}
}
{if ([23:00]) {fhem"set eg_garderobe_HELLIGKEIT press"}}
Was hab ich gesagt
Zitat... vielleicht auch schneller eine richtige Antwort.
bei der Umsetzung auf die Schreibfehler in $ramptime1 achten 😉
:)
...werd´s morgen gleich mal testen und berichten.
@Damian: Danke auch für Deine prompte Unterstützung.
Auch wenn es jetzt halt ohne DOIF laufen muss ;)
Zitat von: TomLee am 18 September 2018, 16:35:25
Was hab ich gesagt
bei der Umsetzung auf die Schreibfehler in $ramptime1 achten 😉
Hab´s korrigiert :)
ZitatAuch wenn es jetzt halt ohne DOIF laufen muss ;)
Für Morgen:
Es ist weiterhin ein DOIF.
Zitat von: fast-eddy am 18 September 2018, 16:38:22
:)
...werd´s morgen gleich mal testen und berichten.
@Damian: Danke auch für Deine prompte Unterstützung.
Auch wenn es jetzt halt ohne DOIF laufen muss ;)
Warum ohne DOIF? Beides ist DOIF.
Der Vollständigkeit halber im DOIF-FHEM-Modus:
DEF ([{sunrise("CIVIL")}])
(set eg_garderobe_HELLIGKEIT press)
(set eg_garderobe_HELLIGKEIT pct 40 0 {(hms2secs(sunset_rel("CIVIL"))/2)} , set eg_gardedobe_FARBE pct 100 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_HELLIGKEIT pct 5 {(hms2secs(sunset_rel("NAUTIC")))})
DOELSEIF ([23:00])
(set eg_garderobe_HELLIGKEIT press)
timerWithWait 1
wait 0,5,{hms2secs(sunset_rel("CIVIL"))/2}
Ich habe eine Userreading, welches die Dauer des Sonnenunterganges enthält.
Im DOIF habe ich als Befehl
Zitat(set AquariumLicht 0 0 [ThailandSonne:ss_dauer])
...so hier mal das erste Feedback.
Das mit Eurer Hilfe gebaute DOIF scheint zumindest mal grundsätzlich zu tun was es soll - Siehe Logfile:
LOGFILE:
2018.09.19 08:30:00 3: CUL_HM set eg_garderobe_HELLIGKEIT pct 5
2018.09.19 08:30:05 3: CUL_HM set eg_garderobe_HELLIGKEIT pct 40 0 20817.5
2018.09.19 08:30:05 3: CUL_HM set eg_garderobe_FARBE pct 100 0 20817.5
Die Timestamps für die ramptime werden sauber in Sekunden umgerechnet und das Command für den LED Dimmer scheint OK.
Allerdings wird das ganze auf seiten des Devices nur initial getriggert und dann passiert erstmal nix oder nur merkwürdige Dinge.
Siehe EventLog:
EVENTLOG
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT level: set_5
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT set_5
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT trigLast: fhem:02
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT trigLast: fhem:02
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT deviceMsg: 99.5 (to vccu)
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT dim: down:99.5
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT level: 99.5
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT pct: 99.5
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT 99.5
2018-09-19 08:30:00 CUL_HM eg_garderobe_HELLIGKEIT timedOn: AUS
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT level: set_40
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT set_40
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT trigLast: fhem:02
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE level: set_100
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE set_100
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT trigLast: fhem:02
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE trigLast: fhem:02
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT deviceMsg: 5.5 (to vccu)
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT dim: up:5.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT level: 5.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT pct: 5.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT 5.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_HELLIGKEIT timedOn: AUS
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE trigLast: fhem:02
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE color: 0.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE deviceMsg: 0.5 (to vccu)
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE dim: up:0.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE level: 0.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE pct: 0.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE rgb: FF0700
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE 0.5
2018-09-19 08:30:05 CUL_HM eg_garderobe_FARBE timedOn: WARM
Auch aus dem List des DOIF kann ich nicht erkennen warum der Dimmer die Helligkeit auf 5.5 (!) setzt und dann erstmal nichts weiter passiert :
Internals:
DEF ([08:30])
(set eg_garderobe_HELLIGKEIT pct 5)
(set eg_garderobe_HELLIGKEIT pct 40 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_FARBE pct 100 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_HELLIGKEIT pct 5 {(hms2secs(sunset_rel("NAUTIC")))})
DOELSEIF ([23:00])
(set eg_garderobe_HELLIGKEIT off)
MODEL FHEM
NAME timer_LED_GARDEROBE
NR 503
NTFY_ORDER 50-timer_LED_GARDEROBE
STATE cmd_1_3
TYPE DOIF
READINGS:
2018-09-19 08:30:05 cmd 1.3
2018-09-19 08:30:05 cmd_event timer_1
2018-09-19 08:30:05 cmd_nr 1
2018-09-19 08:30:05 cmd_seqnr 3
2018-09-19 08:27:52 mode enabled
2018-09-19 08:30:05 state cmd_1_3
2018-09-19 08:30:00 timer_01_c01 20.09.2018 08:30:00
2018-09-19 08:27:52 timer_02_c02 19.09.2018 23:00:00
2018-09-19 08:30:05 wait_timer 19.09.2018 14:17:02 cmd_1_4 timer_1
Regex:
attr:
cmdState:
wait:
0:
0
5
5
{hms2secs(sunset_rel("CIVIL"))/2}
1:
0
waitdel:
condition:
0 DOIF_time_once($hash,0,$wday)
1 DOIF_time_once($hash,1,$wday)
days:
devices:
do:
0:
0 set eg_garderobe_HELLIGKEIT pct 5
1 set eg_garderobe_HELLIGKEIT pct 40 0 {(hms2secs(sunset_rel("CIVIL"))/2)}
2 set eg_garderobe_FARBE pct 100 0 {(hms2secs(sunset_rel("CIVIL"))/2)}
3 set eg_garderobe_HELLIGKEIT pct 5 {(hms2secs(sunset_rel("NAUTIC")))}
1:
0 set eg_garderobe_HELLIGKEIT off
2:
helper:
event timer_1
globalinit 1
last_timer 2
sleepdevice timer_1
sleepsubtimer 3
sleeptimer 0
timerdev
timerevent timer_1
timereventsState
triggerDev
triggerEventsState
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 3
cmd_event: timer_1
state: cmd_1_3
timerevents:
timer_1
triggerEvents:
timer_1
internals:
interval:
intervalfunc:
itimer:
localtime:
0 1537425000
1 1537390800
readings:
realtime:
0 08:30:00
1 23:00:00
time:
0 08:30:00
1 23:00:00
timeCond:
0 0
1 1
timer:
0 0
1 0
timers:
0 0
1 1
triggertime:
1537390800:
localtime 1537390800
hash:
1537425000:
localtime 1537425000
hash:
uiState:
uiTable:
Attributes:
group Haussteuerung
room STEUERUNG
timerWithWait 1
wait 0,5,5,{hms2secs(sunset_rel("CIVIL"))/2}:0
Hat einer von Euch noch ne zündende Idee?
Wenn man eine ganze Zahl durch 2 teilt, dann braucht man sich nicht zu wundern, wenn hinter dem Komma eine 5 steht :)
Moin Damian,
sag mal machst Du auch mal Forumpause? :)
Super Reaktionszeit - Danke dafür!
Aber ich stehe mal wieder suf dem Schlauch!
Ich teile doch nur die Ramptime durch zwei.
Der pct Wert wird initial auf 5 gesetzt und soll
dann über die ramptime hochgedimmt werden.
5.5 lässt vermuten, dass das einmalig um 0.5
passiert und dann stoppt,
Oder meinst Du was anderes?
Zitat von: fast-eddy am 19 September 2018, 09:28:15
Moin Damian,
sag mal machst Du auch mal Forumpause? :)
Super Reaktionszeit - Danke dafür!
Aber ich stehe mal wieder suf dem Schlauch!
Ich teile doch nur die Ramptime durch zwei.
Der pct Wert wird initial auf 5 gesetzt und soll
dann über die ramptime hochgedimmt werden.
5.5 lässt vermuten, dass das einmalig um 0.5
passiert und dann stoppt,
Oder meinst Du was anderes?
Die genaue Bedeutung der Parameter kenne ich nicht, ich meine natürlich nur den letzten Parameter, der ja als Ramptime berechnet wurde. Zum Rest kann ich nichts sagen.
OK - Das pct command hat 3 Parameter:
set pct p1 p2 p3
p1 gibt den Zielwert in % an
p2 die Einschaltdauer wobei 0=unendlich
p3 die ,,ramptime" setzt die Zeit in Sekunden in der der Zielwert (pct) erreicht werden soll.
Laut Logfile werden alle Parameter sauber gesetzt.
Das was dann laut Evenlog passiert macht für mich
aber keinen Sinn.
Hallo zusammen,
mittlerweile bin ich mir fast sicher, dass mich hier das Device
HM-HM-LC-DW-WM ärgern will.
Nach den Einträgen im Logfile werden alle commands korrekt ausgeführt und auch die Berechnung
der Parameter wird sauber ausgeführt:
Zitat2018.09.19 08:30:00 3: CUL_HM set eg_garderobe_HELLIGKEIT pct 5
2018.09.19 08:30:05 3: CUL_HM set eg_garderobe_HELLIGKEIT pct 40 0 20817.5
2018.09.19 08:30:05 3: CUL_HM set eg_garderobe_FARBE pct 100 0 20817.5
Da aber zeitnah auch einige Attack Alerts im Log auftauchen bin ich auf die Idee gekommen, dass das Device durch
das viele Testen vielleicht einen Speicherüberlauf hat (lokal werkelt dort ein kleiner Atmega Controller)
Zitat
2018.09.19 08:31:37 2: CUL_HM HM_59E794 attack:11F1234159E794020150CB47FFFF,11F1234159E7940202C8CB47FFFF:11E9FEE59E794010E
2018.09.19 08:32:06 2: CUL_HM HM_59E794 attack:11F1234159E794020150CB47FFFF,11F1234159E7940202C8CB47FFFF:11E9FEE59E794010E
2018.09.19 08:32:16 2: CUL_HM HM_59E794 attack:11F1234159E794020150CB47FFFF,11F1234159E7940202C8CB47FFFF:11E9FEE59E794010E
Daher habe ich mal alle Trigger, Settings usw. lokal zurückgesetzt. Und sie da - plötzlich lief das mit Eurer Hilfe gebaute DOIF und der
Regelprozess wie gewünscht. Leider nur für etwa 3 Stunden dann tauchen die attacks wieder auf und der Prozess stoppt.
Siehe List:
Internals:
DEF ([{sunrise("CIVIL")}])
(set eg_garderobe_HELLIGKEIT pct 5)
(set eg_garderobe_HELLIGKEIT pct 40 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_FARBE pct 100 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_HELLIGKEIT pct 5 {(hms2secs(sunset_rel("NAUTIC")))})
DOELSEIF ([23:00])
(set eg_garderobe_HELLIGKEIT off)
MODEL FHEM
NAME timer_LED_GARDEROBE
NR 503
NTFY_ORDER 50-timer_LED_GARDEROBE
STATE cmd_1_3
TYPE DOIF
READINGS:
2018-09-19 11:34:09 cmd 1.3
2018-09-19 11:34:09 cmd_event set_cmd_1
2018-09-19 11:34:09 cmd_nr 1
2018-09-19 11:34:09 cmd_seqnr 3
2018-09-19 11:33:32 mode enabled
2018-09-19 11:34:09 state cmd_1_3
2018-09-19 11:33:32 timer_01_c01 20.09.2018 06:37:26
2018-09-19 11:33:32 timer_02_c02 19.09.2018 23:00:00
2018-09-19 11:34:09 wait_timer 19.09.2018 15:49:05 cmd_1_4 set_cmd_1
Regex:
attr:
cmdState:
wait:
0:
0
5
5
{hms2secs(sunset_rel("CIVIL"))/2}
1:
0
waitdel:
condition:
0 DOIF_time_once($hash,0,$wday)
1 DOIF_time_once($hash,1,$wday)
days:
devices:
do:
0:
0 set eg_garderobe_HELLIGKEIT pct 5
1 set eg_garderobe_HELLIGKEIT pct 40 0 {(hms2secs(sunset_rel("CIVIL"))/2)}
2 set eg_garderobe_FARBE pct 100 0 {(hms2secs(sunset_rel("CIVIL"))/2)}
3 set eg_garderobe_HELLIGKEIT pct 5 {(hms2secs(sunset_rel("NAUTIC")))}
1:
0 set eg_garderobe_HELLIGKEIT off
2:
helper:
event
globalinit 1
last_timer 2
sleepdevice set_cmd_1
sleepsubtimer 3
sleeptimer 0
triggerDev
triggerEvents
triggerEventsState
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 3
cmd_event: set_cmd_1
state: cmd_1_3
intervalfunc:
itimer:
localtime:
0 1537418246
1 1537390800
realtime:
0 06:37:26
1 23:00:00
time:
0 {sunrise("CIVIL")}
1 23:00:00
timeCond:
0 0
1 1
timer:
0 0
1 0
timers:
0 0
1 1
triggertime:
1537390800:
localtime 1537390800
hash:
1537418246:
localtime 1537418246
hash:
uiState:
uiTable:
Attributes:
group Haussteuerung
room STEUERUNG
timerWithWait 1
wait 0,5,5,{hms2secs(sunset_rel("CIVIL"))/2}:0
Ich vermute, dass der lokale Prozessor auf dem LED Controller mit zu langen ramptimes d.h. zu vielen Schaltzyklen Probleme mit dem raren Speicher bekommt. Vielleicht ist da im entsprechenden HM-Modul aber ein Limit eingebaut oder große Werte (noch) nicht implementiert. Vielleicht kann uns da martinp876 weiterhelfen.
So ich noch mal - Es rennt....!
Das DOIF hatte ich ja mit Eurer Unterstützung recht schnell am Laufen - nur der Controller wollte nicht so recht mitspielen
und hat ganz komische Dinge gemacht. Zunächst dachte ich die Ramptimes wären limitiert oder der LED Controller sogar defekt.
Zumindest liesen die Blink Codes des Geräts darauf schließen.
Letztlich war es doch die im Controller verbaute CPU bzw. deren geringer Speicher. Durch das ganze Testen und ausprobieren habe
ich wohl den Speicher vollgeschrieben und das arme Ding zum Absturz gebracht. Mit Factory Reset und stromlos machen konnte ich
es überreden wieder seinen Job zu machen ;)
Jetzt habe ich hier eine schöne Lichtvoute im Flur, die analog zum Sonnenstand Lichttemperatur und Helligkeit nachführt - coole Sache!
Danke nochmals für alle die mitgedacht und debugged haben!
Und so sieht das ganze aus - für diejenigen die mal en Code Snipped für sowas suchen:
define timer_LED_GARDEROBE DOIF ([{sunrise("CIVIL")}])
(set eg_garderobe_HELLIGKEIT pct 5 0 2, set eg_garderobe_FARBE pct 5 0 0)
(set eg_garderobe_HELLIGKEIT pct 50 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_FARBE pct 80 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
(set eg_garderobe_HELLIGKEIT pct 10 0 {(hms2secs(sunset_rel("CIVIL")))})
(set eg_garderobe_FARBE pct 0 0 {(hms2secs(sunset_rel("CIVIL"))/2)})
DOELSEIF ([23:00])
(set eg_garderobe_HELLIGKEIT off)
attr timer_LED_GARDEROBE timerWithWait 1
attr timer_LED_GARDEROBE wait 0,5,5,{hms2secs(sunset_rel("NAUTIC"))/2},5:0
P.S. Ich weiss, dass ich die dedizierten set commands mehr FHEM Last erzeugen als kommaseparierte
aber das war mir fürs erste zu unübersichtlich. Wenn ich mal wieder Zeit übrig habe räum´ ich auf... :)
Zitat von: fast-eddy am 28 September 2018, 15:50:07So ich noch mal - Es rennt....!die dedizierten set commands mehr FHEM Last erzeugen als kommaseparierte
Da du mit wait arbeitest, wirst du noch ohne auskommen.