Hauptmenü

DOIF: Warum steht es auf CMD2?

Begonnen von Jogi, 05 Juni 2018, 12:46:11

Vorheriges Thema - Nächstes Thema

Jogi

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.

Frank_Huber

poste mal bitte noch ein list von "Helligkeit"

Jogi

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


Otto123

#3
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? -> ([Helligkeit:"Lux"] >25000)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frank_Huber

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)

Jogi

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!

misux

#6
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...

Per

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).

Skipper

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?

Damian

[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.



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

Skipper

#10
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.