Lampe bei verschiedenen Lux-Werten ein- und ausschalten (Logik-Frage)

Begonnen von FunkOdyssey, 10 Januar 2020, 17:47:56

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Eigentlich nahm ich an, dass es ganz einfach ist, was ich hier vorhabe.
Ich habe eine Beleuchtungssteuerung bei mir angepasst und einen unterschiedlichen Wert fürs Einschalten und fürs Ausschalten hinterlegt.
Doch in der Praxis funktioniert das leider nicht richtig.

Der Code:

defmod di_lampe DOIF (\
[sensor:lux] < [?$SELF:P_luxOn,90]
)\
(\
set lampe on\
)\
DOELSEIF\
(\
[sensor:lux] > [?$SELF:P_luxOff,30] and\
)\
(\
set lampe off\
)\

attr di_lampe readingList P_luxOn,P_luxOff
attr di_lampe setList P_luxOn:selectnumbers,5,1,300,0,lin \
P_luxOff:selectnumbers,5,1,300,0,lin
attr di_lampe wait 180:180
attr di_lampe webCmd P_luxOn:P_luxOff

setstate di_lampe aktiv
setstate di_lampe 2020-01-05 09:48:21 P_luxOff 30
setstate di_lampe 2020-01-10 17:05:44 P_luxOn 90
setstate di_lampe 2020-01-10 17:34:29 cmd 0
setstate di_lampe 2020-01-10 17:34:29 mode enabled
setstate di_lampe 2020-01-10 17:34:29 state initialized


Es wird zwar ab 90 Lux eingeschaltet, aber leider auch erst bei 90 Lux ausgeschaltet. Geplant war hier jedoch 30 Lux als Schwelle.
Das Problem ist, dass cmd1 natürlich gültig ist, da der Lux-Wert ja auch weiterhin unter 90 Lux ist und somit die Bedingung <90 zutrifft.
Meine erste Idee war, die cmd-Reihenfolge zu tauschen. Doch dann wurde auch erst bei 30 Lux eingeschaltet. Also das gleiche Problem nur anders herum.

Ich könnte die Bedingungen natürlich über Zeiträume erweitern oder z.B. beim Einschalten $hms gt "15:00" aufnehmen. Damit wäre ich meine Probleme los, aber was ist, wenn es dann zwischen morgens und nachmittags spontan dunkel wird? Ich drehe mich also um Kreis. Kommt selten vor. Aber ich will die perfekte Lösung.

Ich könnte auch die Lux-Bereiche vergleichen.

CMD1:
Also einschalten wenn Lux < 30 UND Lux < 90
ODER einschalten, wenn < 30
=> passt

CMD2:
Und ausschalten wenn Lux > 30 UND Lux < 90
ODER ausschalten , wenn > 90
=> nicht schön, aber würde auch funktionieren.



Aber ist das wirklich so kompliziert? Eine normale helligkeitsgesteuerte Schaltung, die auf unterschiedliche Ein- und Ausschaltwerte reagiert?

amenomade

Ich würde so probieren:
([sensor:lux] < [?$SELF:P_luxOn,90] and [?sensor:lux] > [?$SELF:P_luxOff,30])
     (set lampe on)
DOELSEIF
([sensor:lux] > [?$SELF:P_luxOff,30] and [?sensor:lux] < [?$SELF:P_luxOn,90])
     (set lampe off)


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FunkOdyssey

Scheint wirklich nicht so einfach zu sein, oder?
Ich habe E-Mail-Benachrichtigungen zu deinen vorherigen und gelöschten Posts bekommen.
Dein obiger Vorschlag ist gut. Bedingt aber, dass die Sensoren keine Sprünge von >90 Lux auf < 30 Lux machen. Dann würde nicht geschaltet werden.

Es ist schon komisch. Als würde man die einfache Lösung übersehen.

Deinen gelöschten Vorschlag, den Lampenstatus bei den Bedingungen zu berücksichtigen, finde ich ganz gut. Warum hast du das gelöscht? Übersehe ich etwas?

Auch Versuche $cmd != 1 oder ähnlich zu berücksichtigen, sind sinnlos.

Hat noch jemand eine Idee?

amenomade

Zitat von: FunkOdyssey am 11 Januar 2020, 14:12:29
Bedingt aber, dass die Sensoren keine Sprünge von >90 Lux auf < 30 Lux machen. Dann würde nicht geschaltet werden.
Stimmt

Zitat von: FunkOdyssey am 11 Januar 2020, 14:12:29
Deinen gelöschten Vorschlag, den Lampenstatus bei den Bedingungen zu berücksichtigen, finde ich ganz gut. Warum hast du das gelöscht?
Weil das zum zyklischen ein/aus Schalten bringen würde
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per

Ich sehe bei der Aufgabenstellung nicht durch!
Der Sensor mißt was? Das Licht im Raum inkl. Lampen oder nur das Außenlicht?
Warum soll bei Helligkeit ein und bei Dunkelheit ausgeschaltet werden? Das widerspricht dem Sinn einer künstlichen Beleuchtung ein wenig.

FunkOdyssey

Hallo Per, kann das sein, dass du dich verguckt hast?
- sensor:lux ist der Luminanzwert eines Lichtsensors. Diese sind rund um das Haus und nicht im Bereich der Beleuchtung montiert.
- $SELF:P_luxOn und $SELF:P_luxOff sind nur Readings im DOIF.

Und wenn der Lux-Wert niedriger wird, so wird es dunkel. Also soll die Beleuchtung eingeschaltet werden.
Sobald der Wert aber wieder höher wird (z.B. morgens), soll die Beleuchtung wieder deaktiviert werden.
Eigentlich doch eine ganz einfach Aufgabenstellung.

Der Problem hierbei ist, dass ich neuerdings nicht mehr eine Schwelle für Ein- und Ausschaltung nutze, sondern das Ausschalten morgens etwas früher haben will.

Per

OK, jetzt habe ich es verstanden, habe die <> falschrum gelesen  :-[
Du könntest einen dritten und vierten Status einführen (<30 und >90), durch welche erst der die jeweilige Abfrage aktiviert wird:
defmod di_lampe DOIF ([sensor:lux] < 90 and [?$SELF:cmd] = 4)\
(set lampe on)\
DOELSEIF ([sensor:lux] > 30 and [?$SELF:cmd] = 3)\
(set lampe off)\
DOELSEIF ([sensor:lux] < 30)\
DOELSEIF ([sensor:lux] > 90)


Kleinere Syntaxfehler sind selbständig zu beheben, größere Denkfehler zurückzumelden ;)

FunkOdyssey

Danke, aber das setzt voraus, dass ein passender Wert auch zuvor kommen muss.
Ich werde aufgeben und einen Zeitpunkt in die Bedingungen mit einbauen:

and $hms gt "15:00"
and $hms lt "10:00"

amenomade

Etwas ähnliches wie Per wollte ich noch vorschlagen, aber ich hatte die Zeit nicht, um zu experimentieren.

Ich glaube, seine Definition erfüllt deine Wünsche. Es muss evtl. das erste Mal mit set DOIFname cmd_1 oder 2 oder 3 oder 4, ansonsten verpasst Du evtl. eine erste Schaltung. Aber danach sollte es problemlos funktionieren.

lux wird <90 und war vorher >90 => einschalten
lux wird >30 und war vorher <30 => ausschalten
lux <30 oder lux >90: passiert nichts
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus