Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

#105
Zitat von: Groby am 01 Juli 2014, 15:36:31
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


Wenn du jetzt die Syntax von DOIF im Schlaf beherrschst, dann kannst du elegant auch den IF-Befehl nutzen :)

(set Message 1,IF ([M1] ne "") (delete MI), define MI at +00:00:01 trigger Message *)

Gruß

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

satprofi

Wie verhält sich DOIF wenn man statt "and" "or" verwendet?
Könnte man dann DOELSIF weglassen?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

herrmannj

Zitat von: Damian am 01 Juli 2014, 12:49:14
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:


fhem unterbindet die loop

vg
jörg

Damian

Zitat von: satprofi am 01 Juli 2014, 15:59:34
Wie verhält sich DOIF wenn man statt "and" "or" verwendet?
Könnte man dann DOELSIF weglassen?

Es kommt darauf an was du definiert hast. Wenn DOIF-Fall etwas anderes macht, als der DOELSEIF-Fall, dann natürlich nicht.

Gruß

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

satprofi

kurze nachfrage bzgl. attr wait 300:300

bedeutet das nach eintreffen eines triggers fix 300sec gewartet wird oder dazwischen trotzdem noch geprüft wird.
beispiel: ein event fällt unter einen wert, jetzt kommt trigger, innerhalb der wartezeit steigt wert aber wieder an, und bedingung wäre weiterhin erfüllt. bleibt dann alles beim alten oder wird trotzdem geschalten?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Groby

Damian,

Zitat von: Damian am 01 Juli 2014, 15:45:21
Wenn du jetzt die Syntax von DOIF im Schlaf beherrschst, dann kannst du elegant auch den IF-Befehl nutzen :)

(set Message 1,IF ([M1] ne "") (delete MI), define MI at +00:00:01 trigger Message *)


theoretisch ja -> praktisch leider nein:

DI_RolloBuero DOIF: unknown Device: M1


Außerdem habe ich beim Rumspielen mit "define" ein Problem beim Parsen von DOIF gefunden, sodass ich sogar "shutdown restart" machen musste. Also irgendetwas mit "{}" "()" ";;" usw. muss das ausgelöst haben:

2014.07.01 15:10:56.254 3: Garage_timer: unknown attribute Message. Type 'attr Garage_timer ?' for a detailed list. -> hat nichts damit zu tun!!!!
2014.07.01 15:10:16.124 3: M1: unknown attribute Message. Type 'attr MI ?' for a detailed list. -> x.ter DOIF Versuch


MfGroby

Damian

#111
Zitat von: satprofi am 01 Juli 2014, 16:59:41
kurze nachfrage bzgl. attr wait 300:300

bedeutet das nach eintreffen eines triggers fix 300sec gewartet wird oder dazwischen trotzdem noch geprüft wird.
beispiel: ein event fällt unter einen wert, jetzt kommt trigger, innerhalb der wartezeit steigt wert aber wieder an, und bedingung wäre weiterhin erfüllt. bleibt dann alles beim alten oder wird trotzdem geschalten?

Wenn die Bedingung für cmd1 wahr wird, dann wird der timer auf 300 Sekunden gesetzt (erste Angabe bei wait), wenn vor dem Ablauf durch einen Trigger wieder cmd1 wahr wird, dann wird timer nicht verlängert. Wenn vor dem Ablauf Bedingung für cmd2 wahr wird, dann wird der Timer für cmd1 gelöscht und der Timer für cmd2 gestartet (zweite Angabe bei wait), falls definiert, wie bei dir, usw. Auf diese Weise lässt sich das erreichen, was man sonst über watchdog machen würde.

Gruß

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

Damian

#112
Zitat von: Groby am 01 Juli 2014, 17:04:45
Damian,

theoretisch ja -> praktisch leider nein:

DI_RolloBuero DOIF: unknown Device: M1


Außerdem habe ich beim Rumspielen mit "define" ein Problem beim Parsen von DOIF gefunden, sodass ich sogar "shutdown restart" machen musste. Also irgendetwas mit "{}" "()" ";;" usw. muss das ausgelöst haben:

