Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

Jens_B

Zitatich habe folgendes DI definiert:

Code: [Auswählen]
($hms ge "06:00" and $hms le "08:15" and [Message] eq"0") (set Message 1) DOELSEIF
($hms ge "07:15" and $hms le "08:15" and [Message] eq"1") (set Message 2) DOELSEIF
($hms gt "08:15" and [Message] eq"2") (set Message 0)

Du solltest zwischen eq und den Anführungszeichen ein Leerzeichen machen. So wie es auch in den Beispielen gezeigt ist....

RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

Groby

Zitat von: Jens_B am 01 Juli 2014, 08:40:38
Du solltest zwischen eq und den Anführungszeichen ein Leerzeichen machen. So wie es auch in den Beispielen gezeigt ist....

Das erhöht nur den human-readable Faktor...

Jens_B

#92
na dann ... vielleicht muß dann noch das
attr DI do always

hinzugefügt werden? Damit auch immer getriggert wird?
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

Groby

Zitat von: Jens_B am 01 Juli 2014, 09:12:10
na dann ... vielleicht muß dann noch das
attr DI do always

hinzugefügt werden? Damit auch immer getriggert wird?

Das habe ich auch schon probiert aber DI triggert sich aber nicht selbst. Obwohl die nächste Bedingung durch Ausführung von cmd1 bereits wahr geworden ist. Sprich:

Message=0 -> DI set Message 1 -> danach bleibt Message=1

Erst ein manuelles "set Message 1" über die cmdline bewirkt DI "set Message 2" ausführt.


Jens_B

Hm, die Katze will sich anscheinend nicht selbst in den Schwanz beißen;)


Gesendet von meinem iPhone mit Tapatalk
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

Groby

Zitat von: Jens_B am 01 Juli 2014, 10:27:35
Hm, die Katze will sich anscheinend nicht selbst in den Schwanz beißen;)


Gesendet von meinem iPhone mit Tapatalk

Nicht ganz, da die einzelnen Bedingungen unterschiedlich sind...

Da [Message] aber Bestandteil aller Bedingungen ist, sollten m.E. die anderen Bedingungen aus diesem DI erneut geprüft werden. Entweder im gleichen Durchgang oder erneut triggern...

Damian

#96
Zitat von: Groby am 01 Juli 2014, 11:46:02
Nicht ganz, da die einzelnen Bedingungen unterschiedlich sind...

Da [Message] aber Bestandteil aller Bedingungen ist, sollten m.E. die anderen Bedingungen aus diesem DI erneut geprüft werden. Entweder im gleichen Durchgang oder erneut triggern...

Das selbst verursachte Event kommt beim Modul nicht an.

Womöglich wird so etwas von FHEM unterbunden (muss ich mir noch genau anschauen), ansonsten könnte man schnell Loops bauen derart:

define DI DOIF ([t_dummy]==0) (set t_dummy 1) DOELSE (set t_dummy 0)


Edit: Funktioniert übrigens beim notify genauso, denn bei:

define no notify t_dummy set t_dummy 1

wird t_dummy nur einmal auf 1 gesetzt, auch hier hättest du sonst schnell einen Endlos-Loop.

Gruß

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

sentinel1

Zitat von: Damian am 01 Juli 2014, 07:35:57
Zeitangaben werden immer täglich ausgeführt. Diese sind dann aber in Kombination mit anderen Bedingungen (z. B. $we) wahr oder eben nicht.

Es muss aber heißen $we und nicht &we - es ist eine Variable, genauso wie $hms für Zeitabfragen.

Gruß

Damian

Hallo,

ok,verstanden.
In meine def. ist schon $we geschrieben,habe mich nur hier beim schreiben vertippt.

Gruß
Claudiu

Groby

Zitat von: Damian am 01 Juli 2014, 12:49:14
Edit: Funktioniert übrigens beim notify genauso, denn bei:

define no notify t_dummy set t_dummy 1

wird t_dummy nur einmal auf 1 gesetzt, auch hier hättest du sonst schnell einen Endlos-Loop.


ohne entsprechende Filter ja, aber bei:


define no notify Message:(a) set Message b


Erzeugt ein set Message a über den notify ein set Message b inklusive der beiden Events...

MfGroby

Damian

Zitat von: Groby am 01 Juli 2014, 13:34:47
ohne entsprechende Filter ja, aber bei:


define no notify Message:(a) set Message b


Erzeugt ein set Message a über den notify ein set Message b inklusive der beiden Events...

MfGroby

ja, genauso wie beim DOIF wird man Event a und b im Event-Monitor sehen, das selbst erzeugte Event set Message b wird aber nicht mehr beim notify ankommen.

Gruß

Damian

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

Groby

Zitat von: Damian am 01 Juli 2014, 13:39:31
ja, genauso wie beim DOIF wird man Event a und b im Event-Monitor sehen, das selbst erzeugte Event set Message b wird aber nicht mehr beim notify ankommen.


stimmt.

Wirklich schade, denn es wäre das letzte Puzzle für die Rollo Steuerung "All-in-one" gewesen...

Damian

Zitat von: Groby am 01 Juli 2014, 13:50:46
stimmt.

Wirklich schade, denn es wäre das letzte Puzzle für die Rollo Steuerung "All-in-one" gewesen...

Das sind aber Mechanismen von FHEM, ich glaube nicht, dass sich Rudi auf Rekursionen einlässt. Dann dürfte die Hälfte der FHEM-Installationen loopen.

Gruß

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

Groby

Fehler:

2014.06.30 16:52:02.289 1: readingsUpdate(DI_RolloBuero,last_error,no error) missed to call readingsBeginUpdate first.


Zitat von: Damian am 30 Juni 2014, 19:34:10
Sollte nicht mehr kommen: Version 1.2 im ersten Post.

Der Fehler ist mit V1.2 behoben...

Groby

Zitat von: Damian am 01 Juli 2014, 13:52:50
Das sind aber Mechanismen von FHEM, ich glaube nicht, dass sich Rudi auf Rekursionen einlässt. Dann dürfte die Hälfte der FHEM-Installationen loopen.

Ich glaube eher nicht ;) Ist aber vielleicht auch besser so...

Dann müssen eben mehrere DOIF's herhalten - ob diese am Ende meine selbst geklöppelte Sub ablösen bleibt abzuwarten.

Trotzdem Danke fürs reinschauen...

MfGroby

Groby

Hallo Damian,

ich konnte es nicht lassen. Nicht schön, aber so geht's:


($hms ge"07:00" and $hms le"16:00" and [Message]eq"0")
(set Message 1,{if(Value("M1")ne""){fhem("delete MI")}},define MI at +00:00:01 trigger Message *) DOELSEIF

($hms ge"12:30" and $hms le"16:00" and [Message]eq"1")
(set Message 2,{if(Value("MI")ne""){fhem("delete MI")}},define MI at +00:00:01 trigger Message *) DOELSEIF

($hms gt"16:00" and [Message]ne"0")
(set Message 0,{if(Value("MI")ne""){fhem("delete MI")}},define MI at +00:00:01 trigger Message *)


Auf der FB7390 sogar ohne große Verzögerungen:


2014.07.01 15:28:13.827 4: dummy set Message 0 -> set per cmd line
2014.07.01 15:28:13.915 4: dummy set Message 1 -> set per DOIF
2014.07.01 15:28:14.977 4: dummy set Message 2 -> set per DOIF


MfGroby