Hallo,
der Fehler liegt bestimmt bei mir, aber ich verstehe es es nicht.
Ich habe folgendes DOIF:
Internals:
DEF ([Helligkeit:Lux] >25000) (set Sonnenstrahlung on) DOELSEIF ([Helligkeit:Lux] <20000) (set Sonnenstrahlung off)
MODEL FHEM
NAME Helligkeitdoif
NR 238
NTFY_ORDER 50-Helligkeitdoif
STATE cmd_2
TYPE DOIF
READINGS:
2018-06-05 12:38:47 Device Helligkeit
2018-06-05 07:27:03 cmd 2
2018-06-05 07:27:03 cmd_event Helligkeitdoif
2018-06-05 07:27:03 cmd_nr 2
2018-06-02 13:06:28 e_Helligkeit_Lux 18184.17
2018-04-12 13:05:53 mode enabled
2018-06-05 07:27:03 state cmd_2
Regex:
condition:
0 ReadingValDoIf($hash,'Helligkeit','Lux') >25000
1 ReadingValDoIf($hash,'Helligkeit','Lux') <20000
devices:
0 Helligkeit
1 Helligkeit
all Helligkeit
do:
0:
0 set Sonnenstrahlung on
1:
0 set Sonnenstrahlung off
2:
helper:
DOIF_Readings_events
DOIF_eventas
event Lux: 27437.50,Lux: 27437.50
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent Lux: 5820.83,Lux: 5820.83
triggerDev Helligkeit
timerevents:
Lux: 5820.83
Lux: 5820.83
timereventsState:
state: Lux: 5820.83
state: Lux: 5820.83
triggerEvents:
Lux: 27437.50
Lux: 27437.50
triggerEventsState:
state: Lux: 27437.50
state: Lux: 27437.50
internals:
itimer:
perlblock:
readings:
0 Helligkeit:Lux
1 Helligkeit:Lux
all Helligkeit:Lux
trigger:
uiState:
uiTable:
Attributes:
do always
room Unsorted
Leider sagt mir nicht alles i8n dem List etwas, aber
wie man sieht liegt die Helligkeit bei 27437.50.
Wieso steht das DOIF dann auf CMD2. Über 25.000 sollte doch eigentlich CMD1 aktiv werden.
Wenn ich dann auf
set Helligkeitdoif checkall
gehe, wird es aktualisiert und geht auf CMD1.
Warum funktioniert das nicht automatisch. Muss checkall als Attribut gesetzt sein. Warum?
Wie schon gesagt, bin ich sicher, dass der Fehler bei mir liegt, oder ich etwas falsch verstanden habe.
Aber was?
Die Commandref habe ich dazu natürlich gelesen, aber ich stehe -als relativer Anfänger- trotzdem auf dem Schlauch oder verstehe es nicht.
Der Helligkeitswert ändert sich doch und hat CMD2 aktiviert. Dann müsste es doch auch CMD2 aktivieren, wenn die Bedingung erfüllt ist und der Helligkeitswert die Schwelle übersteigt.
poste mal bitte noch ein list von "Helligkeit"
Zitat von: Frank_Huber am 05 Juni 2018, 13:11:23
poste mal bitte noch ein list von "Helligkeit"
Sehr gerne:
Internals:
DEF 192.168.178.63 80 espBridge ESP_Modul2_Reserve_Helligkeit
ESP_BUILD 140
ESP_SLEEP 0
ESP_UNIT 0
ESP_VERSION 9
HOST 192.168.178.63
IDENT ESP_Modul2_Reserve_Helligkeit
INTERVAL 300
IODev Pooltemperatur
IODevMissing 1
IODevName espBridge
LASTInputDev espBridge
MSGCNT 6
NAME Helligkeit
NOTIFYDEV global
NR 234
NTFY_ORDER 50-Helligkeit
PORT 80
STATE Lux: 35871.67
SUBTYPE device
TYPE ESPEasy
VERSION 1.39
espBridge_MSGCNT 6
espBridge_TIME 2018-06-05 13:20:50
READINGS:
2018-06-05 13:20:50 Lux 35871.67
2018-06-05 13:20:31 presence present
2018-06-05 13:20:50 state Lux: 35871.67
helper:
fpc 1528197024
pm:
Encode 1
JSON 1
received:
Lux 1528197650
Attributes:
IODev espBridge
Interval 300
devStateStyle style=color:orange
event-on-change-reading state,Lux,presence
group ESPEasy Device,Status,Wetter
presenceCheck 1
readingSwitchText 1
room 1.Start,3.Temperatur,7.Aussen,ESPEasy
setState 3
sortby 8
Hallo Jogi,
eigentlich alles richtig, deshalb nur Ideen:
do always brauchst Du in dem Fall eigentlich nicht.
Man sieht in deinem list -> 2018-06-02 13:06:28 e_Helligkeit_Lux 18184.17 und dann zwar sowas -> event Lux: 27437.50,Lux: 27437.50
Das kann ich nicht richtig interpretieren - kann es sein, dass zwar ein Event erzeugt wird der DOIF triggert (jedes Event des Gerätes Helligkeit triggert das DOIF und dann werden die Readings abgefragt) aber das Reading Lux hat zu dem Zeitpunkt noch den alten Wert? Der wird erst einen Mückensch... später geändert und DOIF ist schon vorbei gerannt?
Eventuell versuchst Du mal den Trigger nicht auf den state sondern wirklich auf den Event (https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events)? -> ([Helligkeit:"Lux"] >25000)
Gruß Otto
Hi,
Ja, da kann ich Otto nur Recht geben. Die verschiedenen Werte für Lux im DOF List verwundern.
Der Helligkeitssensor selbst schaut OK aus.
Loggst Du die Lux Werte? falls ja, wirf doch mal einen Blick ins Log, wenn da auch so sprunghafte Werteänderungen drin sind hat evtl der Sensor selbst was.
Generell würde ich auch sagen deine Konfig ist i.O. (bis auf das unnötige do always)
Halli Frank, hallo Otto,
vielen Dank für Eure Tipps, da habe ich einen Ansatz wo ich suchen muss.
Es könnte gut sein, dass mit dem Helligkeitssensor oder dem WEMOS-Modul was nicht stimmt, denn mir ist aufgefallen, dass er häufig auf "absent" geht, obwohl ich das System-info DEVICE im Espeasy definiert haben, das alle 120 Sekunden einen Status liefert.
Ich werde mal Step by Step Eure Tipps befolgen und das ganze checken.
Vielen Dank!
HI!
Ich hatte in den letzten Tagen auch Schwierigkeiten mit einem Lichtsensor... auf jeden fall sollte das doalways raus... dann hatte ich im Sensormodul noch ein event-on-change eingetragen und das hat alles verrückt gemacht.
Also würde ich versuchen das doalways rauszunehmen und schauen ob ein event-on-change im Helligkeitsmodul drin ist, den würde ich auch löschen.
An sonsten habe ich meinen Code so ziemlich genau so wie du und es funktioniert!
([LichtSensor:brightness] < 25.0 and [?TVTime:state] eq "off" and [?08:00-22:15]) (set WZBodenLed on,set WZEZ_WZFLed on)
DOELSEIF
([LichtSensor:brightness] > 25.0 and [?TVTime:state] eq "off" and [?08:00-22:15]) (set WZBodenLed off) (set WZEZ_WZFLed off)
Ach... sehe gerade... event-on-change im Helligkeitsmodul ist drin.. das hat mir ALLE meine DOIFS zerhackt die auf das Lichtmodul greifen! Gelöscht und nun geht es!
Sehe gerade noch das ich ein Leerzeichen zwischen > und dem Wert habe... vielleicht spielt das auch eine Rolle denn du hast KEIN Leerzeichen!
Einzige Problem ist das ich alle ca 30Sek einen Logeintrag des Schaltvorgangs bekomme weil sich der Helligkeitswert immer ändert... Dafür habe ich leider noch keine Lösung...
Zitat von: misux am 05 Juni 2018, 19:03:38Ach... sehe gerade... event-on-change im Helligkeitsmodul ist drin.. das hat mir ALLE meine DOIFS zerhackt die auf das Lichtmodul greifen!
Naja, du hattest eine spezielle Einstellung da drin, ein "normales" (.*) geht fast immer (außer z.B. Präsenzmelder, die nur "on" und kein Signal kennen).
Ich habe das gleiche Problem.
Auch mit einem ESPEasy.
Ich habe schon probiert mein DOIF auf das Event zu triggern also ([ESPEASY_Helligkeit:"Lux"] > 3800)
Leider ohne Erfolg
Ein Event on change reading habe ich nirgendwo verwendet. Weder im DOIF noch im Sensor.
Meine anderen DOIFs laufen aber
Was ich wohl gestern gemacht habe ist meine Alarmanlage zu löschen. Aber das dürfte damit wenig zu tun haben?
Wie Jogi schrieb kann auch ich per checkall bei Zutreffender Bedingung das DOIF dazu bringen cmd1 umzusetzen.
Triggere ich einen Dummy bzw. Trage dort einen Wert unter einem Reading Lux ein der höher liegt dann reagiert das DOIF genau so wie es soll.
Woran kann es liegen?
[ESPEASY_Helligkeit:"Lux"] ist eine Eventabfrage, die ist nur wahr oder falsch.
Ich denke, dass ESPEASY_Helligkeit kein Event für Lux liefert.
([ESPEASY_Helligkeit:Lux] > 3800)
sollte funktionieren, wenn man auf alle Events von ESPEASY_Helligkeit reagiert. Dafür muss man das Attribut checkReadingEvent 0 beim DOIF setzen.
Danke, das funktioniert wunderbar.
Steht ja eigentlich auch im WIKI. Danke also nochmal für die Antwort. Hätte ich im Prinzip auch selber lesen können.
Ich bin froh, dass wir hier jemand so kompetenten haben.