[gelöst] Twilight - Mittelwertberechnung & schalten von Lampen

Begonnen von Blackmore, 16 Juli 2015, 22:00:49

Vorheriges Thema - Nächstes Thema

Blackmore

Hi,

Ich hab eine kleine Funktion geschrieben: folgendes Passiert

Twilight gibt einen Helligkeitswert aus.
Dieser Wert wird mit einem Dummy verglichen
Ist der Twilight-Wert niedriger als der Dummy-Wert, wird die Lampe eingeschaltet...
Ist der Twilight-Wert höher als ein zweiter DummyWert, wird das Licht ausgeschaltet...

Weiterhin hab ich eine Fernbedienung, mit der ich das Licht direkt schalten kann...
Schalte ich diese Lampe nun über die FB, wird der Dummy-Wert und der momentan herrschende Lichtwert addiert, geteilt durch zwei, und wieder in den Dummy-Wert geschrieben...

klappt auch...

Nur - wenn Twilight das Licht einschaltet, glaubt das DOIF, das die Fernbedienung das LIcht geschaltet hat (set FS20-FB on) und der Mittelwert wird berechnet und gesetzt...

nun hab ich als Einschaltschwelle gesetzt 65% Lichtwert...
leider kann es passieren, das der Licht-Wert von 67.5 auf 62.5% fällt, und der Dummy-Wert wird berechnet und fällt... bis irgendwann erst bei absoluter Dunkelheit das Licht eingeschaltet wird...

wie kann ich das abfangen???


Wenn ich das Licht vorher über die Fernbedienung einschalte, setzt er den Einschaltwert auf den Mittelwert von voreingestelltem Schwellwert und derzeitigem Wert beim Einschalten....

wenn jetzt über Twilight eingeschaltet wird, verändert sich die Einschaltschwelle auch - und da Twilight nicht in einzelnen Prozenten errechnet wird, sondern immer erst grössere Schritte, läuft meine Einschaltschwelle langsam aber stetig nach unten...

Jemand eine Idee, wie man das unterbinden kann???

Code (hier mein DOIF:) Auswählen

define WoZi_Lampe1_DI
   DOIF ([Twilight:twilight]<[TwilightWoZi:TwilightWozi]) (set FS20_270001 on)
   DOELSEIF ([Twilight:twilight]>[TwilightWoZi1:TwilightWozi]) (set FS20_270001 off)


Code (hier mein Notify) Auswählen

define WoZi1_Lampe1_DI notify FS20_270001:on.* {\
   my $measuredTemp=((ReadingsVal("Twilight","twilight","45") + ReadingsVal("TwilightWoZi","TwilightWozi","45"))/2);;;;;;;;\
   my $measuredTemp1=(((ReadingsVal("Twilight","twilight","45") + ReadingsVal("TwilightWoZi","TwilightWozi","45"))/2)+5);;;;;;;;
   fhem("setreading TwilightWoZi TwilightWozi $measuredTemp;;setreading TwilightWoZi1 TwilightWozi $measuredTemp1")\
}


Derzeitiger Zustand:
Twilight - korrekt eingestellt auf meine Position
FS20 - 6 Kanal Fernbedienung, gepaired auf die Steckdose, FHEM hört sie mit
FS20 - Steckdose
zwei Dummys, einer Mit der Einschaltschwelle, einer mit der Ausschaltschwelle


bringt es was, wenn ich die Mittelwertberechnung ins DOIF mit einbringe, und nicht ins notify??? -> bringt nix - ich bekomm dann ja nicht mit, wann über die FB geschaltet wurde
In meinem Kopf ist es gerade etwas matschig...

Blackmore

Kann ich im FS20-FB-Notify irgendwie abfragen, wer das Notify gestartet hat???

also
if (FB sendet impuls) dann (ändere den Dummy)
sowie schalte die Lampen...

???

Blackmore

Hinbekommen:

Steckdose direkt in Fhem angelernt

Notify erstellt, welches ein EIN-Befehl der FS20-FB auswertet, mir den Einschaltschwelle verändert und die Lampe einschaltet
DOIF erstellt, welches mir aufgrund der Twilight-Daten die Steckdose direkt schaltet

Somit ist das Notify der FB aussen vor und reagiert nicht mehr auf das DOIF