2014.07.01 15:10:56.254 3: Garage_timer: unknown attribute Message. Type 'attr Garage_timer ?' for a detailed list. -> hat nichts damit zu tun!!!!
2014.07.01 15:10:16.124 3: M1: unknown attribute Message. Type 'attr MI ?' for a detailed list. -> x.ter DOIF Versuch


MfGroby

Ja, in diesem Fall habe ich tatsächlich IF zu streng programmiert ;)

Wenn der Parser-Fehler nachvollziehbar ist, dann kann ich erst etwas unternehmen.

Dann wollen wir mal hoffen, dass die gröbsten Dinger raus sind, bevor ich mich nächste Woche in Urlaub begebe ;)

Gruß

Damian



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

satprofi

Zitat von: Damian am 01 Juli 2014, 17:28:03
Wenn die Bedingung für cmd1 wahr wird, dann wird der timer auf 300 Sekunden gesetzt (erste Angabe bei wait), wenn vor dem Ablauf durch einen Trigger wieder cmd1 wahr wird, dann wird timer nicht verlängert. Wenn vor dem Ablauf Bedingung für cmd2 wahr wird, dann wird der Timer für cmd1 gelöscht und der Timer für cmd2 gestartet (zweite Angabe bei wait), falls definiert, wie bei dir, usw. Auf diese Weise lässt das erreichen, was man sonst über watchdog machen würde.

Gruß

Damian

hallo.
dann muss etwas falsch sein

([Heizungsmode] eq "off" and [Pac] > 1500 and [HZ_Wohnzimmer_Weather] > 20 and [Terassentuer] eq "Closed" and $hms gt "10:00" and $hms lt "18:00") (set Klima_WZ off) DOELSEIF ([Heizungsmode] eq "auto" and [Pac] > 1500 and [HZ_Wohnzimmer_Weather] < 24.5 and [Terassentuer] eq "Closed") (set Klima_WZ off) DOELSE (set Klima_WZ on)


attr wait 300:300:300

aber es wartet nicht mal die 5 min ab,   last_cmd_event Pac 2014-07-01 17:38:37  , und um 17:40 wurde geschalten.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Groby

Zitat von: Damian am 01 Juli 2014, 17:35:37
Wenn der Parser-Fehler nachvollziehbar ist, dann kann ich erst etwas unternehmen.

Ich versuche das morgen nochmal nachzustellen. /Groby

PS: Mit dem DOIF Modul hast Du Dir den Urlaub redlich verdient. Aber Du kannst ja ggf. noch eine Schippe drauf legen ;)

Damian

#115
Zitat von: satprofi am 01 Juli 2014, 17:43:27


aber es wartet nicht mal die 5 min ab,   last_cmd_event Pac 2014-07-01 17:38:37  , und um 17:40 wurde geschalten.

last_cmd_event ist das letzte Event, welches auch tatsächlich zur Ausführung geführt hat. Events, die den Sleeptimer setzen werden nicht angezeigt.

Bei bei mir kann ich keinen Fehler mit wait feststellen.

Gruß

Damian


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

Damian

Version 1.3 im ersten Post.

Jetzt mit zusätzlichem reading "next_wait_timer". Man kann jetzt erkennen, wann der wait-timer gesetzt wurde, wann er zuschlägt, für welches Kommando und von wem er ausgelöst wurde (siehe Screenshot).

Gruß

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

cruser1800

Hallo Damain,

ich habe seit Gestern Abend folgende Fehlermeldung in der FHEM.log

^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 3556.

Das einzige was ich Gestern neu gemacht habe war deine Version 1.2. Oder gibt es eine Idee was das sein könnte.

Danke Lutz

Jens_B

Zitatich habe seit Gestern Abend folgende Fehlermeldung in der FHEM.log

^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 3556.

Das einzige was ich Gestern neu gemacht habe war deine Version 1.2. Oder gibt es eine Idee was das sein könnte.

Das liegt möglicherweise daran, das Du irgendwo in einer oder mehreren Deiner Definitionen für einen regex Ausdruck nur "*" statt ".*" gesetzt hast.

Hat mit dem DOIF Modul zunächst erstmal nicht direkt was zu tun, möchte ich meinen.

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

kkoeniger

Wenn ich "attr disable 1" setze, so bleibt das letzte State unverändert entsprechend dem last_cmd stehen. Ware es nicht sinnvoller "disabled" anzuzeigen?
LG,
Karl