Hauptmenü

DOIF Schaltproblem

Begonnen von Spartacus, 13 Juni 2017, 12:16:18

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich habe ein relativ einfaches und gut funktionierendes DOIF um die Funktion:

([23:00] and [?GA.ss.SA.Licht] eq "off")....
erweitert. Das ganze Modul sieht nun so aus:
defmod di.01.EG.wz.RO DOIF ((([23:00] and [?GA.ss.SA.Licht] eq "off") or \
  ([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel")) and [?switch.di.02.EG.wz.RO.dum] eq "on")\
(set EG.wz.RO.* closes)\
DOELSEIF\
([switch.di.02.EG.wz.RO.dum] eq "off")\
DOELSE
attr di.01.EG.wz.RO alias autom. Rolladen schließen
attr di.01.EG.wz.RO cmdState on|deaktiv|on
attr di.01.EG.wz.RO devStateIcon .*on:general_an@lightgreen .*off:general_aus@red .*deaktiv:general_aus@grey
attr di.01.EG.wz.RO disable 0
attr di.01.EG.wz.RO do resetwait
attr di.01.EG.wz.RO group Scripte
attr di.01.EG.wz.RO icon fts_shutter_down
attr di.01.EG.wz.RO room 01-Wohnzimmer
attr di.01.EG.wz.RO wait 120:0:0

setstate di.01.EG.wz.RO on
setstate di.01.EG.wz.RO 2017-06-10 23:00:00 Device GA.ss.SA.Licht
setstate di.01.EG.wz.RO 2017-06-10 23:02:01 cmd 1
setstate di.01.EG.wz.RO 2017-06-10 23:02:01 cmd_event GA.ss.SA.Licht
setstate di.01.EG.wz.RO 2017-06-10 23:02:01 cmd_nr 1
setstate di.01.EG.wz.RO 2017-06-10 23:00:00 e_GA.ss.SA.Licht_STATE off
setstate di.01.EG.wz.RO 2017-06-07 15:36:57 e_switch.di.02.EG.wz.RO.dum_STATE on
setstate di.01.EG.wz.RO 2017-06-10 23:02:01 state on
setstate di.01.EG.wz.RO 2017-06-12 23:00:00 timer_01_c01 13.06.2017 23:00:00
setstate di.01.EG.wz.RO 2017-06-10 23:02:00 wait_timer no timer


Hintergrund ist, dass in den Sommermonaten "GA.ss.SA.Licht" niemals den Zustand "on" annimmt und somit der Shutdown der Rollanden beim Zustandswechsel auf "off" nicht getriggert wird. Daher die Erweiterung im Falle, dass GA.ss.SA.Licht "off" bleibt.

Leider klappt das aber nicht und ich finde den Fehler nicht. Mein Test mit einer "Testzeit" (12:40) funktionierte einwandfrei. Aber gestern um 23:00 passierte nichts. Hat jemand eine Idee, wo ich hier nach dem Fehler suchen kann? Ich kann ihn nicht eingrenzen.
Christian
Allerdings triggert es nicht um 23:00
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Otto123

Hi,

das Ganze wird nicht mehr Zeit getriggert:
([23:00] and [?GA.ss.SA.Licht] eq "off") wird nach Deiner Aussage nicht wahr, damit wird der erste Klammer Ausdruck nur wahr wenn
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel") wahr wird.
nur dann und nur wenn auch noch dies wahr wird
[?switch.di.02.EG.wz.RO.dum] eq "on")
Wird das DOIF getriggert.

Das DOELSEIF  hat keinen Ausführungsteil - das ist sinnlos.
Der DOELSE Zweig ist leer, das ist meines Erachtens auch sinnlos.

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

Spartacus

Hi Otto,
danke für Deine Antwort, aber das kann nicht sein:

Ausdruck 1 (zeitgesteuert, nur wenn Licht = "off" ist)
([23:00] and [?GA.ss.SA.Licht] eq "off")
Ausdruck 2 (triggert wenn Licht von "on" auf "off" wechselt und es "dunkel" ist"):
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel")
Ausdruck 3 (Schalter muss auf "on" stehen):
[?switch.di.02.EG.wz.RO.dum] eq "on")

Somit:
(Ausdruck 1 or Ausdruck 2) and Ausdruck 3

Das sollte eigentlich passen. Passt aber nicht! Der zeitlicher Trigger wird nicht ausgelößt, Ausdruck 2 funktioniert tadellos.

Weiterhin:
Das DOELSEIF wird nur benutzt um den Automatikschalter "switch.di.02.EG.wz.RO.dum" zu triggern. Wenn ich diesen Softkey betätige,  kann ich "Audruck 1" ein bzw. ausschalten.
über DOELSE erzwinge ich nur den Modul-Status "on" bei eingeschaltetem  Automatikschalter.

Aber warum funktioniert meine Zeitsteuerung nicht. M.E. ist die Klammerung der Ausdrücke oben korrekt.

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Per

Zitat von: Otto123 am 13 Juni 2017, 12:53:47Das DOELSEIF  hat keinen Ausführungsteil - das ist sinnlos.
Der DOELSE Zweig ist leer, das ist meines Erachtens auch sinnlos.
Passt schon:
Zitat von: Spartacus am 13 Juni 2017, 12:16:18
attr di.01.EG.wz.RO cmdState on|deaktiv|on
attr di.01.EG.wz.RO devStateIcon .*on:general_an@lightgreen .*off:general_aus@red .*deaktiv:general_aus@grey

@Spartacus: trenn doch DOIF (a or b) and c zum testen in DOIF (a and c) DOELSEIF (b and c) und lass beim ersten Teil auch das wait (0:120:0:0) weg.

Spartacus

Hallo Per,
danke für die Antwort.
Du meinst dann quasi so:
defmod di.01.EG.wz.RO DOIF
([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on") \
(set EG.wz.RO.* closes)\
DOELSEIF \
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel" and [?switch.di.02.EG.wz.RO.dum] eq "on")\
(set EG.wz.RO.* closes)\
DOELSEIF\
([switch.di.02.EG.wz.RO.dum] eq "off")\
DOELSE
attr di.01.EG.wz.RO alias autom. Rolladen schließen
attr di.01.EG.wz.RO cmdState on|on|deaktiv|on
attr di.01.EG.wz.RO devStateIcon .*on:general_an@lightgreen .*on:general_an@lightgreen .*off:general_aus@red .*deaktiv:general_aus@grey
attr di.01.EG.wz.RO disable 0
attr di.01.EG.wz.RO do resetwait
attr di.01.EG.wz.RO group Scripte
attr di.01.EG.wz.RO icon fts_shutter_down
attr di.01.EG.wz.RO room 01-Wohnzimmer
attr di.01.EG.wz.RO wait 0:120:0:0

setstate di.01.EG.wz.RO initialized
setstate di.01.EG.wz.RO 2017-06-13 15:05:37 cmd 0
setstate di.01.EG.wz.RO 2017-06-13 15:05:37 state initialized
setstate di.01.EG.wz.RO 2017-06-13 15:05:38 timer_01_c01 13.06.2017 23:00:00


Ich hatte auch schon das Gefühl, dass die Zeitverzögerung in Verbindung mit "do resetwait" etwas damit zu tun hat. Allerdings wollte ich vermeiden, dass ich zwei Mal den Ausführungsteil
(set EG.wz.RO.* closes)
in einem DOIF habe. Ich dachte immer, das wäre nicht sauber!

Aber schauen wir mal, was heute um 23:00 passiert.
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

amenomade

#5
So wie du es jetzt geschrieben hast, bedeutet es :
- Um 23:00, prüf mal, ob Licht off ist und ob RO.dum ist on. Wenn dann, warte 120 sec und  close.
- Ansonsten, wenn Licht off wird, prüf ob Tageslich dunkel und RO.dum on. Wenn dann, close sofort

do resetwait hat m.A., deine Bedingungen angenommen, wenig Sinn: wenn es innerhalb der 120 sekunden entweder wieder 23:00 Uhr wird, warte wieder 120 sec, und wenn innerhalb der 120 sec Licht off wird, prüf ob Tageslicht dunkel und RO.dum on und wenn dann close.

Das Wait könnte sich man sparen... wofür ist es gedacht?

Das ganze sieht komisch aus. Bin mir nicht sicher, dass es ist, was du willst. Was Du willst ist: (wenn Licht off wird, und es ist dann dunkel), aber (spätestens um 23:00 Uhr, wenn Light off ist,) close. Oder?
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

Zitat von: Spartacus am 13 Juni 2017, 15:12:02Du meinst dann quasi so:
Ja, aber:
Zitat von: Spartacus am 13 Juni 2017, 15:12:02
attr di.01.EG.wz.RO cmdState on|on|deaktiv|on
...
devStateIcon .*on:general_an@lightgreen .*on:general_an@lightgreen .*off:general_aus@red .*deaktiv:general_aus@grey
ein Off-Symbol, aber kein Off-Status?

Zitat von: Spartacus am 13 Juni 2017, 15:12:02Ich dachte immer, das wäre nicht sauber!
Wenn es einen triftigen Grund dafür gibt, warum nicht. Kannst ja auch mit
set $SELF cmd_2
arbeiten, dann überspringst du das wait auch. Da wir hier aber eh nur testen...

Zitat von: amenomade am 13 Juni 2017, 16:29:03do resetwait hat m.A., deine Bedingungen angenommen, wenig Sinn
Guter Einwand!!

amenomade

#7
Ich würde einfach schreiben:
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel" and [?switch.di.02.EG.wz.RO.dum] eq "on")
     (close)
DOELSEIF ([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on")
     (close)

attr do always

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

amenomade

#8
Das do always, nur wenn dein Licht nur "on" und "off" Events generiert, und nicht auch battery oder was auch immer; ansonsten musst Du ([GA.ss.SA.Licht:"off"] and ... schreiben
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Spartacus

#9
Hallo zusammen,
erst einmal vielen Dank für die rege Beteiligung an meinem Problem. Ich will mal versuchen, die Funktionsweise zu erklären, da dies m.E. noch nicht klar geworden ist. Kann sein, dass ich wieder viel zu kompliziert gedacht habe:

Was soll mit der DOIF-Funktion erreicht werden!
Es gibt neben einer Lichtautomatik für den Aktor "GA.ss.SA.Licht" einen mechanischen Schalter der das Licht "GA.ss.SA.Licht" ein und ausschalten kann.

  • Wenn das Licht brennt, sollen die Rolladen (EG.wz.RO.*) nicht schließen.
  • Tageslicht = "dunkel" verhindert, dass die Rolladen tagsüber schließen, falls man bei schlechter Tagsicht (Gewitter) das Licht ein-/ausschaltet
  • Das Licht geht später am Abend per "fhem" - Automatik -je nach Wochentag, Ferientag, Feiertag, etc.- automatisch aus.
  • Die Rolladen sollen dann 120s zeigverzögert schließen
  • Wird das Licht innerhalb dieser 120s wieder eingeschaltet (z.B. über den mech. Schalter, da ich noch keinen Bock habe ins Bett zu gehen) wird das "wait" im DOIF zurückgesetzt und die Rolladen schließen nicht
  • Der Softschalter "switch.di.02.EG.wz.RO.dum" schaltet die ganze DOIF Automatik ab
  • In fhem wird die aktive DOIF-Automatik mit ".*on:general_an@lightgreenSymbol" angezeigt
  • die deaktivierte DOIF-Automatik wird mit ".*deaktiv:general_aus@grey" angezeigt; ("off" gibt es hier eigentlich nicht)

Soweit die Funktion, die schon seit 2 Jahren einwandfrei läuft.

Was kommt neu hinzu, und warum!
Die Lichtautomatik ist zusätzlich vom Sonnenstand abhängig. D.h. wird es im Sommer zu spät dunkel, schaltet das Licht nicht mehr ein. Dadurch wird verhindert, dass die Rolladen schließen.

Meine Idee:
Den Rolladen um 23:00 zu schließen, aber nur, wenn das Licht aus ist. Sollte die Lichtautomatik aktiv sein, brennt das Licht um 2300 Uhr, passiert nix. Dann würde später der "off"-Trigger von "GA.ss.SA.Licht" greifen.
Aber diese 23:00-Geschichte greift nicht.

Ich hoffe, mein Vorhaben ist nun klar geworden. Wie löse ich dies nun am Besten? Ist der zus. "23:00 Uhr - DOELSEIF"-Zweig hier die richtige Lösung?

Spartacus.


Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Otto123

#10
Hallo Christian,

Sorry, ich habe den ersten Ausdruck bzw. Deine Aussage genau falsch verstanden.

Die Sache mit dem leeren DOELSEIF und DOELSE verstehe ich dann wohl nicht - macht nix.  ;D

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

amenomade

Ich würde sagen (nicht getestet):

( [GA.ss.SA.Licht:"off"] and [?help.Tageslicht.dum] eq "dunkel" and [?switch.di.02.EG.wz.RO.dum] eq "on")
   (close)
DOELSEIF ([GA.ss.SA.Licht:"on"] )
DOELSEIF ([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on")
   (close)
do resetWait
do always
wait 120:0:0
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Spartacus

Hallo zusammen,
der Test mit meinem Code hat gestern schon mal funktioniert. Um 23:00 wurde close ausgeführt.
([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
DOELSEIF
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE
do resetwait
wait 0:120:0:0


Der Code sieht ja so ähnlich aus, wie der Code von amenomade.
Ich checke heute noch mal mit eingeschaltetem Licht und werde berichten.

@ amenomade:
do restwait und do always in einem DOIF? Kann man das machen? Ich dachte man kann das nur "entweder/oder" in dem Attribut einstellen? Habe ich etwas verpasst?
Danke und Gruß,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

amenomade

Ist eigentlich egal, da
Zitat von: CommandRefDas Attribut do resetwait impliziert eine beliebige Wiederholung wie do always.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Spartacus

Hallo zusammen,
jetzt bin ich total aufgeschmissen!
Es lief jetzt fast eine Woche reibungslos.
Die Rolladen führen um 23:00 herunter, wenn das Lich aus war,
wenn es zuvor eingeschaltet war, 2min zeitverzögert nach dem Ausschalten.
Alles so, wie es soll.

Seit vorgestern läuft dieser Teil der Anweisung nicht mehr:
([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
...

Es wurde nicht einmal ein fhem-Update gemacht. Es ist alles so, wie vor einer Woche.und ich bin ratlos.
Irgendwo ist in der Funktion ein Fehler, jemand noch einen Tipp für mich?

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Otto123

Hallo Christian,

mit einem list von Deinem DOIF würde man noch sehen wie die Readings stehen.

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

Spartacus

Hallo zusammen,
hier mal das Listing:
Internals:
   CFGFN      Config/01-Wohnzimmer.cfg
   DEF        ([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
DOELSEIF
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE
   NAME       di.01.EG.wz.RO
   NR         141
   NTFY_ORDER 50-di.01.EG.wz.RO
   STATE      on
   TYPE       DOIF
   Readings:
     2017-06-17 23:00:00   Device          GA.ss.SA.Licht
     2017-06-18 23:00:00   cmd             1
     2017-06-18 23:00:00   cmd_event       timer_1
     2017-06-18 23:00:00   cmd_nr          1
     2017-06-17 23:00:00   e_GA.ss.SA.Licht_STATE off
     2017-06-18 23:00:00   state           on
     2017-06-20 23:00:00   timer_01_c01    21.06.2017 23:00:00
     2017-06-17 23:02:00   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,0,$wday) and InternalDoIf($hash,'GA.ss.SA.Licht','STATE') eq "off" and InternalDoIf($hash,'switch.di.02.EG.wz.RO.dum','STATE') eq "on"
     1          InternalDoIf($hash,'GA.ss.SA.Licht','STATE') eq "off" and InternalDoIf($hash,'help.Tageslicht.dum','STATE') eq "dunkel" and InternalDoIf($hash,'switch.di.02.EG.wz.RO.dum','STATE') eq "on"
     2          InternalDoIf($hash,'switch.di.02.EG.wz.RO.dum','STATE') eq "off"
   Days:
   Devices:
     1           GA.ss.SA.Licht
     2           switch.di.02.EG.wz.RO.dum
     all         GA.ss.SA.Licht switch.di.02.EG.wz.RO.dum
   Do:
     0:
       0          set EG.wz.RO.* closes
     1:
       0          set EG.wz.RO.* closes
     2:
       0
     3:
       0
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice GA.ss.SA.Licht
     sleepsubtimer -1
     sleeptimer -1
     timerdev
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     timereventsState:
       state: off
     triggerEvents:
       timer_1
     triggerEventsState:
       state: off
   Internals:
     0           GA.ss.SA.Licht:STATE switch.di.02.EG.wz.RO.dum:STATE
     1           GA.ss.SA.Licht:STATE help.Tageslicht.dum:STATE switch.di.02.EG.wz.RO.dum:STATE
     2           switch.di.02.EG.wz.RO.dum:STATE
     all         GA.ss.SA.Licht:STATE switch.di.02.EG.wz.RO.dum:STATE help.Tageslicht.dum:STATE
   Interval:
   Itimer:
   Localtime:
     0          1498078800
   Readings:
   Realtime:
     0          23:00:00
   Regexp:
     0:
     1:
     2:
     All:
   State:
     State:
   Time:
     0          23:00:00
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Trigger:
   Triggertime:
     1498078800:
       localtime  1498078800
       Hash:
Attributes:
   alias      autom. Rolladen schließen
   cmdState   on|on|deaktiv|on
   devStateIcon .*on:general_an@lightgreen .*on:general_an@lightgreen .*off:general_aus@red .*deaktiv:general_aus@grey
   disable    0
   do         resetwait
   group      Scripte
   icon       fts_shutter_down
   room       01-Wohnzimmer
   wait       0:120:0:0


Vielleicht sehe ich den Wald vor Bäumen nicht!
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

amenomade

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

Spartacus

Hallo zusammen,
Zitat von: amenomade am 21 Juni 2017, 20:21:08
Ist switch.di.02.EG.wz.RO.dum immer noch auf "on"?
Ja, der Switch ist immer noch auf "on". "Switch.di.02.EG.wz.RO.dum" ist ein Softkey, der die ganze Mimik aktiviert, bzw. deaktiviert.

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

amenomade

Dann sollten  in dem Zustand  die Rolladen um 23:00 heute Abend, falls das Licht aus ist, runter gehen. Es kann aber sein, dass ich auch etwas nicht gesehen habe... frage mich aber was denn?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Spartacus

Hallo,
ja, genau so soll es sein und hätte es auch gestern und vorgestern sein müssen. Aber seit Sonntag 2300 funzt das irgendwie nicht mehr. Weiß der Geier warum!

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Otto123

Das DOIF steht aber noch im cmd 1 - da wird heute nix passieren.
Da fehlt jetzt do always?
Aber ich habe ja schon gesagt, ich verstehe es nicht, das mit DOELSEIF ohne Ausführungsteil und leeres DOELSE

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

amenomade

do resetwait sollte ähnlich reagieren wie do always oder?

Zitat von: CommandRef

    Das Attribut do resetwait impliziert eine beliebige Wiederholung wie do always.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Spartacus

Hallo zusammen,
ja, wie erwartet, hat es gestern nicht funktioniert. Irgendetwas ist da schief.
Ich kann das do resetwait jetzt mal gegen das do always austauschen und gucken was passiert.

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

nils_

wenn du das do always einbaust, wird es funktionieren.

dein DOIF steht in cmd 1 und wird da erstmal nicht rausgehen, es sei denn irgendeine andere bedingung wird wahr.
dann würde auch wieder um 23.00 Uhr zurück nach cmd 1 "gesprungen".


otto hat es nun schon mehrfach gesagt, prüf mal bitte was hier korrekterweise stehen sollte, weil so scheint was nicht zu stimmen:
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE


DOELSEIF -> nur abfrage, keinerleie aktion

das "leere" DOELSE würde eigentlich sonst dein do always "ersetzen".
ich vermute die ganze problematik kommt vom leeren ausführungsteil.
viele Wege in FHEM es gibt!

Spartacus

Hallo zusammen,

DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE


Dieser Ausdruck soll eigentlich bewirken, dass ich mit dem Softkey(siehe Screenshot Automatik) das ganze DOIF aktivieren und deaktivieren kann. Durch das DOELSEIF wird bei Betätigung des Switches  direkt getriggert und der Zustand des DOIFs wird korrekt angezeigt. (siehe Screenshot Frontend).

Wie kann ich das denn sonst machen?

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Otto123

Hi Christian,

schwierig zu verstehen ...
Aber ich würde vom Lösungsansatz her zunächst mal Automatik und Bedienung trennen. Ich würde nicht das DOIF vergewaltigen, danach sieht es mir irgendwie aus. Ich würde zunächst das DOIF so machen das es seine Funktion erfüllt und mit einem Dummy die Oberfläche gestalten. Wenn das alles geht, kann man überlegen ob man Dinge zusammenfassen kann.

Wen ich das richtig sehe, verwendest Du den DOELSEIF Zweig anstatt set di.01.EG.wz.RO disable?

Aber um mich da komplett rein zu denken und eine Vorschlag zu liefern erscheint es mir zu kompliziert und interessiert mich zu wenig und es ist zu warm.  ;D

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

Spartacus

Hallo,
ja, das kann ich verstehen. Bei uns ist es auch extrem warm. fhem zeigt mir gerade eine Außentemperatur von  36 Grad Celsius an und das um kurz vor 11.

Das mit dem aktivieren/deaktivieren ist doch ganz einfach. Ich versuche es noch einmal:

Nehmen wir mal an, ich editiere das DOIF. Dann schaltet dies nach dem Speichern in den Zustand "initialized"
Wenn ich jetzt den Softkey umschalte, dann triggert das DOIF direkt über diese Anweisung:
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")


Fall 1: Softkey geht von "on" auf "off" => "cmd3" greift und devstateIcon "Aus" wird angezeigt
Fall 2: Softkey geht von "off" auf "on" => "cmd4" greift und devstateIcon "Ein" wird angezeigt.

Mehr macht das DOELSEIF und das DOELSE am Ende nicht. Warum muss ein DOELSEIF einen Ausführungsteil haben?
Ist das so?

außerdem:
Bevor ich das 23:00 eingebaut hatte, lief der ganze Mist fast 1 Jahr lang ohne Probleme.
Christian


Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

amenomade

ZitatWarum muss ein DOELSEIF einen Ausführungsteil haben?
Muss nicht.
Dein einziges Problem ist m.A. die richtige Kombination wait / do resetwait / do always zu finden. Vielleicht fragen wir mal einfach  @Damian ;)

ZitatWenn das Licht brennt, sollen die Rolladen (EG.wz.RO.*) nicht schließen.
    Tageslicht = "dunkel" verhindert, dass die Rolladen tagsüber schließen, falls man bei schlechter Tagsicht (Gewitter) das Licht ein-/ausschaltet
    Das Licht geht später am Abend per "fhem" - Automatik -je nach Wochentag, Ferientag, Feiertag, etc.- automatisch aus.
    Die Rolladen sollen dann 120s zeigverzögert schließen
    Wird das Licht innerhalb dieser 120s wieder eingeschaltet (z.B. über den mech. Schalter, da ich noch keinen Bock habe ins Bett zu gehen) wird das "wait" im DOIF zurückgesetzt und die Rolladen schließen nicht
    Der Softschalter "switch.di.02.EG.wz.RO.dum" schaltet die ganze DOIF Automatik ab
    In fhem wird die aktive DOIF-Automatik mit ".*on:general_an@lightgreenSymbol" angezeigt
    die deaktivierte DOIF-Automatik wird mit ".*deaktiv:general_aus@grey" angezeigt; ("off" gibt es hier eigentlich nicht)

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 verwende auch einige DOIF ohne Ausführungsteil, um Status anzuzeigen, statt Dummies oder als "Translater" für verschiedene "kryptische" Befehle.
@Spartacus: verwende doch mal das neue DOIF mit den myReadings, da kannst du die Parameter schon im "testen".

Damian

So, ich habe mir das Problem genauer angeschaut. Ergebnis: it´s not a feature it´s a bug ;)

resetwait sollte wie always eine Wiederholung des selben Befehls erlauben - tut es auch, aber nur bei Events, bei Timern nicht.

Dieses Verhalten war offenbar vom Anfang an so - es ist wohl bisher nicht aufgefallen.

Dass es hier "immer" funktionierte, bedeutet nur dass "immer" die anderen Zustände zwischendurch kamen und damit ein Zustandswechsel garantiert war.

Hat es hier eine Bedeutung, dass du resetwait statt always nimmst? Wenn nicht, dann setze do always und es wird funktionieren.

Morgen gibt´s dann trotzdem ein Bugfix ;)

P.S. es ist durchaus ok Zustände ohne Ausführungsteil zu definieren, um verschiedene Zustände zu provozieren, wenn es vom Anwender so gewollt ist.



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

Spartacus

Hallo Damian,
danke für die schnelle Antwort. Prima, das das Problem lokalisiert ist. Ich habe es jetzt auf "do always" stehen und teste es heute Abend.
Komischerweise hat das Konstrukt in der letzten Woche sauber gelaufen. Nur seit Sonntag 2300 klemmt es und das Schließen der Rollade um 2300 verweigert.


Besten dank für Deinen Einsatz,
bis bald,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

amenomade

M.A. ist do resetwait nötig, um in der 2. Bedingung das Timer zurückzusetzen falls die gleiche Bedingung wiederholt wird.
ZitatWird das Licht innerhalb dieser 120s wieder eingeschaltet (z.B. über den mech. Schalter, da ich noch keinen Bock habe ins Bett zu gehen) wird das "wait" im DOIF zurückgesetzt und die Rolladen schließen nicht
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Spartacus

Hallo zusammen,
das Thema ist noch nicht erledigt. "Do resetwait" funktioniert nach dem Update nur bedingt.

Bis letzten Donnerstag wurde über die Uhrzeit getriggert, Freitag und Samstag über das Gartenlicht. Soweit funzte alles mit "resetwait"

Am Sonntag hätte wieder über die Uhrzeit getriggert werden müssen, doch es passierte nichts. Am Montag auch nicht. Daher habe ich am  Dienstag das DOIF auf "DO always" umgestellt.Dienstag Abend fuhr der Rolladen korrekt um 23:00 herunter. Am Mittwoch habe ich dann um ca. 22:30 Uhr das Licht manuell ein- und wieder ausgeschaltet. Der Verzögerungstimer startete wie gewünscht, und wurde auch nach dem erneuten Einschalten des Lichtes zurückgesetzt. Nach dem erneuten Ausschalten des Lichtes schlossen die Rolladen 2min zeitverzögert, wie gewünscht.

Auch heute (am Donnerstag) lief alles nach Plan. Um 23:00 (kein Licht) fuhr der Rolladen hinunter.

Fazit:
Mit dem "DO always" funktioniert bislang alles wie es soll. Das "Do resetwait" hat noch eine Macke.

Hier noch mal ein Listing des aktuellen codes:

Internals:
   CFGFN      Config/01-Wohnzimmer.cfg
   DEF        ([23:00] and [?GA.ss.SA.Licht] eq "off" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
DOELSEIF
([GA.ss.SA.Licht] eq "off" and [?help.Tageslicht.dum] eq "dunkel" and [?switch.di.02.EG.wz.RO.dum] eq "on")
(set EG.wz.RO.* closes)
DOELSEIF
([switch.di.02.EG.wz.RO.dum] eq "off")
DOELSE
   NAME       di.01.EG.wz.RO
   NR         141
   NTFY_ORDER 50-di.01.EG.wz.RO
   STATE      on
   TYPE       DOIF
   Readings:
     2017-06-28 22:33:01   Device          GA.ss.SA.Licht
     2017-06-29 23:00:00   cmd             1
     2017-06-29 23:00:00   cmd_event       timer_1
     2017-06-29 23:00:00   cmd_nr          1
     2017-06-28 22:33:01   e_GA.ss.SA.Licht_STATE off
     2017-06-22 10:42:55   e_switch.di.02.EG.wz.RO.dum_STATE on
     2017-06-29 23:00:00   state           on
     2017-06-29 23:00:00   timer_01_c01    30.06.2017 23:00:00
     2017-06-28 22:35:01   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,0,$wday) and InternalDoIf($hash,'GA.ss.SA.Licht','STATE') eq "off" and InternalDoIf($hash,'switch.di.02.EG.wz.RO.dum','STATE') eq "on"
     1          InternalDoIf($hash,'GA.ss.SA.Licht','STATE') eq "off" and InternalDoIf($hash,'help.Tageslicht.dum','STATE') eq "dunkel" and InternalDoIf($hash,'switch.di.02.EG.wz.RO.dum','STATE') eq "on"
     2          InternalDoIf($hash,'switch.di.02.EG.wz.RO.dum','STATE') eq "off"
   Days:
   Devices:
     1           GA.ss.SA.Licht
     2           switch.di.02.EG.wz.RO.dum
     all         GA.ss.SA.Licht switch.di.02.EG.wz.RO.dum
   Do:
     0:
       0          set EG.wz.RO.* closes
     1:
       0          set EG.wz.RO.* closes
     2:
       0
     3:
       0
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice GA.ss.SA.Licht
     sleepsubtimer -1
     sleeptimer -1
     timerdev
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     timereventsState:
       state: off
     triggerEvents:
       timer_1
     triggerEventsState:
       state: off
   Internals:
     0           GA.ss.SA.Licht:STATE switch.di.02.EG.wz.RO.dum:STATE
     1           GA.ss.SA.Licht:STATE help.Tageslicht.dum:STATE switch.di.02.EG.wz.RO.dum:STATE
     2           switch.di.02.EG.wz.RO.dum:STATE
     all         GA.ss.SA.Licht:STATE switch.di.02.EG.wz.RO.dum:STATE help.Tageslicht.dum:STATE
   Interval:
   Itimer:
   Localtime:
     0          1498856400
   Readings:
   Realtime:
     0          23:00:00
   Regexp:
     0:
     1:
     2:
     All:
   State:
     State:
   Time:
     0          23:00:00
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0  0
   Trigger:
   Triggertime:
     1498856400:
       localtime  1498856400
       Hash:
Attributes:
   alias      autom. Rolladen schließen
   cmdState   on|on|deaktiv|on
   devStateIcon .*on:general_an@lightgreen .*on:general_an@lightgreen .*off:general_aus@red .*deaktiv:general_aus@grey
   disable    0
   do         always
   group      Scripte
   icon       fts_shutter_down
   room       01-Wohnzimmer
   wait       0:120:0:0


Gruß,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

#34
Poste mal deine aktuelle DOIF-Version.

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

Spartacus

Hallo,
anbei die Version.
Gruß,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R