FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 21 Mai 2014, 15:53:18

Titel: neues Modul DOIF
Beitrag von: Damian am 21 Mai 2014, 15:53:18
Hallo Liebe Gemeinde,

ich bin dabei ein neues Modul zu entwickeln. Das Pflichtenheft habe ich bereits erstellt. Die Fertigstellung kann noch etwas dauern. Falls allgemeines Interesse besteht, bei Anregungen oder Anmerkungen (z. B. braucht die Welt nicht) bitte hier posten. Auf dieser Basis kann ich für mich beurteilen, ob sich die Entwicklung lohnt. Ich bin mir jedoch jetzt schon sicher, dass hier eine rege Diskussion entstehen wird.

Edit: Die aktuelle Version ist über FHEM-Update verfügbar.

Aktuelle Doku zum Modul: http://fhem.de/commandref_DE.html#DOIF

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 21 Mai 2014, 20:31:23
Gefällt mir sehr gut  8)
Titel: Antw:neues Modul DOIF
Beitrag von: hexenmeister am 21 Mai 2014, 20:53:31
Ist wohl das, wofür ich zuerst dein IF Modul gehalten habe.  Klingt interessant.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Mai 2014, 21:13:23
Zitat von: hexenmeister am 21 Mai 2014, 20:53:31
Ist wohl das, wofür ich zuerst dein IF Modul gehalten habe.  Klingt interessant.
Ja, plus Zeitsteuerung und watchdog-Funktionalität.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: hexenmeister am 21 Mai 2014, 22:45:19
Wird IMHO sehr nürzlich sein.
Interessant ist natürlich, wie hoch der Ressourcenverbrauch sein wird.

Gutes Gelingen!

Grüße,

Alexander

Titel: Antw:neues Modul DOIF
Beitrag von: cwagner am 21 Mai 2014, 22:52:28
Hallo Damian,

wird zumindest bei mir eine Menge vereinfachen, bin sehr gespannt.

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Mai 2014, 23:16:27
Zitat von: hexenmeister am 21 Mai 2014, 22:45:19
Wird IMHO sehr nürzlich sein.
Interessant ist natürlich, wie hoch der Ressourcenverbrauch sein wird.

Gutes Gelingen!

Grüße,

Alexander

Den wirst du nicht messen können ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: hexenmeister am 22 Mai 2014, 02:12:07
ZitatDen wirst du nicht messen können
Das ist gut!  8)
Titel: Antw:neues Modul DOIF
Beitrag von: nocomment am 22 Mai 2014, 03:44:23
coole idee :D

leg los :)

gruß,
Patrick
Titel: Antw:neues Modul DOIF
Beitrag von: bsl02 am 24 Mai 2014, 00:41:22
Könnte ich gut gebrauchen, wenn der Heizkessel sich einmal wieder aufgehängt hat (Stromverbrauch konstant 70W durch Umwälzpumpe im Sommer...).

Gruß, Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 24 Mai 2014, 07:08:45
ick freu mir drauf!
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 24 Mai 2014, 10:30:06
Ist mindestens so revolutionär wie Dashboard. Das wird unheimlich viele Dinge vereinfachen.
Ich erinnere mich noch an die Diskussion zum IF-Modul. Spätestens jetzt, durch die daraus entstandene Weiterentwicklung, ist der Nutzen (den ich nie angezweifelt habe) bewiesen.
Ist natürlich nur meine persönliche Meinung als Laie. Aber ich bin trotzdem begeistert und freue mich drauf.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Mai 2014, 10:41:39
Zitat von: Invers am 24 Mai 2014, 10:30:06
Ist mindestens so revolutionär wie Dashboard. Das wird unheimlich viele Dinge vereinfachen.
Ich erinnere mich noch an die Diskussion zum IF-Modul. Spätestens jetzt, durch die daraus entstandene Weiterentwicklung, ist der Nutzen (den ich nie angezweifelt habe) bewiesen.
Ist natürlich nur meine persönliche Meinung als Laie. Aber ich bin trotzdem begeistert und freue mich drauf.

So ist das oft im Leben: gäbe es IF nicht, würde es DOIF auch nicht geben, denn den ganzen Parsermechanismus kann ich weitgehend übernehmen und dieser ist nicht trivial zu programmieren. Denn will man volle Perl-Unterstützung in der Abfrage bieten (wie bei IF), so muss man alle bestehenden Möglichkeiten, die es bei Perl gibt, berücksichtigen.

Denn viele wissen es nicht: IF ist nichts anders als ein Aufruf von perl-if

Gruß

Damian
Titel: Antw:neues Modul DOIF und THRESHOLD
Beitrag von: Peter aus Calw am 26 Mai 2014, 17:58:59
Hallo Damian,
nun mal so rum, als Zaungast möchte ich hier einfach Deine Unterstützung durch THRESHOLD und Deine klasse geduldige Hilfe herausstellen und Dir für Dein neu geplantes Modul viel Erfolg wünschen. Bin sicher, dass auch dieses einiges in meiner kleinen Welt einfacher macht.
Bis zu meinen nächsten Fragen das beste Gelingen.
Gruß Peter :) :) :) :) :)
Titel: Antw:neues Modul DOIF
Beitrag von: Bennemannc am 26 Mai 2014, 19:30:19
Hallo Damian,

ZitatSo ist das oft im Leben: gäbe es IF nicht, würde es DOIF auch nicht geben, denn den ganzen Parsermechanismus kann ich weitgehend übernehmen und dieser ist nicht trivial zu programmieren.
Warum lagerst Du den Code, der in beiden Module gebraucht wird nicht in ein eigenes Modul aus?
Das würde die Sache strukturierter machen und das ausgelagerte Modul könnte auch von anderen Programmierern genutzt werden.

Gruß Christoph
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Mai 2014, 19:54:46
Zitat von: Bennemannc am 26 Mai 2014, 19:30:19
Hallo Damian,
Warum lagerst Du den Code, der in beiden Module gebraucht wird nicht in ein eigenes Modul aus?
Das würde die Sache strukturierter machen und das ausgelagerte Modul könnte auch von anderen Programmierern genutzt werden.

Gruß Christoph

Das kann ich später noch machen, falls Interesse besteht. Ich werde allerdings die Parser-Routinen noch umschreiben müssen, denn IF baut den kompletten if-String zusammen. DOIF wird dagegen nicht perl-if nutzen, sondern die einzelnen Bedingungen und dazugehörigen Ausführungsteile selbst verwalten und zum gegebenen Zeitpunkt über eval abfragen und über entsprechende fhem-Routine ausführen. Hinzukommt noch die Zeitkomponente, die es ja bei IF nicht gibt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: b4r7 am 30 Mai 2014, 19:40:16
Kanns kaum erwarten :DDDDDD
IF ist schon der Hammer ^^ DOIF wirds um ein vielfaches übertrumpfen!
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Juni 2014, 21:01:47
Ich habe fertig!

Bitte die aktualisierte Doku zum Modul im ersten Post beachten, dort habe ich das Modul zum download angehängt.

Habe mal zum Testen zwei at-Befehle und zwei notifys mit IF-Befehlen durch ein DOIF-Modul ersetzt:

define DI_Rollo_Licht DOIF ([06:25] and !$we and [Helligkeit] eq "off")
  (set Lampeflur on, set Lampekueche on)
DOELSEIF((([Helligkeit] eq "on" and $hms gt "06:25") or [08:00]) and !$we)
  ((set R_W_S,R_W_W[1-3] on), sleep 900, set Wandleuchten_W off, sleep 1,set Lampekueche off, set Lampeflur off)
DOELSEIF ([Helligkeit] eq "off")
  ((set Lampekueche,Lampeflur on), sleep 1800, (set R_W_S,R_W_W[1-3] off))
DOELSEIF ([23:00])
  (set Lampekueche off)
DOELSEIF ([23:30])
  (set Lampeflur off)


Mal schauen, ob das Haus morgen noch steht :)

Zum Installieren Modul 98_DOIF.pm ins FHEM-Verzeichnis kopieren und in der Kommandozeile reload 98_DOIF.pm eingeben.

Ansonsten viel Spaß beim Ausprobieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 24 Juni 2014, 21:36:56
Gratulation und danke.
Gerade heute wollte ich mal nachfragen. Kann ich mir ja dann sparen. Werde gleich testen.

Vielen Dank!
Titel: Antw:neues Modul DOIF
Beitrag von: kermi am 24 Juni 2014, 21:45:57
Hallo Damian,

das sieht ja super aus, da werde ich mich gleich mal ranmachen.
Wenn ich das richtig verstanden habe kann könnte ich damit meine Jalousiesteuerung, die aus vielen Dummys, noch mehr notify´s und je 4 watchdogs, Heating_Control und THRESHOLD besteht, ja komplett vereinfacht umbauen.

Da ich ein lichtliebender Mensch bin fahre ich die Jalousieen wirklich nur runter wenn es draussen heiss ist und die Sonne ballert, das ganze dann noch zeitgesteuert und das wars schon.

Das wird ne lustige Denksportaufgabe ...

Vielen Dank für das Modul und deine Arbeit!!

Gruß
Stephan
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 25 Juni 2014, 10:20:52
ich hab mal eine Variante getestet:
define DI_Kuehlschrank DOIF ([TMP_Kuehl:temperature] >= 7.5) (set Kuehlschrank on) DOELSEIF ([TMP_Kuehl:temperature] <= 6.5)  (set Kuehlschrank off)

Funktioniert auch. Auch die Fehlermeldungen bei falscher Definition kommen. Ich hatte temperature versehentlich gross geschrieben und das wurde brav gemeldet.

Nun bekomme ich Statusmeldungen vom DOIF:
DI_Kuehlschrank cmd_3
DI_Kuehlschrank cmd_1
DI_Kuehlschrank cmd_2

ich denke, DI_Kuehlschrank cmd_1 ist die erste Bedingung erfüllt u.s.w.
DI_Kuehlschrank cmd_3, was ist das?


Wäre es nicht übersichtlicher, die Schaltbedingung anzuzeigen?
Also statt DI_Kuehlschrank cmd_1 - Anzeige = 7.5
DI_Kuehlschrank cmd_2 - Anzeige = 6.5

Oder ist da jetzt von mir was falsch interpretiert worden?

Ansonsten - tolle Sache!!!
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 25 Juni 2014, 10:35:01
Ich denke cmd_3 ist die Lücke zwischen 6.6-7.4

Tolles Modul!!!
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 25 Juni 2014, 11:43:21
Super Modul !! Herzlichen Dank.

Ich habe Probleme mit device.names bei Definitionen wie ([netatmo_M02:00:00:01:38:78:temperature] > 27) (set markise on). Es erscheint dann eine Fehlermeldung: DI_markise DOIF: unknown Device: netatmo_M02.

Gleiches bei einem Reading wie [Solar:AC.Power.Fast]. Sorry - das funktioniert, hatte mich in FHEM vertippt. :(
Titel: Antw:neues Modul DOIF
Beitrag von: Bennemannc am 25 Juni 2014, 12:24:48
Hallo,

hast Du das über die Befehlszeile eingegeben oder von Hand in die fhem.cfg geschrieben ? Ich denke, das es analog zum THRESHOLD Modul sein muss, das der DOIF nach den define des Devices stehen muss - also ziemlich am Ende der cfg stehen.

Gruß Christoph
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 25 Juni 2014, 12:38:11
Hatte ich auf der Befehlszeile eingegeben bzw dann bei den Internals weitergearbeitet.

In der config sieht es wie folgt aus, wobei nach dem DOIF anstelle der wetterstation stehen sollte [netatmo_M02:00:00:01:38:78:temperature] :

define DI_markise DOIF ([wetterstation:temperature] > 20 and ($hms gt "11:15" and $hms lt "18:35" and !$we)) (set markiese 70) DOELSEIF\
([wetterstation:rain] > 0 or [wetterstation:windSpeed] > 10) (set markiese off) DOELSE\
(set markiese off)

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juni 2014, 14:02:38
Zitat von: kkoeniger am 25 Juni 2014, 12:38:11
Hatte ich auf der Befehlszeile eingegeben bzw dann bei den Internals weitergearbeitet.

In der config sieht es wie folgt aus, wobei nach dem DOIF anstelle der wetterstation stehen sollte [netatmo_M02:00:00:01:38:78:temperature] :

define DI_markise DOIF ([wetterstation:temperature] > 20 and ($hms gt "11:15" and $hms lt "18:35" and !$we)) (set markiese 70) DOELSEIF\
([wetterstation:rain] > 0 or [wetterstation:windSpeed] > 10) (set markiese off) DOELSE\
(set markiese off)

Da Doppelpunkt bei Readingangaben als Trennzeichen gilt, darf es nicht im Namen des Devices vorkommen. In solchen Fällen bitte das Device umbenennen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juni 2014, 14:11:18
Zitat von: Invers am 25 Juni 2014, 10:20:52

DI_Kuehlschrank cmd_3, was ist das?

Wäre es nicht übersichtlicher, die Schaltbedingung anzuzeigen?
Also statt DI_Kuehlschrank cmd_1 - Anzeige = 7.5
DI_Kuehlschrank cmd_2 - Anzeige = 6.5

Oder ist da jetzt von mir was falsch interpretiert worden?


cmd_3 ist bei dir der imaginäre DOELSE-Fall (dritter Fall bei dir), den du nicht definiert hast, dieser wird auch angezeigt - steht so in der Doku.

Das Modul soll universell einsetzbar sein. Man kann jetzt schon das Attribut cmdState nutzen, siehe Doku. Später werde ich im Status vielleicht noch Readings wie in der Bedingung in eckigen Klammern im cmdState vorsehen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 25 Juni 2014, 15:42:33
Danke, das umbenennen des device half :)
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 25 Juni 2014, 15:50:16
Zitatcmd_3 ist bei dir der imaginäre DOELSE-Fall (dritter Fall bei dir), den du nicht definiert hast, dieser wird auch angezeigt - steht so in der Doku.

Meinst du mit Doku den Post 1? oder hab ich was verschlafen?


Ansonsten verstanden, danke.
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 25 Juni 2014, 16:26:55
Sorry - wieder der Lästige ;)

Jedesmal wenn ich händische Änderungen an der fhem.cfg (natürlich an anderer Stelle) vornehme, sind die DOIF-Defines in Fehm verschwunden. Fehlermeldung zB nach einem rereadcfg:

"0
DI_qion DOIF: unknown reading: strommess:energy
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
DI_markise DOIF: unknown reading: netatmo_ter:temperature
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
"

Auch nach einem shutdown+restart oder einem reboot meines Raspi sind die Defines verschwunden.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juni 2014, 16:29:21
Zitat von: Invers am 25 Juni 2014, 15:50:16
Meinst du mit Doku den Post 1? oder hab ich was verschlafen?


Ansonsten verstanden, danke.

ja, zu cmd_3 meinte ich diesen Satz aus der Doku:

Auch wenn kein DOELSE-Fall angegeben wird, wird der entsprechende Status gesetzt, falls keiner der definierten DO-Fälle zutrifft.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juni 2014, 16:31:34
Zitat von: kkoeniger am 25 Juni 2014, 16:26:55
Sorry - wieder der Lästige ;)

Jedesmal wenn ich händische Änderungen an der fhem.cfg (natürlich an anderer Stelle) vornehme, sind die DOIF-Defines in Fehm verschwunden. Fehlermeldung zB nach einem rereadcfg:

"0
DI_qion DOIF: unknown reading: strommess:energy
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
DI_markise DOIF: unknown reading: netatmo_ter:temperature
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
"

Auch nach einem shutdown+restart oder einem reboot meines Raspi sind die Defines verschwunden.

Hierzu steht in der Doku, Zitat:

Die Definition eines DOIF-Moduls sollte über die Weboberfläche vorgenommen werden und nicht manuell in der fhem.cfg gemacht werden, insbesondere, weil zum Zeitpunkt der Definition die Existenz der angegebenen Devices geprüft wird.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 25 Juni 2014, 16:43:37
Ich definiere ja die DOIF-Defines oder -attr nicht in der Config. Die nehme ich ja auf der Weboberfläche vor. Änderungen mache ich an anderer Stelle, anderen attr anderer defines.

Das würde ja bedeuten, dass die fhem.cfg eigentlich vollständig gesperrt werden muss, damit dort bei Nutzung des 98_DOIF.pm niemand mehr etwas ändert, wenn ich auch an anderen defines/attr nichts mehr ändern darf.

Auch beim Zurückkopieren einer (mir DOIF-) funktionierenden fhem.cfg-Sicherung samt folgendem rereadcfg oder bei einem reboot des Raspi kommen die Fehlermeldungen.

Was mache ich falsch? :'(

Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 25 Juni 2014, 16:46:45
Zitat von: kkoeniger am 25 Juni 2014, 16:43:37
Was mache ich falsch? :'(

Du bearbeitest die fhem.cfg
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 25 Juni 2014, 16:50:28
Scheint aber nicht unbedingt etwas damit zu tun haben, wenn die Fehler auch nach einem Reboot auftauchen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juni 2014, 17:15:42
Zitat von: kkoeniger am 25 Juni 2014, 16:50:28
Scheint aber nicht unbedingt etwas damit zu tun haben, wenn die Fehler auch nach einem Reboot auftauchen.
Wenn du in deiner fhem.cfg dein DOIF Modul an der falschen Stelle einfügst, nämlich bevor die Devices definiert werden, dann wirst du das Problem immer haben.

Wenn du es über Weboberfläche machst, dann weißt du während der Definition, ob du syntaktisch richtig liegst und die Devices bereits definiert sind. Das Modul wird dann anschließend am Ende der cfg-Datei angefügt. Anschließend config save und dein System funktioniert auch nach dem Reboot ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 26 Juni 2014, 08:58:38
Naja, an und für sich fügte ich in die Config bisher nichts falsch ein, das tolle Fhem läuft bei mir seit 4 Monaten auf 2 Raspis mit etwa entities:100 device:30 ... Normalerweise kann ich mit INIs, REGs und CFGs umgehen. Aber was solls ...

Retry von heute:

Hier noch die fheminfo dieses Raspi:
  Release  : 5.5
  Branch   : DEVELOPMENT
  OS       : linux
  Arch     : arm-linux-gnueabihf-thread-multi-64int
  Perl     : v5.14.2
  uniqueID : xxxxx
  upTime   : 00:15:14
Auch nach einem neuerlichen Eingeben des define (im room unsorted zu sehen) mit anschließendem Save config in der fhem-Befehlszeile ist das Modul DOIF nicht aufgelistet:
...
  CUL             : 1
  CUL_HM          : 86
  Dashboard       : 1
  EGPM            : 4
  EGPM2LAN        : 1
  ENIGMA2         : 1
...

Gleiches übrigens nach einem reload 98_DOIF.pm (und ja, fhem ist owner des Moduls).

Konklusio für mich: auch wenn ich die fhem.cfg nicht berühre, erhalte ich Fehlermeldungen und das define verschwindet.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Juni 2014, 11:09:42
Zitat von: kkoeniger am 26 Juni 2014, 08:58:38
Auch nach einem neuerlichen Eingeben des define (im room unsorted zu sehen) mit anschließendem Save config in der fhem-Befehlszeile ist das Modul DOIF nicht aufgelistet:

Gleiches übrigens nach einem reload 98_DOIF.pm (und ja, fhem ist owner des Moduls).

Konklusio für mich: auch wenn ich die fhem.cfg nicht berühre, erhalte ich Fehlermeldungen und das define verschwindet.

Ok. Dann scheint es ein Problem zu sein, das ich so bei mir noch nicht hatte.

Ich gehe davon aus, dass FHEM die fhem.cfg sequentiell abarbeitet. Wenn also zuerst ein Device in der config vorkommen und dann das definierte DOIF-Modul, dass dann die Definition klappt. Ich arbeite seit über einem Jahr  mit zig THRESHOLD Modulen, die ebenfalls die Existenz von Devices bei der Definition überprüfen und hatte dieses Verhalten noch nie gehabt - habe allerdings die fhem.cfg, bis auf die ip-Anpassung ganz am Anfang, manuell nie angepackt. Wenn es also ein grundsätzliches Problem wäre, dann müsste es beim THRESHOLD-Modul, dass von vielen benutzt wird, schon Beschwerden geben.

Die erste Frage ist. Nachdem du dein DOIF-Modul über die Kommadozeile erfolgreich definiert hast und config save gemacht hast. Stimmt die Reihenfolge in der fhem.cfg (zuerst Device-Definitionen, dann DOIF-Definition)?

Wenn das nicht der Fall ist, dann ist klar, dass nach dem Reboot es nicht klappt. Dann würde ich den DOIF-Eintrag manuell in der fhem.cfg nach hinten verschieben (hinter die Devices) und neu booten.

Ich kenne nicht die programmierten FHEM-Abläufe bei der Auswertung der fhem.cfg, vielleicht kann der Rudi etwas dazu sagen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 26 Juni 2014, 12:48:48
Danke, dass Du Dich meiner Sache so annimmst! :)

Direkt aus der fhem.cfg, dort steht es ganz unten am Schluss (ich habe seit gestern werder etwas händisch noch per FHEM-web geändert), per FTP rauskopiert:

### 25.06.2014 ##############
define DI_qion DOIF ([kkathome] eq "zu Hause" and [strommess:energy] > 300)(set WZLeiste_Socket_3 on) DOELSEIF ([kkathome] eq "ausser Haus")(set WZLeiste_Socket_3 off) DOELSEIF ([strommess:energy] <= 300)(set WZLeiste_Socket_3 off) DOELSE (set WZLeiste_Socket_3 off)
attr DI_qion alias Qi-Lader auto
attr DI_qion cmdState zu Hause -> ein|weg -> aus|wenig PV -> aus|off (warum?)
attr DI_qion do always
attr DI_qion group Stecker
attr DI_qion icon audio_repeat
attr DI_qion room WZ
attr DI_qion wait 60:60:60:60


Soweit ich das beurteilen kann, scheint es mir ok zu sein. Ich denke daher, dass Dein Modul (wie ich nicht anders erwartete) alles korrekt macht. Ich habe daher weiter geforscht (wobei das define und die attr jetzt immer in der fhem.cfg stehen blieben, aber nichts auf der FHEM-Oberfläche zu sehen ist - vllt weil ich kein save mehr machte):

ein rereadcfg liefert:
"0
DI_qion DOIF: unknown reading: strommess:energy
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
"

ein reload 98_DOIF.pm liefert keinen Fehler

nach shutdown restart:

Error messages while initializing FHEM:
configfile: 0
DI_qion DOIF: unknown reading: strommess:energy
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
"

So wie ich das jetzt interpretiere, findet FHEM das Modul 98_DOIF.pm einfach nicht, obwohl fhem der owner ist und das Oktal 666. Das Modul selbst hatte ich schon wiederholt ins directory kopiert.

Ich überlege jetzt weiter, wie ich das beheben kann.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Juni 2014, 14:16:30
Zitat von: kkoeniger am 26 Juni 2014, 12:48:48
nach shutdown restart:

Error messages while initializing FHEM:
configfile: 0
DI_qion DOIF: unknown reading: strommess:energy
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
"

So wie ich das jetzt interpretiere, findet FHEM das Modul 98_DOIF.pm einfach nicht, obwohl fhem der owner ist und das Oktal 666. Das Modul selbst hatte ich schon wiederholt ins directory kopiert.

Ich überlege jetzt weiter, wie ich das beheben kann.

Also diese Fehlermeldung kommt ja von DOIF, d. h. DOIF wurde korrekt geladen, findet aber nicht dein strommess-Device und daraus folgend wird DI_qion nicht definiert.

Die Frage muss hier lauten: Warum ist strommess noch nicht definiert an dieser Stelle?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Juni 2014, 14:26:00
Ich sehe gerade. Die Fehlermeldung sagt, dass er das Reading nicht findet und nicht das Device. Das könnte tatsächlich sein, dass zu diesem Zeitpunkt noch kein reading "energy" tatsächlich existiert und erst später vom Device "strommess" erstellt wird. Das würde das Fehlverhalten erklären. Das würde bedeuten, dass ich die Überprüfung auf Readings ändern müsste, also höchsten als Warning mit logeintrag ohne Fehlercode, so dass die Definition des DOIF-Moduls klappt. Die Überprüfung auf Devices lasse ich dagegen wie sie ist.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 26 Juni 2014, 14:50:57
Ja :)

"energy" ist ein berechnetes Reading von 3 devices:

attr strommess userReadings energy {ReadingsVal("Solar","AC.Power.Fast",0) - ReadingsVal("pvliefer","electricityPower",0) + ReadingsVal("strombezug","electricityPower",0);;;;}, energyToday {ReadingsVal("Solar","Daily.Energy",0) - ReadingsVal("pvliefer","electricityConsumedToday_kWh",0) + ReadingsVal("strombezug","electricityConsumedToday_kWh",0);;;;}

"Solar" ist mein Kostal-Wechselrichter.
"pvliefer" und "strombezug" sind je ein YouLess LS110.
Alle 3 Geräte werden per IP ausgelesen und es kann durchaus sein, dass "energy" beim Start von FHEM oder einem rereadcfg noch nicht befüllt ist.

Edit: getriggert wird "strommess" über ein notify alle 10 sec, d.h. das reading steht erst danach zur Verfügung.
Titel: Antw:neues Modul DOIF
Beitrag von: rudolfkoenig am 26 Juni 2014, 17:33:40
ZitatIch kenne nicht die programmierten FHEM-Abläufe bei der Auswertung der fhem.cfg...

Waere aber leicht nachzuschauen.
FHEM liest beim Start bzw. restart erst fhem.cfg und danach fhem.state mit dem include Befehl rein, d.h. die Zeilen in diesen Dateien werden so ausgewertet, als ob man diese eins nach dem anderen eingetippt haette.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Juni 2014, 08:08:17
Ich habe in der Doku (erster Post hier) ein Beispiel zu Beschattungssteuerung aufgenommen:

define DI_Rolladen DOIF ([Sensor:temperature] > 26 and $hms gt "11:00" and $hms lt sunset_abs()) (set Rollo runter) DOELSE (set Rollo hoch)
attr DI_Rolladen wait 900:900


An diesem Beispiel kann man erkennen, dass man in der Bedingung auch beliebige Perlfunktionen, hier sunset_abs(), nutzen kann. So kann man insb. auch selbsterstelle Funktionen in DOIF  für Abfragen nutzen.

Nun könnte jemand auf den Gedanken kommen, dass man so etwas genauso gut mit notify und if machen könnte. Dem sei gesagt: Beim notify müsste man sich selbst um die Zustandsbehandlung kümmern, ansonsten wird jedesmal der Rolladen geschaltet, wenn der Sensor einen Wert liefert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: rudolfkoenig am 27 Juni 2014, 08:47:16
Oder man verwendet die FILTER (http://fhem.de/commandref.html#devspec) Funktion der devspec :)
Titel: Antw:neues Modul DOIF
Beitrag von: marvin78 am 27 Juni 2014, 08:47:55
Zitat von: rudolfkoenig am 27 Juni 2014, 08:47:16
Oder man verwendet die FILTER (http://fhem.de/commandref.html#devspec) Funktion der devspec :)

... mit der man dann auch noch wesentlich flexibler ist.
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 27 Juni 2014, 09:56:16
Bisher lief alles mehrere Tage einwandfrei, auch nach diversen Neustarts der Box und auch von fhem.
Habe seit heutigem fhem-Update folgende Fehlermeldungen beim shutdown/restart :

2014.06.27 09:52:20.666 1: define DI_Kuehlschrank DI_Kuehlschrank DOIF ([TMP_Kuehl:temperature] >= 7.5) (set Kuehlschrank on) DOELSEIF ([TMP_Kuehl:temperature] <= 6.5)  (set Kuehlschrank off): DI_Kuehlschrank DOIF: unknown reading: TMP_Kuehl:temperature
2014.06.27 09:52:20.700 1: define DI_Links_Auto_AnAus DI_Links_Auto_AnAus DOIF ([BM_Aussen:brightness] <170 and [BinIchDa] eq "present")(set Links on) DOELSEIF ([BM_Aussen:brightness] >169 and [BinIchDa] eq "present")(set Links off): DI_Links_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.735 1: define DI_Lampe_Korridor_Auto_AnAus DI_Lampe_Korridor_Auto_AnAus DOIF ([BM_Aussen:brightness] <165 and [BinIchDa] eq "present")(set Lampe_Korridor  on) DOELSEIF ([BM_Aussen:brightness] >164 and [BinIchDa] eq "present")(set Lampe_Korridor  off): DI_Lampe_Korridor_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.769 1: define DI_TVLICHT_hinten_Auto_AnAus DI_TVLICHT_hinten_Auto_AnAus DOIF ([BM_Aussen:brightness] <133 and [BinIchDa] eq "present")(set TVLICHT_hinten on) DOELSEIF ([BM_Aussen:brightness] >132 and [BinIchDa] eq "present")(set TVLICHT_hinten off): DI_TVLICHT_hinten_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.805 1: define DI_TVLICHT_vorne_Auto_AnAus DI_TVLICHT_vorne_Auto_AnAus DOIF ([BM_Aussen:brightness] <124 and [BinIchDa] eq "present")(set TVLICHT_vorne on) DOELSEIF ([BM_Aussen:brightness] >123 and [BinIchDa] eq "present")(set TVLICHT_vorne off): DI_TVLICHT_vorne_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.836 1: Including ./log/fhem.save
2014.06.27 09:52:21.883 1: configfile: DI_Kuehlschrank DOIF: unknown reading: TMP_Kuehl:temperature
Please define DI_Kuehlschrank first
Please define DI_Kuehlschrank first
DI_Links_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_Links_Auto_AnAus first
Please define DI_Links_Auto_AnAus first
DI_Lampe_Korridor_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_Lampe_Korridor_Auto_AnAus first
Please define DI_Lampe_Korridor_Auto_AnAus first
DI_TVLICHT_hinten_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_TVLICHT_hinten_Auto_AnAus first
Please define DI_TVLICHT_hinten_Auto_AnAus first
DI_TVLICHT_vorne_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_TVLICHT_vorne_Auto_AnAus first
Please define DI_TVLICHT_vorne_Auto_AnAus first

2014.06.27 09:52:22.034 0: Server started with 179 defined entities (version $Id: fhem.pl 6080 2014-06-07 16:12:09Z rudolfkoenig $, os linux, user root, pid 1744)
2014.06.27 09:52:22.285 1: HMLAN_Parse: HMLAN new condition ok




Was kann ich tun?
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 27 Juni 2014, 10:57:08
Beim nachstehenden define
define DI_qion DOIF ([kkathome] eq "zu Hause" and [Solar:AC.Power] > 300) (set WZLeiste_Socket_3 on) DOELSEIF ([kkathome] eq "ausser Haus")(set WZLeiste_Socket_3 off) DOELSEIF ([Solar:AC.Power] <= 300) (set WZLeiste_Socket_3 off) DOELSE (set WZLeiste_Socket_3 off)
erhalte ich schon bei der Definition Fehler:
"ERROR:
0 DI_qion DOIF: unknown reading: Solar:AC.Power Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first"


Kann es sein, dass der "." im reading "AC.Power" die Ursache ist? Das reading ist vom device, kann es daher nicht ändern.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Juni 2014, 11:04:17
Zitat von: kkoeniger am 27 Juni 2014, 10:57:08
Beim nachstehenden define
define DI_qion DOIF ([kkathome] eq "zu Hause" and [Solar:AC.Power] > 300) (set WZLeiste_Socket_3 on) DOELSEIF ([kkathome] eq "ausser Haus")(set WZLeiste_Socket_3 off) DOELSEIF ([Solar:AC.Power] <= 300) (set WZLeiste_Socket_3 off) DOELSE (set WZLeiste_Socket_3 off)
erhalte ich schon bei der Definition Fehler:
"ERROR:
0 DI_qion DOIF: unknown reading: Solar:AC.Power Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first Please define DI_qion first"


Kann es sein, dass der "." im reading "AC.Power" die Ursache ist? Das reading ist vom device, kann es daher nicht ändern.

Es handelt sich hier immer um das gleiche Problem, dass das Reading bei der Definition nicht vorhanden ist.

Ich werde es am Wochenende ändern. Dass es zwar eine Meldung gibt, aber die Definition trotzdem klappt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Juni 2014, 11:07:21
Zitat von: Invers am 27 Juni 2014, 09:56:16
Bisher lief alles mehrere Tage einwandfrei, auch nach diversen Neustarts der Box und auch von fhem.
Habe seit heutigem fhem-Update folgende Fehlermeldungen beim shutdown/restart :

2014.06.27 09:52:20.666 1: define DI_Kuehlschrank DI_Kuehlschrank DOIF ([TMP_Kuehl:temperature] >= 7.5) (set Kuehlschrank on) DOELSEIF ([TMP_Kuehl:temperature] <= 6.5)  (set Kuehlschrank off): DI_Kuehlschrank DOIF: unknown reading: TMP_Kuehl:temperature
2014.06.27 09:52:20.700 1: define DI_Links_Auto_AnAus DI_Links_Auto_AnAus DOIF ([BM_Aussen:brightness] <170 and [BinIchDa] eq "present")(set Links on) DOELSEIF ([BM_Aussen:brightness] >169 and [BinIchDa] eq "present")(set Links off): DI_Links_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.735 1: define DI_Lampe_Korridor_Auto_AnAus DI_Lampe_Korridor_Auto_AnAus DOIF ([BM_Aussen:brightness] <165 and [BinIchDa] eq "present")(set Lampe_Korridor  on) DOELSEIF ([BM_Aussen:brightness] >164 and [BinIchDa] eq "present")(set Lampe_Korridor  off): DI_Lampe_Korridor_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.769 1: define DI_TVLICHT_hinten_Auto_AnAus DI_TVLICHT_hinten_Auto_AnAus DOIF ([BM_Aussen:brightness] <133 and [BinIchDa] eq "present")(set TVLICHT_hinten on) DOELSEIF ([BM_Aussen:brightness] >132 and [BinIchDa] eq "present")(set TVLICHT_hinten off): DI_TVLICHT_hinten_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.805 1: define DI_TVLICHT_vorne_Auto_AnAus DI_TVLICHT_vorne_Auto_AnAus DOIF ([BM_Aussen:brightness] <124 and [BinIchDa] eq "present")(set TVLICHT_vorne on) DOELSEIF ([BM_Aussen:brightness] >123 and [BinIchDa] eq "present")(set TVLICHT_vorne off): DI_TVLICHT_vorne_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
2014.06.27 09:52:20.836 1: Including ./log/fhem.save
2014.06.27 09:52:21.883 1: configfile: DI_Kuehlschrank DOIF: unknown reading: TMP_Kuehl:temperature
Please define DI_Kuehlschrank first
Please define DI_Kuehlschrank first
DI_Links_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_Links_Auto_AnAus first
Please define DI_Links_Auto_AnAus first
DI_Lampe_Korridor_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_Lampe_Korridor_Auto_AnAus first
Please define DI_Lampe_Korridor_Auto_AnAus first
DI_TVLICHT_hinten_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_TVLICHT_hinten_Auto_AnAus first
Please define DI_TVLICHT_hinten_Auto_AnAus first
DI_TVLICHT_vorne_Auto_AnAus DOIF: unknown reading: BM_Aussen:brightness
Please define DI_TVLICHT_vorne_Auto_AnAus first
Please define DI_TVLICHT_vorne_Auto_AnAus first

2014.06.27 09:52:22.034 0: Server started with 179 defined entities (version $Id: fhem.pl 6080 2014-06-07 16:12:09Z rudolfkoenig $, os linux, user root, pid 1744)
2014.06.27 09:52:22.285 1: HMLAN_Parse: HMLAN new condition ok




Was kann ich tun?

Auch hier das gleiche Problem: siehe: http://forum.fhem.de/index.php/topic,23833.msg179622.html#msg179622

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 27 Juni 2014, 11:13:04
Lass Dich von uns nicht drängen! :)

Wenn das dann funktioniert, wird es mein Lieblingsmodul. So einfach und verständlich zu definieren war für mich noch nichts in FHEM.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Juni 2014, 11:18:37
Zitat von: rudolfkoenig am 27 Juni 2014, 08:47:16
Oder man verwendet die FILTER (http://fhem.de/commandref.html#devspec) Funktion der devspec :)

ja, das kann man tun, wird allerdings bei mehreren Befehlen insb. mit wenn man mit Verzögerung a la sleep arbeitet eher schlecht. Dann muss man sich schon selbst einen Zustand definieren und auswerten:

z. B. bei:

DOIF((([Helligkeit] eq "on" and $hms gt "06:25") or [08:00]) and !$we)
  ((set R_W_S,R_W_W[1-3] on), sleep 900, set Wandleuchten_W off, sleep 1,set Lampekueche off, set Lampeflur off)

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 27 Juni 2014, 12:19:12
OK, hab erst einmal die alte Config eingespielt, damit ich kein warmes Bier tringken muss. :-)
Gib mal Laut, wenn du das geändert hast.
Danke im Voraus.
Titel: Antw:neues Modul DOIF
Beitrag von: Klaus Rubik am 27 Juni 2014, 13:58:22
Hallo Damian,

ab wann planst du das Modul mittels update zur Verfügung zu stellen?

Viele Grüße

klaus
Titel: Antw:neues Modul DOIF
Beitrag von: cwagner am 27 Juni 2014, 15:03:44
Hallo Damian,


danke - sen-sa-tio-nell!!

Einziger Nachteil: Ich fürchte, ein zwei Thresholds entfallen, die ich gebaut hatte, um andere Thresholds ereignisgesteuert zu verändern und dadurch hole ich Dich dann doch nicht in der Threshold-Nutzung ein. Und bei DOIF bin ich ja erst bei einem... :-)

Wirklich großartig, was Du zu FHEM beiträgst.

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Juni 2014, 15:10:33
Zitat von: Klaus Rubik am 27 Juni 2014, 13:58:22
Hallo Damian,

ab wann planst du das Modul mittels update zur Verfügung zu stellen?

Viele Grüße

klaus

Hallo Klaus,

bei IF habe ich drei Monate gewartet bis ich es eingecheckt hatte. Bei DOIF habe ich gerade erst die erste Version fertiggestellt, die sicherlich noch an einigen Stellen angepasst werden muss. Es hängt in erster Linie davon ab, wie viele es testen und wie stabil die ersten Versionen sind. Und es sollte natürlich ein allgemeines Interesse für ein Modul da sein, bevor man es eincheckt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Juni 2014, 15:16:20
Zitat von: cwagner am 27 Juni 2014, 15:03:44
Hallo Damian,


danke - sen-sa-tio-nell!!

Einziger Nachteil: Ich fürchte, ein zwei Thresholds entfallen, die ich gebaut hatte, um andere Thresholds ereignisgesteuert zu verändern und dadurch hole ich Dich dann doch nicht in der Threshold-Nutzung ein. Und bei DOIF bin ich ja erst bei einem... :-)

Wirklich großartig, was Du zu FHEM beiträgst.

Christian

Da brauchst du dir keine Sorgen zu machen, ich werde auch bei mir einige THRESHOLD-Module in Rente schicken ;)

Über Massentauglichkeit von FHEM haben wir uns schon mal bei IF unterhalten. Ich habe immer noch nicht die Hoffnung aufgegeben, dass irgendwann auch Nicht-Programmierer mit FHEM gut zurecht kommen, aber vielleicht kann DOIF einen kleinen Beitrag dazu leisten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Klaus Rubik am 27 Juni 2014, 16:58:11
Hallo Damian,

Zitat von: Damian am 27 Juni 2014, 15:10:33
Und es sollte natürlich ein allgemeines Interesse für ein Modul da sein, bevor man es eincheckt.

also Interesse wäre da :) Werde den Thread weiter beobachten und dann zuschlagen, sobald das Modul offiziell ist

Viele Grüße und weiter so...

Klaus
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 28 Juni 2014, 21:32:09
Das Modul ist klasse, aber ich bekomm´s nicht hin  :-\ Ziel ist eine automatische Beschattung auf der Südseite, das Rollo soll bei Temperaturen > 20, lt. Twilight Compasspoint Sonne im Süden und einigen Wetter Conditions auf 20% herunterfahren, dann wieder hoch wenn die Sonne im Westen steht.

Mit folgendem Code ist die Jalousie vorhin auf 20% runtergefahren:

define DI_sz_Jalousie DOIF ([MeinWetter:temp_c] > 20 and [myTwilight:compasspoint] =~ m/south/i and ([MeinWetter:condition] eq "sonnig" or [MeinWetter:condition] eq "heiter" or [MeinWetter:condition] =~ m/klar or [MeinWetter:condition] eq "teilweise wolkig")) (set sz_Jalousie 20) DOELSEIF ([myTwilight:compasspoint] eq "west") (set sz_Jalousie on)

Jetzt haben wir allerdings nach 21 Uhr und folgende Readings sind aktuell: temp_c = 15, compasspoint = west-northwest, condition = Nieselregen. Warum um alles in der Welt löst die Bedingung aus?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Juni 2014, 22:00:13
Zitat von: Bombjack am 28 Juni 2014, 21:32:09
Das Modul ist klasse, aber ich bekomm´s nicht hin  :-\ Ziel ist eine automatische Beschattung auf der Südseite, das Rollo soll bei Temperaturen > 20, lt. Twilight Compasspoint Sonne im Süden und einigen Wetter Conditions auf 20% herunterfahren, dann wieder hoch wenn die Sonne im Westen steht.

Mit folgendem Code ist die Jalousie vorhin auf 20% runtergefahren:

define DI_sz_Jalousie DOIF ([MeinWetter:temp_c] > 20 and [myTwilight:compasspoint] =~ m/south/i and ([MeinWetter:condition] eq "sonnig" or [MeinWetter:condition] eq "heiter" or [MeinWetter:condition] =~ m/klar or [MeinWetter:condition] eq "teilweise wolkig")) (set sz_Jalousie 20) DOELSEIF ([myTwilight:compasspoint] eq "west") (set sz_Jalousie on)

Jetzt haben wir allerdings nach 21 Uhr und folgende Readings sind aktuell: temp_c = 15, compasspoint = west-northwest, condition = Nieselregen. Warum um alles in der Welt löst die Bedingung aus?

Welche Bedingung meinst du? Du hast zwei. Wenn du die zweite meinst: sie ist die mit "compasspoint = west-northwest" nicht erfüllt.

Wahrscheinlich steht dein Status auf cmd_3.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 28 Juni 2014, 22:08:59
Nein, das ist ja das seltsame. Das Rollo ist einige Minuten nach dem define (vermutlich als Yahoo Wetter aktualisiert wurde) auf 20% gefahren,  Status war cmd_1.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Juni 2014, 22:16:14
Zitat von: Bombjack am 28 Juni 2014, 22:08:59
Nein, das ist ja das seltsame. Das Rollo ist einige Minuten nach dem define (vermutlich als Yahoo Wetter aktualisiert wurde) auf 20% gefahren,  Status war cmd_1.

Und steht immer noch auf cmd_1?

Wie oft kommen die Events?

Wichtig zu wissen ist, dass deine zweite definierte Bedingung nur ausgelöst wird, wenn auch myTwilight ein Event auslöst.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 28 Juni 2014, 22:26:45
Da es sich um unser Schlafzimmmer Rollo handelt, habe ich das DOIF jetzt erstmal wieder rausnehmen müssen. Sonst gibt´s gleich Ärger mit meiner Frau ;) Ich probier das morgen nochmal und gebe dann Feedback.

Ich fange ja gerade erst an mit FHEM und PERL, ist der DOIF Ausdruck für das beschriebene Ziel denn grundsätzlich in Ordnung? Das die zweite Bedingung nur bei einem Twilight Event auslöst, ist schon okay denke ich. Das Rollo soll ja einfach nur wieder hoch wenn die Sonne im Westen steht und nicht unten stehen bleiben.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Juni 2014, 22:36:57
Zitat von: Bombjack am 28 Juni 2014, 22:26:45
Da es sich um unser Schlafzimmmer Rollo handelt, habe ich das DOIF jetzt erstmal wieder rausnehmen müssen. Sonst gibt´s gleich Ärger mit meiner Frau ;) Ich probier das morgen nochmal und gebe dann Feedback.

Ich fange ja gerade erst an mit FHEM und PERL, ist der DOIF Ausdruck für das beschriebene Ziel denn grundsätzlich in Ordnung? Das die zweite Bedingung nur bei einem Twilight Event auslöst, ist schon okay denke ich. Das Rollo soll ja einfach nur wieder hoch wenn die Sonne im Westen steht und nicht unten stehen bleiben.

Das sollte für die Problemstellung kein Problem sein. Nach deiner Definition kann der Rolladen nicht unten sein, weil nach deiner Aussage z. Zt. compasspoint gleich  "west-northwest" und nicht gleich "west" ist und für den DOELSE-Fall hast du nichts definiert.

Testen kannst du übrigens immer zuerst an Aktoren (Dummys oder Lampen), die mit deiner Frau nicht kollidieren :)
 
Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 28 Juni 2014, 23:04:39
ZitatDas sollte für die Problemstellung kein Problem sein. Nach deiner Definition kann der Rolladen nicht unten sein, weil nach deiner Aussage z. Zt. compasspoint gleich  "west-northwest" und nicht gleich "west" ist und für den DOELSE-Fall hast du nichts definiert.

Genau das war ja der Anlass für meinen Post, lt. Log ist das Rollo um 21:10 einige Minuten nach der DOIF Definition auf 20% gefahren und der Status war anschließend cmd_1.

2014.06.28 21:10:58 3: CUL_HM set sz_Jalousie 20

ZitatTesten kannst du übrigens immer zuerst an Aktoren (Dummys oder Lampen), die mit deiner Frau nicht kollidieren :)

Leider ist mein Setup noch sehr überschaubar und besteht gerade mal aus dem einen Rollo Aktor und einem Temperatursensor, wie gesagt ich übe noch. Die Großbestellung wird erst ausgelöst wenn das Minimalsetup zufriedenstellend läuft  :) Das mit dem Dummy klingt gut, wenn ich jetzt noch wüsste wie ich einen anlege...ich werde mich dazu mal einlesen. Kann ich das DOIF Modul irgendwie dazu bewegen einige Statusmeldungen auszugeben, insbesondere welche Readings verarbeitet werden wenn ein Event feuert?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Juni 2014, 23:07:06
Zitat von: Bombjack am 28 Juni 2014, 23:04:39
Kann ich das DOIF Modul irgendwie dazu bewegen einige Statusmeldungen auszugeben, insbesondere welche Readings verarbeitet werden wenn ein Event feuert?

kommt beim nächsten größeren Update :)

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 28 Juni 2014, 23:26:09
Zitatkommt beim nächsten größeren Update :)

Klingt gut  :)

Also, das mit dem Dummy habe ich hinbekommen. Gleiches Problem wie vorher: Nach dem ersten Twilight Event ist der DOIF Status cmd_1, wie kann denn das sein bei den Bedingungen?

Internals
CFGFN
DEF
([MeinWetter:temp_c] > 20 and [myTwilight:compasspoint] =~ m/south/i and ([MeinWetter:condition] eq "sonnig" or [MeinWetter:condition] eq "heiter" or [MeinWetter:condition] =~ m/klar or [MeinWetter:condition] eq "teilweise wolkig")) (set DI_dummy 20) DOELSEIF ([myTwilight:compasspoint] eq "west") (set DI_dummy on)
NAME
DI_set_dummy
NR
99
NTFY_ORDER
50-DI_set_dummy
STATE
cmd_1
TYPE
DOIF
Readings
state
cmd_1
2014-06-28 23:18:47
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Juni 2014, 23:39:05
Zitat von: Bombjack am 28 Juni 2014, 23:26:09
Klingt gut  :)

Also, das mit dem Dummy habe ich hinbekommen. Gleiches Problem wie vorher: Nach dem ersten Twilight Event ist der DOIF Status cmd_1, wie kann denn das sein bei den Bedingungen?

Internals
CFGFN
DEF
([MeinWetter:temp_c] > 20 and [myTwilight:compasspoint] =~ m/south/i and ([MeinWetter:condition] eq "sonnig" or [MeinWetter:condition] eq "heiter" or [MeinWetter:condition] =~ m/klar or [MeinWetter:condition] eq "teilweise wolkig")) (set DI_dummy 20) DOELSEIF ([myTwilight:compasspoint] eq "west") (set DI_dummy on)
NAME
DI_set_dummy
NR
99
NTFY_ORDER
50-DI_set_dummy
STATE
cmd_1
TYPE
DOIF
Readings
state
cmd_1
2014-06-28 23:18:47


z. Zt. fehlen mir die Analysemöglichkeiten. Du kannst die erste Bedingung bis auf eine oder zwei Abfragen reduzieren und testen und dann immer weiter ausbauen, bis du ein Fehlverhalten feststellst, dann hast du die Fehlerquelle lokalisiert.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 29 Juni 2014, 00:36:21
ZitatDu kannst die erste Bedingung bis auf eine oder zwei Abfragen reduzieren und testen und dann immer weiter ausbauen, bis du ein Fehlverhalten feststellst, dann hast du die Fehlerquelle lokalisiert.

Ohne den MeinWetter:condition Block ist das Ergebnis wie erwartet cmd_3, ein DOIF nur mit dem MeinWetter:condition Block ergibt ebenfalls cmd_3. Sobald ich jedoch die Bedingungsblöcke kombiniere, kommt wieder cmd_1 dabei raus, auch wenn ich das umstelle (MeinWetter:condition Block nach vorne)...ich bin ratlos  :( Kann es sein dass Dein Modul mit den geschachtelten Klammern nicht klar kommt?
Titel: Antw:neues Modul DOIF
Beitrag von: herrmannj am 29 Juni 2014, 01:16:31
Hi

dort
..[MeinWetter:condition] =~ m/klar or.. scheint die regex falsch

vg
jörg
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 29 Juni 2014, 01:57:07
hmm nachdem ich diesen Teil herausgenommen habe, ist der State tatsächlich auf cmd_3 gesprungen. Ich wollte damit "klar" und "überwiegend klar" abfangen, was stimmt denn mit dem Ausdruck nicht? Und warum wird dadurch der gesamte cmd_1 Block wahr?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Juni 2014, 07:46:53
Zitat von: Bombjack am 29 Juni 2014, 01:57:07
Und warum wird dadurch der gesamte cmd_1 Block wahr?

Ganz einfach, weil die Perl-Fehlermeldung noch nicht sauber abgefangen wurde. Wird demnächst im Log erscheinen und es wird dann logischerweise nicht geschaltet.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: AndyOne am 29 Juni 2014, 08:46:00
Hallo Damien,

ich habe auch ein Problem die DOIF Schaltung Rebootsicher zu bekommen. Ich sehe den Eintrag für meinen SonnenschutzAuto in der fhem.cfg wenn ich "Save Config" mache, aber beim Laden gibt es dann doch Fehler und es wird nicht geladen. Gestern hatten wir einen Stromausfall, ich poste mal das Logfile nach dem wir wieder Strom hatten. Den DOIF Befehl musste ich heute aus einer externen Sicherung wieder in die Befehlszeile schreiben.

VG Andy

Zitat2014.06.28 23:28:22 1: Including fhem.cfg
2014.06.28 23:28:22 3: telnetPort: port 7072 opened
2014.06.28 23:28:25 3: WEB: port 8083 opened
2014.06.28 23:28:25 3: WEBphone: port 8084 opened
2014.06.28 23:28:25 3: WEBtablet: port 8085 opened
2014.06.28 23:28:25 2: eventTypes: loaded 199 events from ./log/eventTypes.txt
2014.06.28 23:28:26 3: Opening CUL_0 device /dev/ttyACM0
2014.06.28 23:28:27 3: Setting CUL_0 baudrate to 38400
2014.06.28 23:28:27 3: CUL_0 device opened
2014.06.28 23:28:27 3: CUL_0: Possible commands: BCFiAZEGMKURTVWXefmltux
2014.06.28 23:28:27 2: Switched CUL_0 rfmode to HomeMatic
2014.06.28 23:28:35 1: define SonnenschutzAuto SonnenschutzAuto DOIF ([Aussen_Temp:temperature]> 25 and $hms gt "12:00" and $hms lt "17:45") (set WZ_RL_West_links 14%, set WZ_RL_West_mitte 15%,set WZ_RL_West_rechts 15%) DOELSEIF (([Aussen_Temp:temperature]< 24 and $hms gt "12:00" and $hms lt "17:45") or ($hms lt "12:00" or $hms gt "17:45")) (set WZ_RL_West_links on, set WZ_RL_West_mitte on,set WZ_RL_West_rechts on): SonnenschutzAuto DOIF: unknown reading: Aussen_Temp:temperature
2014.06.28 23:28:35 3: Please define SonnenschutzAuto first
2014.06.28 23:28:35 1: Including ./log/fhem.save
2014.06.28 23:28:36 1: configfile: SonnenschutzAuto DOIF: unknown reading: Aussen_Temp:temperature
Please define SonnenschutzAuto first
statefile: Please define SonnenschutzAuto first
Please define SonnenschutzAuto first
2014.06.28 23:28:36 1: usb create starting
2014.06.28 23:28:37 1: usb create end
2014.06.28 23:28:37 2: Error messages while initializing FHEM: configfile: SonnenschutzAuto DOIF: unknown reading: Aussen_Temp:temperature Please define SonnenschutzAuto first statefile: Please define SonnenschutzAuto first Please define SonnenschutzAuto first
2014.06.28 23:28:37 0: Server started with 97 defined entities (version $Id: fhem.pl 6080 2014-06-07 16:12:09Z rudolfkoenig $, os linux, user fhem, pid 2039)
2014.06.28 23:28:39 3: Device Aussen_Temp added to ActionDetector with 000:10 time
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Juni 2014, 08:48:39
Zitat von: AndyOne am 29 Juni 2014, 08:46:00
Hallo Damien,

ich habe auch ein Problem die DOIF Schaltung Rebootsicher zu bekommen. Ich sehe den Eintrag für meinen SonnenschutzAuto in der fhem.cfg wenn ich "Save Config" mache, aber beim Laden gibt es dann doch Fehler und es wird nicht geladen. Gestern hatten wir einen Stromausfall, ich poste mal das Logfile nach dem wir wieder Strom hatten. Den DOIF Befehl musste ich heute aus einer externen Sicherung wieder in die Befehlszeile schreiben.

VG Andy

Reading noch nicht da - Problem bekannt. Ist bereits behoben, kommt wahrscheinlich heute noch als Update.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: herrmannj am 29 Juni 2014, 10:01:43
Zitat von: Bombjack am 29 Juni 2014, 01:57:07
Ich wollte damit "klar" und "überwiegend klar" abfangen,
regex lernen ! ;)
( http://www.myregextester.com/ )

enthält "klar":
=~/.*klar.*/
(trifft auch "deklaration)

enthält "klar" als einzelnes Wort:
=~/.*\bklar\b.*/

endet mit "klar":
=~/.*klar$/

ZitatUnd warum wird dadurch der gesamte cmd_1 Block wahr?
keene Ahnung, aber ich denke: "input kaputt" (Bedingungen) -> Ergebnis kaputt  8)

vg
Jörg
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 29 Juni 2014, 14:16:29
Zitatregex lernen ! ;)
( http://www.myregextester.com/ )

Ich bemühe mich ja, danke für den hilfreichen Link!  :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Juni 2014, 16:20:11
Update (Version 1.1)

-kein Abbruch wenn reading nicht vorhanden
-perl-Fehler werden abgefangen und protokolliert
-Mehr Statusinformationen in readings des Moduls (siehe screenshot)

Neue Version aus dem ersten Post laden. Vor dem Einspielen FHEM-stoppen und wieder starten (nicht reload anwenden, da Version nicht abwärtskompatibel).

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 29 Juni 2014, 16:21:40
Supi. Werde ich mich gleich an die "Arbeit" machen. Danke...

Update: shutdown restart mit [WetterStation.temperature] diesmal ohne Fehlermeldung - somit ist der bekannte Fehler gefixt!!!
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 29 Juni 2014, 16:58:25
Danke! Confirmed.  :D
Meine 2 defines haben ein update und shutdown/restart problemlos überstanden. :)
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 29 Juni 2014, 17:05:47
Auch von mir vielen Dank. Funktioniert.
Titel: Antw:neues Modul DOIF
Beitrag von: Michael am 29 Juni 2014, 17:58:37
Moin

Beitrag gelöscht.

Zu erst ging nichts mehr, warum jetzt weis ich nicht.

Vielen Dank für das Modul, es macht vieles einfacher.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 30 Juni 2014, 11:16:08
hallo.
voerest danke für dein modul, macht die sache wirklich einfacher.

habe jetzt nur kurze frage zur bearbeitung im webif, muss man bei doelseif oder doelse auf einrückung,zeileinumbruch achten oder wird die bedingung richtig abgespeichert?

habe hier ein funktionierendes DOIF

([Pac:state] > 1700 and [HZ_Schlafzimmer_Weather:state] > 19.5) (set Klima_SZ off) DOELSE (set Klima_SZ on)


das ich abändern will auf

([Klima_WZ:state] eq "on") and ([Pac:state] > 1500 and [HZ_Schlafzimmer_Weather:state] > 19.5) (set Klima_SZ off) DOELSEIF ([Pac:state] > 1700 and [HZ_Schlafzimmer_Weather:state] > 19.5) (set Klima_SZ off) DOELSE (set Klima_SZ on)


wird mir aber mit folgender Fehlermeldung quittiert:

DOIF: no left bracket of commands: and ([Pac:state] > 1500 and [HZ_Schlafzimmer_Weather:state] > 19.5) (set Klima_SZ off) DOELSEIF ([Pac:state] > 1700 and [HZ_Schlafzimmer_Weather:state] > 19.5) (set Klima_SZ off) DOELSE (set Klima_SZ on)

ich wollte , wenn die Klima im WZ nicht läuft den Wert Pac auf 1500 regeln/abfragen.
wo ist da der fehler?

[edit] fehler vielleicht gefunden.

so muss es sein

([Klima_WZ] eq "on" and [Pac] > 1500 and [HZ_Schlafzimmer_Weather] > 19.5) (set Klima_SZ off) DOELSEIF ([Pac] > 1700 and [HZ_Schlafzimmer_Weather] > 19.5) (set Klima_SZ off) DOELSE (set Klima_SZ on)
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 30 Juni 2014, 17:08:55
Hallo Damian,

ich bekomme mit v1.1 folgende Fehlermeldungen:

2014.06.30 16:52:02.289 1: readingsUpdate(DI_RolloBuero,last_error,no error) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.288 1: readingsUpdate(DI_RolloBuero,last_cmd_event,RolloBueroT) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.287 1: readingsUpdate(DI_RolloBuero,last_cmd,2) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.286 1: readingsUpdate(DI_RolloBuero,state,Sun2) missed to call readingsBeginUpdate first.


Dabei fällt mir auf, dass "DI_RolloBuero,state,Sun2" eigentlich "DI_RolloBuero,state,sun2" heissen müsste...

MfGroby
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Juni 2014, 17:24:08
Zitat von: Groby am 30 Juni 2014, 17:08:55
Hallo Damian,

ich bekomme mit v1.1 folgende Fehlermeldungen:

2014.06.30 16:52:02.289 1: readingsUpdate(DI_RolloBuero,last_error,no error) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.288 1: readingsUpdate(DI_RolloBuero,last_cmd_event,RolloBueroT) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.287 1: readingsUpdate(DI_RolloBuero,last_cmd,2) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.286 1: readingsUpdate(DI_RolloBuero,state,Sun2) missed to call readingsBeginUpdate first.


Dabei fällt mir auf, dass "DI_RolloBuero,state,Sun2" eigentlich "DI_RolloBuero,state,sun2" heissen müsste...

MfGroby

Wie sieht bei dir die dazugehörige Definition von DI_RolloBuero aus?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 30 Juni 2014, 17:37:32

$hms ge [Slider_RolloBuero_sun] and $hms le [Slider_RolloBuero_sunset] and [RolloBueroT] eq"on" and [WetterStation:brightness]>=[LX_RolloBuero:lx] and [Buegeln] eq"off") (set RolloBueroT sun,{Log 1, "Triggering DI_RolloSun: sun ".ReadingsVal("WetterStation","brightness","")."(90/72)"}) DOELSEIF

($hms ge [Slider_RolloBuero_sun2] and $hms le [Slider_RolloBuero_sunset] and [RolloBueroT] eq"sun" and [Buegeln] eq"off") (set RolloBueroT sun2,{Log 1, "Triggering DI_RolloSun: sun2 ".ReadingsVal("WetterStation","brightness","")."(90/72)"}) DOELSEIF

($hms ge [Slider_RolloBuero_sun] and $hms le [Slider_RolloBuero_sunset] and [RolloBueroT] ne"on" and [WetterStation:brightness]<=[LX_RolloBuero:lx]/10*8  and [Buegeln] eq"off") (set RolloBueroT on,{Log 1, "Triggering DI_RolloSun: on ".ReadingsVal("WetterStation","brightness","")."(90/72)"}) DOELSEIF

(($hms gt [Slider_RolloBuero_sunset] or [Buegeln] eq"on") and [RolloBueroT] ne"on") (set RolloBueroT on,{Log 1, "Triggering DI_RolloSun: on ".ReadingsVal("WetterStation","brightness","")."(90/72)"}) DOELSE

({Log 1, "Triggering DI_RolloSun: ".ReadingsVal("WetterStation","brightness","")."(90/72)"})


ich habe auch noch ein Problem mit Bedingung #2 entdeckt, die nicht abgearbeitet wird wenn ich DOIF update und Bedingung #1 bereits erfüllt ist. In meinem Fall wenn RolloBueroT state schon "sun" hat, wurde sun2 nicht mehr ausgeführt. Starte ich allerdings von RolloBueroT "on" läufts wie geschmiert. -> Das wäre kritisch für den Fall das zwischen den einzelnen Bedingungen fhem neu startet oder die "def" verändert wird...

Ich hab da ber noch keinen roten Faden und werde das in einem weiteren "Feldversuch" testen...

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Juni 2014, 19:34:10
Zitat von: Groby am 30 Juni 2014, 17:08:55
Hallo Damian,

ich bekomme mit v1.1 folgende Fehlermeldungen:

2014.06.30 16:52:02.289 1: readingsUpdate(DI_RolloBuero,last_error,no error) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.288 1: readingsUpdate(DI_RolloBuero,last_cmd_event,RolloBueroT) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.287 1: readingsUpdate(DI_RolloBuero,last_cmd,2) missed to call readingsBeginUpdate first.
2014.06.30 16:52:02.286 1: readingsUpdate(DI_RolloBuero,state,Sun2) missed to call readingsBeginUpdate first.


Sollte nicht mehr kommen: Version 1.2 im ersten Post.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: sentinel1 am 01 Juli 2014, 02:22:34
Hallo Damian,

ich habe eine Frage zu einer def.

define eingang_auto DOIF ([00:30] and [keymatic_eingangstuer] eq "unlocked" and &we) (set keymatic_eingangstuer lock)

warum steht bei next_timer=02.07.2014 00:30:00 ,ich möchte die Tür am Wochenende um 00:30 abschließen?

Gruß
Claudiu
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 07:35:57
Zitat von: sentinel1 am 01 Juli 2014, 02:22:34
Hallo Damian,

ich habe eine Frage zu einer def.

define eingang_auto DOIF ([00:30] and [keymatic_eingangstuer] eq "unlocked" and &we) (set keymatic_eingangstuer lock)

warum steht bei next_timer=02.07.2014 00:30:00 ,ich möchte die Tür am Wochenende um 00:30 abschließen?

Gruß
Claudiu

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
Titel: neues Modul DOIF
Beitrag von: Jens_B am 01 Juli 2014, 07:44:06
Vielleicht solltest Du statt &we  mal so wie im Beispiel angegeben $we benutzen, so heißt die Variable nämlich.

Edit: ich sehe gerad Damian war schneller...

Gesendet von meinem iPhone mit Tapatalk
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 08:04:37
Damian,

ich habe folgendes DI definiert:


($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)


Wenn cmd1 ausgeführt wurde also Message=1 und ich gebe set Message 0 über die cmd line aus, wird cmd1 nicht ausgeführt.

Ähnliches gilt wenn ich bei Message=2 set Message 0 eingebe, dann bleibt DI bei cmd1 stehen.

Müsste DI nicht nach ausführen von "set Message 1" sich selbst nocheinmal aufrufen und direkt "set Message 2" ausführen oder habe ich hier einen Denkfehler?

MfGroby 
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 01 Juli 2014, 08:40:38
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....

Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 08:50:06
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...
Titel: Antw:neues Modul DOIF
Beitrag 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?
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 09:38:12
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.

Titel: Antw:neues Modul DOIF
Beitrag 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
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 11:46:02
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...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 12:49:14
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
Titel: Antw:neues Modul DOIF
Beitrag von: sentinel1 am 01 Juli 2014, 13:08:46
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
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 13:34:47
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
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 13:39:31
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

Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 13:50:46
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...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 13:52:50
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
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 13:56:12
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...
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 14:04:35
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
Titel: Antw:neues Modul DOIF
Beitrag 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

($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
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 15:45:21
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
Titel: Antw:neues Modul DOIF
Beitrag 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?
Titel: Antw:neues Modul DOIF
Beitrag von: herrmannj am 01 Juli 2014, 16:01:52
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
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 16:05:06
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
Titel: Antw:neues Modul DOIF
Beitrag 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?
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 17:04:45
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
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 17:28:03
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
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 17:35:37
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



Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 01 Juli 2014, 17:43:27
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.
Titel: Antw:neues Modul DOIF
Beitrag von: Groby am 01 Juli 2014, 17:44:32
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 ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 19:03:15
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


Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Juli 2014, 20:35:49
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
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 01 Juli 2014, 22:30:12
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
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 02 Juli 2014, 08:38:30
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
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 02 Juli 2014, 11:06:34
Wenn ich "attr disable 1" setze, so bleibt das letzte State unverändert entsprechend dem last_cmd stehen. Ware es nicht sinnvoller "disabled" anzuzeigen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Juli 2014, 11:08:51
Zitat von: kkoeniger am 02 Juli 2014, 11:06:34
Wenn ich "attr disable 1" setze, so bleibt das letzte State unverändert entsprechend dem last_cmd stehen. Ware es nicht sinnvoller "disabled" anzuzeigen?

ja, kommt auf die todo-Liste für´s nächste Release :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 02 Juli 2014, 12:44:22
Zitat von: Jens_B am 02 Juli 2014, 08:38:30
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

Danke das wars.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 Juli 2014, 14:44:40
hallo.
wie wird eigentlich eine negative zahl ausgewertet?
habe hier eine < 100 , aber der zustand wird nicht angezeigt, tatsächlicher wert -200 .

ich denke da ist etwas grösseres im argen, weil letzter cmd war < 2000.


([Ueberschuss] > 2000 and $hms gt "08:00" and $hms lt "22:00") (set LED_02 led green) DOELSEIF ([Ueberschuss] < 2000 and $hms gt "08:00" and $hms lt "22:00") (set LED_02 led orange) DOELSEIF ([Ueberschuss] < 100 and $hms gt "08:00" and $hms lt "22:00") (set LED_02 led red) DOELSE (set LED_02 led off)


[edit]
hallo.
ich habe das ganze mit IF gelöst, DOIF dürfte nicht für solche Probleme optimal sein.

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: kkoeniger am 02 Juli 2014, 16:31:46
Zitat von: Damian am 02 Juli 2014, 11:08:51
ja, kommt auf die todo-Liste für´s nächste Release :)

...

Danke !  :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Juli 2014, 18:11:00
Zitat von: satprofi am 02 Juli 2014, 14:44:40
hallo.
wie wird eigentlich eine negative zahl ausgewertet?
habe hier eine < 100 , aber der zustand wird nicht angezeigt, tatsächlicher wert -200 .

ich denke da ist etwas grösseres im argen, weil letzter cmd war < 2000.


([Ueberschuss] > 2000 and $hms gt "08:00" and $hms lt "22:00") (set LED_02 led green) DOELSEIF ([Ueberschuss] < 2000 and $hms gt "08:00" and $hms lt "22:00") (set LED_02 led orange) DOELSEIF ([Ueberschuss] < 100 and $hms gt "08:00" and $hms lt "22:00") (set LED_02 led red) DOELSE (set LED_02 led off)


[edit]
hallo.
ich habe das ganze mit IF gelöst, DOIF dürfte nicht für solche Probleme optimal sein.

gruss

Da kann DOIF nichts dafür.

Dein Konstrukt kann so nicht funktionieren.

if-then-elseif-else Konstrukte werden in jeder Programmiersprache von links nach rechts, bzw. von oben nach unten abgearbeitet und so verhält sich auch DOIF.

Du hast die Bedingung <2000 vor <100 eingebaut. Da jede Zahl kleiner als 100, gleichzeitig kleiner als zwei tausend ist, wird <100 bei dir nie zum tragen kommen, weil vorher die Bedingung <2000 zuschlägt.

Also einfach die beiden Abfragen in der Reihenfolge tauschen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 Juli 2014, 19:03:50
Aha. Stimmt. Bei IF hab ich es so. Sorry. Gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 09:30:33
Ich habe eine grundsätzliche Verständnisfrage zum DOIF.

Ich möchte bei eintretender Dämmerung, aber nicht vor 17:00 Uhr, eine Lampe einschalten, wenn jemand zu Hause ist. Das würde ich nach meinem Verständnis von DOIF so umsetzen:
define Light_ctrl DOIF (LICHT_STATUS eq "Daemmerung" and $hms gt "17:00" and HAUS_STATUS eq "Anwesend")
(set Licht on) DOELSE (set Licht off)


Was passiert, wenn die Dämmerung schon um 16:30 Uhr eintritt? Die Bedingung $hms gt "17:00" ist da noch nicht erfüllt, also würde korrekterweise nicht geschaltet.
Aber wird dann intern ein Timer gesetzt, der um 17:00:01 Uhr erneut prüft, ob nun alle Bedingungen (noch) erfüllt sind? Oder macht das DOIF in diesem Fall einfach nichts mehr, bis es erneut extern angestossen wird, beispielsweise durch eine Änderung bei HAUS_STATUS?
Oder anders gefragt: Wird die Lampe im 17:00:01 Uhr eingeschaltet, wenn schon vorher Dämmerung eingetreten ist oder bleibt sie aus?

Ich würde eigentlich die erste Variante erwarten. Wenn nicht, wie könnte ich das DOIF in einem solchen Fall anders gestalten, um die gewünschte Funktionalität zu erreichen?
Aus den Beispielen im ersten Post konnte ich das so nicht ableiten.
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 03 Juli 2014, 10:17:53
Ich habe jetzt auch mal eine Frage zu DOIF:
Ich würde gern meine Terrassenbeleuchtung einschalten, wenn twilight im aktevent "ss_weather" hat, und die Beleuchtung soll wieder ausgeschaltet werden, wenn 2 bestimmte Rollladen abends geschlossen werden. Leider funktioniert das nicht so wirklich, weil natürlich das Akt_event sich danach noch wieder ändert... Hm. Im Logfile habe ich zudem dann ziemlich viele Schaltversuche in Bezug auf meine Beleuchtung:
2014.07.02 20:40:50 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 20:40:50 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:42:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:42:34 3: CUL_HM set LICHT_TERRASSE_KUECHE on
2014.07.02 20:42:34 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 20:42:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:47:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:47:34 3: CUL_HM set LICHT_TERRASSE_KUECHE on
2014.07.02 20:47:34 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 20:47:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:52:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:52:34 3: CUL_HM set LICHT_TERRASSE_KUECHE on
2014.07.02 20:52:34 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 20:52:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:57:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 20:57:34 3: CUL_HM set LICHT_TERRASSE_KUECHE on
2014.07.02 20:57:34 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 20:57:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 21:02:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 21:02:34 3: CUL_HM set LICHT_TERRASSE_KUECHE on
2014.07.02 21:02:34 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 21:02:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 21:07:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off
2014.07.02 21:07:34 3: CUL_HM set LICHT_TERRASSE_KUECHE on
2014.07.02 21:07:34 3: CUL_HM LICHT_TERRASSE_KUECHE repeat, level C8 instead of 00
2014.07.02 21:07:34 3: CUL_HM set LICHT_TERRASSE_KUECHE off


mein Code sieht folgendermaßen aus:
([ROLLLADEN_KUECHE] eq "zu" and [ROLLLADEN_WZ_4] eq "zu")  (set LICHT_TERRASSE_KUECHE aus) DOELSEIF ([mytwilight:aktEvent] eq "ss_weather" and $hour > 15) (set LICHT_TERRASSE_KUECHE an) DOELSEIF ([LICHT_TERRASSE_KUECHE] ne "aus") (set LICHT_TERRASSE_KUECHE aus)

Wie mache ich es mit DOIF richtig, damit das so funktioniert wie ich es mir vorstelle?

Achja, der Schalter draußen ist ein Homematic.

Gruß
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 11:11:09
Zitat von: Brockmann am 03 Juli 2014, 09:30:33
Ich habe eine grundsätzliche Verständnisfrage zum DOIF.

Ich möchte bei eintretender Dämmerung, aber nicht vor 17:00 Uhr, eine Lampe einschalten, wenn jemand zu Hause ist. Das würde ich nach meinem Verständnis von DOIF so umsetzen:
define Light_ctrl DOIF (LICHT_STATUS eq "Daemmerung" and $hms gt "17:00" and HAUS_STATUS eq "Anwesend")
(set Licht on) DOELSE (set Licht off)


Was passiert, wenn die Dämmerung schon um 16:30 Uhr eintritt? Die Bedingung $hms gt "17:00" ist da noch nicht erfüllt, also würde korrekterweise nicht geschaltet.
Aber wird dann intern ein Timer gesetzt, der um 17:00:01 Uhr erneut prüft, ob nun alle Bedingungen (noch) erfüllt sind? Oder macht das DOIF in diesem Fall einfach nichts mehr, bis es erneut extern angestossen wird, beispielsweise durch eine Änderung bei HAUS_STATUS?
Oder anders gefragt: Wird die Lampe im 17:00:01 Uhr eingeschaltet, wenn schon vorher Dämmerung eingetreten ist oder bleibt sie aus?

Ich würde eigentlich die erste Variante erwarten. Wenn nicht, wie könnte ich das DOIF in einem solchen Fall anders gestalten, um die gewünschte Funktionalität zu erreichen?
Aus den Beispielen im ersten Post konnte ich das so nicht ableiten.

Ich unterstelle mal, dass LICHT_STATUS (bitte in eckige Klammern setzen, sonst gibt´s Fehlermeldung) nur ein Event auslöst, wenn sich der Zustand ändert und nicht zyklisch sendet.

Die Abfrage bei dir wird also ausgewertet, wenn LICHT_STATUS oder HAUS_STATUS ein Event sendet. Das bedeutet, wenn Dämmerung und vor 17:00 stattgefunden hat und HAUS_STATUS vorher schon anwesend war, dann wird nach 17:00 nichts passieren. Wenn du sicherstellen willst, dass auch nach 17:00 geprüft wird, dann musst du das mit Hilfe einer Zeitangabe berücksichtigen. z. B.


define Light_ctrl DOIF (([LICHT_STATUS] eq "Daemmerung" or [17:01])  and $hms gt "17:00" and [HAUS_STATUS] eq "Anwesend")
(set Licht on) DOELSE (set Licht off)


Eine zyklische Selbsttriggerung des Moduls habe ich mir bisher verkniffen einzubauen. Damit könnte man auch viel Blödsinn machen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 Juli 2014, 12:59:46
Zitat von: Jens_B am 03 Juli 2014, 10:17:53
Ich habe jetzt auch mal eine Frage zu DOIF:
Ich würde gern meine Terrassenbeleuchtung einschalten, wenn twilight im aktevent "ss_weather" hat, und die Beleuchtung soll wieder ausgeschaltet werden, wenn 2 bestimmte Rollladen abends geschlossen werden. Leider funktioniert das nicht so wirklich, weil natürlich das Akt_event sich danach noch wieder ändert...
Wie mache ich es mit DOIF richtig, damit das so funktioniert wie ich es mir vorstelle?

Achja, der Schalter draußen ist ein Homematic.

Gruß
Jens


([mytwilight:aktEvent] eq "ss_weather" and $hms gt "15:00" and [ROLLLADEN_KUECHE] eq "zu" and [ROLLLADEN_WZ_4] eq "zu") (set LICHT_TERRASSE_KUECHE off) DOELSEIF ([mytwilight:aktEvent] eq "ss_weather" and $hms gt "15:00" and [ROLLLADEN_KUECHE] eq "auf" or [ROLLLADEN_WZ_4] eq "auf")  (set LICHT_TERRASSE_KUECHE on) DOELSE (set LICHT_TERRASSE_KUECHE off)


würde ich so lösen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 13:01:51
Zitat von: Jens_B am 03 Juli 2014, 10:17:53
Ich habe jetzt auch mal eine Frage zu DOIF:
Ich würde gern meine Terrassenbeleuchtung einschalten, wenn twilight im aktevent "ss_weather" hat, und die Beleuchtung soll wieder ausgeschaltet werden, wenn 2 bestimmte Rollladen abends geschlossen werden. Leider funktioniert das nicht so wirklich, weil natürlich das Akt_event sich danach noch wieder ändert... Hm. Im Logfile habe ich zudem dann ziemlich viele Schaltversuche in Bezug auf meine Beleuchtung:
mein Code sieht folgendermaßen aus:
([ROLLLADEN_KUECHE] eq "zu" and [ROLLLADEN_WZ_4] eq "zu")  (set LICHT_TERRASSE_KUECHE aus) DOELSEIF ([mytwilight:aktEvent] eq "ss_weather" and $hour > 15) (set LICHT_TERRASSE_KUECHE an) DOELSEIF ([LICHT_TERRASSE_KUECHE] ne "aus") (set LICHT_TERRASSE_KUECHE aus)

Wie mache ich es mit DOIF richtig, damit das so funktioniert wie ich es mir vorstelle?



Ich kenne nicht alle Bedingungen, die bei dir in der Realität vorkommen können, daher mal Folgendes unter Vorbehalt:

([mytwilight:aktEvent] eq "ss_weather" and ($hour > 15 or [16:01])) (set LICHT_TERRASSE_KUECHE an) DOELSEIF ([ROLLLADEN_KUECHE] eq "zu" and [ROLLLADEN_WZ_4] eq "zu" and $hour > 15) (set LICHT_TERRASSE_KUECHE aus)

Wenn die Rollläden vor 16:00 Uhr schon unten waren, dann passiert hier allerdings nichts.

Du kannst auch im DOELSEIF-Fall noch eine Zeitangabe zum Triggern angeben, wenn du zum Ausschalten des Lichtes auf Nummer sicher gehen willst.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 03 Juli 2014, 13:30:31
ZitatIch kenne nicht alle Bedingungen, die bei dir in der Realität vorkommen können, daher mal Folgendes unter Vorbehalt:

Code: [Auswählen]
([mytwilight:aktEvent] eq "ss_weather" and ($hour > 15 or [16:01])) (set LICHT_TERRASSE_KUECHE an) DOELSEIF ([ROLLLADEN_KUECHE] eq "zu" and [ROLLLADEN_WZ_4] eq "zu" and $hour > 15) (set LICHT_TERRASSE_KUECHE aus)

Wenn die Rollläden vor 16:00 Uhr schon unten waren, dann passiert hier allerdings nichts.

Du kannst auch im DOELSEIF-Fall noch eine Zeitangabe zum Triggern angeben, wenn du zum Ausschalten des Lichtes auf Nummer sicher gehen willst.

Gruß

Damian

ich habe das in der Definition jetzt mal so eingefügt und warte mal was heute Abend passiert.

Gruß
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 14:18:56
Zitat von: Damian am 03 Juli 2014, 11:11:09
Die Abfrage bei dir wird also ausgewertet, wenn LICHT_STATUS oder HAUS_STATUS ein Event sendet. Das bedeutet, wenn Dämmerung und vor 17:00 stattgefunden hat und HAUS_STATUS vorher schon anwesend war, dann wird nach 17:00 nichts passieren. Wenn du sicherstellen willst, dass auch nach 17:00 geprüft wird, dann musst du das mit Hilfe einer Zeitangabe berücksichtigen. z. B.

define Light_ctrl DOIF (([LICHT_STATUS] eq "Daemmerung" or [17:01])  and $hms gt "17:00" and [HAUS_STATUS] eq "Anwesend")
(set Licht on) DOELSE (set Licht off)


Aber wenn durch das [17:01] um 17:01 Uhr getriggert wird, ist dieser Teil der OR-Klammer doch wahr, oder?
Würde so nicht einfach um 17:01 Uhr geschaltet werden, selbst wenn noch gar keine Dämmerung ist?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 14:25:17
Zitat von: Brockmann am 03 Juli 2014, 14:18:56
Aber wenn durch das [17:01] um 17:01 Uhr getriggert wird, ist dieser Teil der OR-Klammer doch wahr, oder?
Würde so nicht einfach um 17:01 Uhr geschaltet werden, selbst wenn noch gar keine Dämmerung ist?

Du hast Recht, mein Fehler. Es muss viel mehr heißen:

define Light_ctrl DOIF (([LICHT_STATUS] eq "Daemmerung")  and ($hms gt "17:00" or [17:01]) and [HAUS_STATUS] eq "Anwesend")
(set Licht on) DOELSE (set Licht off)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 15:10:34
Zitat von: Damian am 03 Juli 2014, 14:25:17
Du hast Recht, mein Fehler. Es muss viel mehr heißen:
define Light_ctrl DOIF (([LICHT_STATUS] eq "Daemmerung")  and ($hms gt "17:00" or [17:01]) and [HAUS_STATUS] eq "Anwesend")
(set Licht on) DOELSE (set Licht off)

Ja, so sollte es gehen. Zwar nicht ganz so elegant wie erhofft. Aber Deine Bedenken bzgl. Schleifen durch Selbsttriggern kann ich nachvollziehen.

Danke für die Hinweise.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 Juli 2014, 16:04:26
Hallo.
Irgendwie verstehe ich das DOIF noch nicht ganz.

Mit notify IF klappt folgendes:


IF ([Klima_SZ] eq "off" and $hms gt "08:00 and lt "22:00") (set LED_04 led green) ELSE (set LED_04 led off)


mit DOIF leider nicht


([Klima_SZ] eq "off" and $hms gt "08:00 and lt "22:00") (set LED_04 led green) DOELSE (set LED_04 led off)


why?
fehlt mir das attr do ? Da habe ich auch verständnisprobleme mit.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 16:22:29
Zitat von: satprofi am 03 Juli 2014, 16:04:26
mit DOIF leider nicht

([Klima_SZ] eq "off" and $hms gt "08:00 and lt "22:00") (set LED_04 led green) DOELSE (set LED_04 led off)

Was soll das DOIF denn bewirken?
Wenn zwischen 08:00 Uhr und 22:00 Uhr der Status von KLIMA_SZ auf "off" wechselt, wird die LED angeschaltet.
Wenn zwischen 08:00 Uhr und 22:00 Uhr der Status von KLIMA_SZ auf irgendwas anderes wechselt, wird die LED ausgeschaltet.
Nicht mehr, nicht weniger.

In jedem Fall tut das DOIF nur etwas, wenn sich am Status von Klima_SZ etwas ändert.
Es tut nichts um 08:00 Uhr und nichts um 22:00 Uhr, falls Du das erwartest.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 17:01:52
Zitat von: Brockmann am 03 Juli 2014, 15:10:34
Ja, so sollte es gehen. Zwar nicht ganz so elegant wie erhofft. Aber Deine Bedenken bzgl. Schleifen durch Selbsttriggern kann ich nachvollziehen.

Danke für die Hinweise.

ja, vielleicht lasse ich mir noch etwas für Zeitintervalle einfallen.

z. B.

DOIF ([Schalter] eq "on" and [08:00-20:00])(set...

damit würde ich um 08:00 und 20:00 Uhr triggern und der Ausdruck wäre in dieser Zeit wahr.

ebenso würde bei

DOIF ([Schalter] and [08:00-])(set...

um 08:00 getriggert und zwischen 08:00 bis 00:00 wahr

bzw.

bis 20:00 Uhr

DOIF ([Schalter] eq "on" and [-20:00])(set...

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 Juli 2014, 17:13:54
Zitat von: Brockmann am 03 Juli 2014, 16:22:29
Was soll das DOIF denn bewirken?
Wenn zwischen 08:00 Uhr und 22:00 Uhr der Status von KLIMA_SZ auf "off" wechselt, wird die LED angeschaltet.
Wenn zwischen 08:00 Uhr und 22:00 Uhr der Status von KLIMA_SZ auf irgendwas anderes wechselt, wird die LED ausgeschaltet.
Nicht mehr, nicht weniger.

In jedem Fall tut das DOIF nur etwas, wenn sich am Status von Klima_SZ etwas ändert.
Es tut nichts um 08:00 Uhr und nichts um 22:00 Uhr, falls Du das erwartest.

mehr habe ich auch nicht erwartet, aber leider schaltet die Led nur wenn ich sie manuell schalte.
DOIF leider nicht.
Oder wird die led nur einmal ausgeschaltet, danach erst wieder am nächsten tag nach 8:00h ?

Kann es auch sein, das DOIF zwischenzeitlich manuell getätigte commandos nicht erkennt und nur seinen letzten last_cmd_event auswertet?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 17:47:43
Zitat von: satprofi am 03 Juli 2014, 17:13:54
mehr habe ich auch nicht erwartet, aber leider schaltet die Led nur wenn ich sie manuell schalte.
DOIF leider nicht.
Oder wird die led nur einmal ausgeschaltet, danach erst wieder am nächsten tag nach 8:00h ?
Kann es auch sein, das DOIF zwischenzeitlich manuell getätigte commandos nicht erkennt und nur seinen letzten last_cmd_event auswertet?
DOIF macht nur etwas, wenn sich sein Zustand verändert. Wenn zuletzt zwischen 08:00 Uhr und 22:00 Uhr set Klima_SZ off kam und erst am nächsten Tag kommt nun wieder set Klima_SZ off, dann wird nichts geschaltet, weil sich der Status aus Sicht von DOIF nicht verändert hat. Das DOIF kann ja nicht wissen, ob Du die LED zwischenzeitlich manuell ausgeschaltet hast oder nicht.
Dieses Verhalten kannst Du aber mit attr <NAME> do always ändern. Dann würde DOIF jedesmal die LED entsprechend schalten, wenn zwischen 08:00 und 22:00 Uhr ein Status-Event von Klima_SZ reinkommt.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 Juli 2014, 18:21:06
Heisst das, das während eines neustartes von fhem ein zwischenzeitliches event nicht von DOIF erkannt wird? wie kann man eine abfrage der verschiedenen state´s regelmässig erwirken?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 18:32:07
Zitat von: Damian am 03 Juli 2014, 17:01:52
ja, vielleicht lasse ich mir noch etwas für Zeitintervalle einfallen.
Vielleicht denkst Du über das Thema Intervalle auch etwas grundlegender nach. Sowohl bei DOIF als auch IF wäre es toll, wenn man Intervalle direkt angeben könnte, etwa
(40 < [Bad:humidity] < 70) oder vielleicht auch in einer anderen Syntax, wenn das einfacher handbar ist. Das macht den Code intuitiver und besser lesbar, finde ich.
(Mir ist klar, dass das durch Verwenden von Perl-Ausdrücken schon jetzt möglich ist, aber das macht es eben nicht intuitiver und lesbarer.)

Die Idee, beim Definieren von statischen Uhrzeit diese bei Erreichen jeweils einmal zu triggern, finde ich gut. Allerdings macht das einen kleinen, aber feinen Unterschied.
Jetzt-Zustand: Wenn im Zeitraum Z Bedingung B eintritt, führe Aktion A aus.
Dann-Zustand: Wenn Bedingung B gegeben ist, führen im Zeitraum Z Aktion A aus.

Ich bin mir nicht sicher, aber ich denke, es gibt für beide Varianten sinnvolle Anwendungsszenarien.

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 18:34:43
Zitat von: satprofi am 03 Juli 2014, 18:21:06
Heisst das, das während eines neustartes von fhem ein zwischenzeitliches event nicht von DOIF erkannt wird? wie kann man eine abfrage der verschiedenen state´s regelmässig erwirken?
Was hat das mit einem Neustart zu tun? Irgendwie reden wir aneinander vorbei, fürchte ich.
Vielleicht beschreibst Du mal etwas ausführlicher, was Du eigentlich vorhast?
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 Juli 2014, 18:41:14
Sorry fürs unverständnis.

Ich habe einige readings die einen actor über DOIF schalten. Wenn jetzt eine bedingung wahr ist wird geschalten, ok. aber was passiert wenn zwischenzeitlich ein anderes reading den state wechselt? egal ob autom. od. manuell? erkennt DOIF dies?

ebenso wenn fhem eine "pause" einlegt, in der zwischenzeit ein state umswitcht?

mein vorhaben ist, eine klima autom. schalten zu lassen, aber vielleicht zwischenzeitlich manuell einzugreifen, per fhem.
aber zur zeit wird nach dem manuellen eingriff von DOIF nichts mehr unternommen, und wenn es nur die Abfrage der raumtemperatur ist, die eigentlich die klima über DOIF schaltet.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 21:36:37
Zitat von: satprofi am 03 Juli 2014, 18:41:14
Sorry fürs unverständnis.

Ich habe einige readings die einen actor über DOIF schalten. Wenn jetzt eine bedingung wahr ist wird geschalten, ok. aber was passiert wenn zwischenzeitlich ein anderes reading den state wechselt? egal ob autom. od. manuell? erkennt DOIF dies?

ebenso wenn fhem eine "pause" einlegt, in der zwischenzeit ein state umswitcht?

mein vorhaben ist, eine klima autom. schalten zu lassen, aber vielleicht zwischenzeitlich manuell einzugreifen, per fhem.
aber zur zeit wird nach dem manuellen eingriff von DOIF nichts mehr unternommen, und wenn es nur die Abfrage der raumtemperatur ist, die eigentlich die klima über DOIF schaltet.

Das Modul arbeitet, wie die meisten FHEM-Module, ereignisgesteuert. D. h. eine Bedingung wird nur dann überprüft, wenn ein angegebenes Reading oder Status oder Timer (angaben in eckigen Klammern) ein Event auslöst, sonst nicht. Wenn du manuellen Modus berücksichtigen willst, dann musst du den mit in der Bedingung angeben (z. B. durch einen dummy oder sonst etwas). Oder du musst von außen das DOIF-Modul mit Attribut disable deaktivieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 22:06:25
Zitat von: Brockmann am 03 Juli 2014, 18:32:07
Vielleicht denkst Du über das Thema Intervalle auch etwas grundlegender nach. Sowohl bei DOIF als auch IF wäre es toll, wenn man Intervalle direkt angeben könnte, etwa
(40 < [Bad:humidity] < 70) oder vielleicht auch in einer anderen Syntax, wenn das einfacher handbar ist. Das macht den Code intuitiver und besser lesbar, finde ich.
(Mir ist klar, dass das durch Verwenden von Perl-Ausdrücken schon jetzt möglich ist, aber das macht es eben nicht intuitiver und lesbarer.)

Die Idee, beim Definieren von statischen Uhrzeit diese bei Erreichen jeweils einmal zu triggern, finde ich gut. Allerdings macht das einen kleinen, aber feinen Unterschied.
Jetzt-Zustand: Wenn im Zeitraum Z Bedingung B eintritt, führe Aktion A aus.
Dann-Zustand: Wenn Bedingung B gegeben ist, führen im Zeitraum Z Aktion A aus.

Ich bin mir nicht sicher, aber ich denke, es gibt für beide Varianten sinnvolle Anwendungsszenarien.

Ich werde mich hüten selbst logische Abfragen auszuwerten, dass habe ich bereits beim THRESHOLD-Modul versucht. Über eine AND bzw. OR-Verknüpfung bin ich nicht gekommen. Die Besonderheit des DOIF-Moduls wie auch beim IF ist, dass ich die Eigenschaften eines Interpreters (hier Perl) ausnutze. Und genau diese Eigenschaft macht die Sache recht flexibel.

Die Zeitabfragen mit $hms habe ich erst mal so übernommen, wie sie auch heute schon unzählig in Perl-Konstrukten mit if immer wieder genutzt werden. Es ist allerdings aus meiner Sicht eher eine Notlösung. Daher werde ich die bereits angesprochene Intervallangabe für Zeit mit Triggerung am Anfang (Zustand: wahr) und am Ende (Zustand: falsch) und der Möglichkeit der Abfrage in der Zwischenzeit (Zustand: wahr) noch einbauen, dann haben sich die umständlichen Angaben mit $hms auch erledigt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Juli 2014, 22:46:30
Zitat von: Damian am 03 Juli 2014, 22:06:25
Ich werde mich hüten selbst logische Abfragen auszuwerten, dass habe ich bereits beim THRESHOLD-Modul versucht. Über eine AND bzw. OR-Verknüpfung bin ich nicht gekommen. Die Besonderheit des DOIF-Moduls wie auch beim IF ist, dass ich die Eigenschaften eines Interpreters (hier Perl) ausnutze. Und genau diese Eigenschaft macht die Sache recht flexibel.

Es ginge ja nicht so sehr darum, selbst logische Abfragen auszuwerten, sondern dem Benutzer das Definieren von Intervallen möglichst einfach zu machen.
(40 < [Bad:humidity] < 70) müssten ja nur intern in ([Bad:humidity] > 40 and [Bad:humidity] < 70) umgesetzt und so an den Interpreter weitergereicht werden.
Aber mag sein, dass ich da zu simpel denke und sich das nicht so ohne weiteres umsetzen lässt.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Juli 2014, 22:50:39
Zitat von: Brockmann am 03 Juli 2014, 22:46:30
Es ginge ja nicht so sehr darum, selbst logische Abfragen auszuwerten, sondern dem Benutzer das Definieren von Intervallen möglichst einfach zu machen.
(40 < [Bad:humidity] < 70) müssten ja nur intern in ([Bad:humidity] > 40 and [Bad:humidity] < 70) umgesetzt und so an den Interpreter weitergereicht werden.
Aber mag sein, dass ich da zu simpel denke und sich das nicht so ohne weiteres umsetzen lässt.

Parser ist eine Wissenschaft für sich.

Ich kümmere mich z. Zt. nur um "eckige Klammern" und schaue, ob zu jeder Klammer auf eine Klammer zu existiert, und kümmer mich in der Abfrage sonst um nichts :)

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 04 Juli 2014, 09:05:43

Zitat von: Damian am 03 Juli 2014, 13:01:51
Ich kenne nicht alle Bedingungen, die bei dir in der Realität vorkommen können, daher mal Folgendes unter Vorbehalt:

([mytwilight:aktEvent] eq "ss_weather" and ($hour > 15 or [16:01])) (set LICHT_TERRASSE_KUECHE an) DOELSEIF ([ROLLLADEN_KUECHE] eq "zu" and [ROLLLADEN_WZ_4] eq "zu" and $hour > 15) (set LICHT_TERRASSE_KUECHE aus)

Wenn die Rollläden vor 16:00 Uhr schon unten waren, dann passiert hier allerdings nichts.

Du kannst auch im DOELSEIF-Fall noch eine Zeitangabe zum Triggern angeben, wenn du zum Ausschalten des Lichtes auf Nummer sicher gehen willst.

Gruß

Damian

Das hat jetzt so funktioniert, wie ich es mir vorstelle.
Noch eine Frage zum Verständnis:
Muss ich in der Definition das mit der Uhrzeit [16:01] drin haben?
Oder würde es reichen einfach nur abzufragen ob $hour > 15 ist?

Gruß
Jens


Gesendet von meinem iPhone mit Tapatalk
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 04 Juli 2014, 10:02:53
Zitat von: Jens_B am 04 Juli 2014, 09:05:43
Muss ich in der Definition das mit der Uhrzeit [16:01] drin haben?
Oder würde es reichen einfach nur abzufragen ob $hour > 15 ist?
Das [16:01] sorgt dafür, dass das DOIF um 16:01 einmal getriggert wird.
Das deckt den Fall ab, dass ss_weather vor 16:00 Uhr erfolgt. Dann würde das DOIF sonst nämlich gar nicht schalten.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 04 Juli 2014, 10:32:15
Zitat von: Damian am 03 Juli 2014, 22:50:39
Parser ist eine Wissenschaft für sich.
Ich kümmere mich z. Zt. nur um "eckige Klammern" und schaue, ob zu jeder Klammer auf eine Klammer zu existiert, und kümmer mich in der Abfrage sonst um nichts :)
Danke für die Erklärung.

Und für DOIF und IF sowieso. Mancher Purist mag das für überflüssig halten, weil es ja auch vorher schon "irgendwie" ging.
Ich finde aber, dass beide wesentlich intuitivere und lesbarere Definitionen ermöglichen, weil man dabei seltener die FHEM-Ebene verlassen muss und sich auch deutlich weniger mit Semikolon, geschweiften Klammern und Anführungszeichen rumschlagen muss. Gerade der typische FHEM-Anwender, der nur hin und wieder mal etwas an seiner Konfiguration ergänzen oder optimieren möchte, ohne sich jedes Mal wieder in die Feinheiten der Syntax(en) einzuarbeiten, kann davon profitieren. Und auch der einfachere Zugriff auf Readings ist für mich ein Riesenfortschritt. :)

Das Konzept von DOIF muss man vielleicht noch etwas besser vermitteln, wie man hier im Thread sieht. Aber durch die Ergänzung von Zeitintervallen dürfte es auch nochmal stringenter und intuitiver werden.

Also, mach gerne weiter so!  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 04 Juli 2014, 10:50:27
Zitat von: Brockmann am 04 Juli 2014, 10:02:53
Das [16:01] sorgt dafür, dass das DOIF um 16:01 einmal getriggert wird.
Das deckt den Fall ab, dass ss_weather vor 16:00 Uhr erfolgt. Dann würde das DOIF sonst nämlich gar nicht schalten.

Danke für die Erläuterung :-).
Ich verstehe das DOIF Modul immer besser. @Damian danke für das DOIF; ich glaube es nimmt mir ein paar Dinge ab und erleichtert mir ein paar Definitionen
(Zur Zeit hab ich ja nur einige Rollladen und 3 Beleuchtungen, ich muß mich jetzt mal um die Oberfläche kümmern, damit er WAF erhöht wird ;)).

Gruß
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 04 Juli 2014, 13:59:47
Ich finde das DOIF sehr schön, habe es auch getestet, damit kann ich einiges zusammenfassen. Dabei fiel mir ein "Fehler" auf, leider eine zeitliche Verzögerung die unschön ist.

Bei mir sind fürs Licht Stromstoßschalter in der Wohnung verbaut (also 12V-Taster als Lichtschalter, im Schaltkasten sind dann Stromstoßschalter, die bei einem 12V-Stromstoß über den daran angeschlossenen Umsetzer die Lampe ein/aus schalten.
Am Raspberry habe ich ein PiFace. Zum Schalten des Lichts muss das Relais für den Stromstoßschalter zur Simulation eines Tasterdrucks nur kurz anziehen und gleich danach wieder loslassen. Ansonsten brummt es mächtig im Schrank, weil der Stromstoßschalter einen Dauerstrom bekommt.

Um das Licht zu schalten, wird über ein anderes DOIF "set Licht_[...] schalten" gesendet, welches mit dem nachfolgenden DOIF umgesetzt werden soll:
([Licht_Flur] eq "schalten") (set PIFACE 0 1,sleep 0.01,set PIFACE 0 0)
DOELSEIF
([Licht_Kammer] eq "schalten") (set PIFACE 1 1,sleep 0.01,set PIFACE 1 0)
DOELSEIF
([Licht_Kueche] eq "schalten") (set PIFACE 2 1,sleep 0.01,set PIFACE 2 0)
DOELSEIF
([Licht_Bad] eq "schalten") (set PIFACE 3 1,sleep 0.01,set PIFACE 3 0)
DOELSEIF
([Licht_Katzenzimmer] eq "schalten") (set PIFACE 4 1,sleep 0.01,set PIFACE 4 0)
DOELSEIF
([Licht_Schlafzimmer] eq "schalten") (set PIFACE 5 1,sleep 0.01,set PIFACE 5 0)


Also: Relais anziehen, 0,01 Sekunde warten (ich habe es anfangs mit 0,5 (bzw. 0.5) probiert und hatte das gleiche Ergebnis) und anschließend das Relais loslassen.

Das Problem: Das Relais wird mehr als nur 0,01 Sekunden gehalten, sondern etwa 5 Sekunden. Vorher hatte ich für jede Lampe ein eigenes Notify, da hatte es halbwegs funktioniert (es war nie mehr als 1 Sekunde).
Und: Wenn ich den alle Lampen schalte und deshalb für alle Lampen der Schaltbefehl kommt, dann werden nacheinander erst alle Relais angezogen, kurz gewartet, und danach nacheinander wieder losgelassen. Die Relais sind damit ca. 10 Sekunden unter Strom. Die Stromstoßschalter quittieren das mit einem kräftigen Brummton, der nicht gesund klingt.

Warum kommen hier so lange Pausen rein bzw. wie bekomme ich die raus?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 04 Juli 2014, 14:32:23
Zitat von: MaJu am 04 Juli 2014, 13:59:47
Warum kommen hier so lange Pausen rein bzw. wie bekomme ich die raus?
Kann es sein, dass Du bei Deinem bisherigen notify-Konstrukt das Perl-sleep verwendet hast? Das unterscheidet sich, weil es FHEM für den gewählten Zeitraum komplett anhält und dann weiterlaufen lässt.
Davon wird zwar allgemein abgeraten, aber in diesem speziellen Fall könnte es sinnvoll sein.
Das FHEM-Perl ist non-blocking, also läuft FHEM während des Sleep weiter und arbeitet seine Queue weiter ab. Davon hängt es dann ab, wann das DOIF wieder an der Reihe ist, denke ich.
Und wenn das DOIF gleich für mehrere Lichter getriggert wird, könnte das den beschriebenen Effekt erklären.
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 04 Juli 2014, 15:16:47
Hallo,

ich habe mein Treppenhauslicht mit notifies gebaut und wollte das nun testweise mit DOIF umbauen. Dabei bin ich auf folgendes Problem gestoßen: Sobald der Bewegungsmelder eine Bewegung erkennt, wird das Licht eingeschaltet und ein at für das Ausschalten definiert, sofern dieses noch nicht existiert anderenfalls wird es modifiziert. Und hier liegt mein Problem: zur Definition des DOIF exisitiert das notify natürlich noch nicht, was bei der Definition von DOIF einen Fehler generiert und kein DOIF definiert.

Gibt es hierfür eine Lösung?

Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Juli 2014, 15:39:04
Zitat von: RoBra81 am 04 Juli 2014, 15:16:47
Hallo,

ich habe mein Treppenhauslicht mit notifies gebaut und wollte das nun testweise mit DOIF umbauen. Dabei bin ich auf folgendes Problem gestoßen: Sobald der Bewegungsmelder eine Bewegung erkennt, wird das Licht eingeschaltet und ein at für das Ausschalten definiert, sofern dieses noch nicht existiert anderenfalls wird es modifiziert. Und hier liegt mein Problem: zur Definition des DOIF exisitiert das notify natürlich noch nicht, was bei der Definition von DOIF einen Fehler generiert und kein DOIF definiert.

Gibt es hierfür eine Lösung?

Ronny

Wie sieht dein Konstrukt genau aus? Das kann man evtl. anders definieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Juli 2014, 15:41:02
Zitat von: MaJu am 04 Juli 2014, 13:59:47

Das Problem: Das Relais wird mehr als nur 0,01 Sekunden gehalten, sondern etwa 5 Sekunden. Vorher hatte ich für jede Lampe ein eigenes Notify, da hatte es halbwegs funktioniert (es war nie mehr als 1 Sekunde).
Und: Wenn ich den alle Lampen schalte und deshalb für alle Lampen der Schaltbefehl kommt, dann werden nacheinander erst alle Relais angezogen, kurz gewartet, und danach nacheinander wieder losgelassen. Die Relais sind damit ca. 10 Sekunden unter Strom. Die Stromstoßschalter quittieren das mit einem kräftigen Brummton, der nicht gesund klingt.

Warum kommen hier so lange Pausen rein bzw. wie bekomme ich die raus?

Schau zunächst wie lange die Pausen sind, wenn du in der Kommandozeile Folgendes eingibst:

IF (1) (set PIFACE 0 1,sleep 0.01,set PIFACE 0 0)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 04 Juli 2014, 15:44:36
Hier mein notify:


define OG.hf.BM.Treppe.not.inaktiv notify OG.hf.BM.Treppe.*51200.* IF (!$defs{'OG.hf.LI.Treppe.at.off'})
(
  define OG.hf.LI.Treppe.at.off at +00:00:05 set OG.hf.LI.Treppe off,
  attr OG.hf.LI.Treppe.at.off room Hausflur
)
ELSE
(
  IF ([OG.hf.LI.Treppe.at.off:&TRIGGERTIME] - time < 5)
  (
    modify OG.hf.LI.Treppe.at.off +00:00:05
  )
)
;
IF (!$defs{'OG.hf.LI.Schuhschrank.at.off'})
(
  define OG.hf.LI.Schuhschrank.at.off at +00:00:10 set OG.hf.LI.Schuhschrank off,
  attr OG.hf.LI.Schuhschrank.at.off room Hausflur
)
ELSE
(
  IF ([OG.hf.LI.Schuhschrank.at.off:&TRIGGERTIME] - time < 10)
  (
    modify OG.hf.LI.Schuhschrank.at.off +00:00:10
  )
)


... und folgendes DOIF wollte ich daraus machen:


define OG.hf.LI.Xxx.DI DOIF ([OG.hf.BM.Treppe:sensor] eq "51200")
(
  IF (!$defs{'OG.hf.LI.Treppe.at.off'})
  (
    define OG.hf.LI.Treppe.at.off at +00:00:05 set OG.hf.LI.Treppe off,
    attr OG.hf.LI.Treppe.at.off room Hausflur
  )
  ELSE
  (
    IF ([OG.hf.LI.Treppe.at.off:&TRIGGERTIME] - time < 5)
    (
      modify OG.hf.LI.Treppe.at.off +00:00:05
    )
  )
  ,
  IF (!$defs{'OG.hf.LI.Schuhschrank.at.off'})
  (
    define OG.hf.LI.Schuhschrank.at.off at +00:00:10 set OG.hf.LI.Schuhschrank off,
    attr OG.hf.LI.Schuhschrank.at.off room Hausflur
  )
  ELSE
  (
    IF ([OG.hf.LI.Schuhschrank.at.off:&TRIGGERTIME] - time < 10)
    (
      modify OG.hf.LI.Schuhschrank.at.off +00:00:10
    )
  )
)
DOELSEIF ([OG.hf.BM.Treppe:sensor] eq "0")
(
  set Test an
)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Juli 2014, 16:20:07
Zitat von: RoBra81 am 04 Juli 2014, 15:44:36
Hier mein notify:


define OG.hf.BM.Treppe.not.inaktiv notify OG.hf.BM.Treppe.*51200.* IF (!$defs{'OG.hf.LI.Treppe.at.off'})
(
  define OG.hf.LI.Treppe.at.off at +00:00:05 set OG.hf.LI.Treppe off,
  attr OG.hf.LI.Treppe.at.off room Hausflur
)
ELSE
(
  IF ([OG.hf.LI.Treppe.at.off:&TRIGGERTIME] - time < 5)
  (
    modify OG.hf.LI.Treppe.at.off +00:00:05
  )
)
;
IF (!$defs{'OG.hf.LI.Schuhschrank.at.off'})
(
  define OG.hf.LI.Schuhschrank.at.off at +00:00:10 set OG.hf.LI.Schuhschrank off,
  attr OG.hf.LI.Schuhschrank.at.off room Hausflur
)
ELSE
(
  IF ([OG.hf.LI.Schuhschrank.at.off:&TRIGGERTIME] - time < 10)
  (
    modify OG.hf.LI.Schuhschrank.at.off +00:00:10
  )
)


... und folgendes DOIF wollte ich daraus machen:


define OG.hf.LI.Xxx.DI DOIF ([OG.hf.BM.Treppe:sensor] eq "51200")
(
  IF (!$defs{'OG.hf.LI.Treppe.at.off'})
  (
    define OG.hf.LI.Treppe.at.off at +00:00:05 set OG.hf.LI.Treppe off,
    attr OG.hf.LI.Treppe.at.off room Hausflur
  )
  ELSE
  (
    IF ([OG.hf.LI.Treppe.at.off:&TRIGGERTIME] - time < 5)
    (
      modify OG.hf.LI.Treppe.at.off +00:00:05
    )
  )
  ,
  IF (!$defs{'OG.hf.LI.Schuhschrank.at.off'})
  (
    define OG.hf.LI.Schuhschrank.at.off at +00:00:10 set OG.hf.LI.Schuhschrank off,
    attr OG.hf.LI.Schuhschrank.at.off room Hausflur
  )
  ELSE
  (
    IF ([OG.hf.LI.Schuhschrank.at.off:&TRIGGERTIME] - time < 10)
    (
      modify OG.hf.LI.Schuhschrank.at.off +00:00:10
    )
  )
)
DOELSEIF ([OG.hf.BM.Treppe:sensor] eq "0")
(
  set Test an
)


Ist schon lustig zu sehen, was ihr da so alles programmiert. So hast du mit DOIF kaum einen Vorteil gegenüber einem notify. Wann liefert bei dir der Sensor 51200 und wann 0?  So etwas sollte man eigentlich als Zweizeiler hinbekommen.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 04 Juli 2014, 16:25:39
Zitat von: RoBra81 am 04 Juli 2014, 15:44:36
Hier mein notify:
Wenn ich das Szenario richtig verstehe, sind die Schalter direkt mit dem Bewegungsmelder gepeered, werden also unabhängig von FHEM direkt geschaltet, wenn der Bewegungsmelder anspringt?
Und das notify/DOIF soll dafür sorgen, dass sie nach x Minuten ohne weiteren Kontakt des Bewegungsmelders wieder ausgehen?

Ohne die genauen Details zu kennen: Könnte man nicht ganz einfach bei jedem Auslösen des Bewegungsmelders ein set OG.hf.LI.Treppe on-for-timer 300 hinterschicken. Dann kümmert sich FHEM selbst um das AT, was nach fünf Minuten ohne weitere Ereignisse abschaltet. Das wäre dann die ganz simple Lösung - unabhängig von Notify oder DOIF.
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 04 Juli 2014, 17:37:36
Meine DOIF Jalousie-Steuerung kam an den sonnigen Tagen gestern und heute erstmals erfolgreich zum Einsatz. Allerdings tauchen die Events immer doppelt im Log auf, jemand eine Idee warum?

Mein DOIF:

define DI_sz_Jalousie DOIF ([MeinWetter:temp_c] > 20 and [myTwilight:compasspoint] =~ m/south/i and [sz_Jalousie] eq "on" and ([MeinWetter:condition] eq "sonnig" or [MeinWetter:condition] eq "heiter" or [MeinWetter:condition] eq "teilweise wolkig")) (set sz_Jalousie 30) DOELSEIF ([myTwilight:compasspoint] eq "west" and [sz_Jalousie] eq "30") (set sz_Jalousie on)

Log von gestern heute:

2014.07.03 10:45:27 3: CUL_HM set sz_Jalousie 30
2014.07.03 10:45:27 3: CUL_HM set sz_Jalousie 30
2014.07.03 18:21:04 3: CUL_HM set sz_Jalousie on
2014.07.03 18:21:04 3: CUL_HM set sz_Jalousie on
2014.07.03 21:43:56 3: CUL_HM set sz_Jalousie off
2014.07.04 05:45:00 3: CUL_HM set sz_Jalousie on
2014.07.04 10:36:14 3: CUL_HM set sz_Jalousie 30
2014.07.04 10:36:14 3: CUL_HM set sz_Jalousie 30
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 04 Juli 2014, 17:42:17
Hallo,

ZitatAllerdings tauchen die Events immer doppelt im Log auf, jemand eine Idee warum?
Nein, nicht immer.

Das passiert aber wenn von den Bedingungen mehr als eine triggert (und das ist zwangsläufig der Fall) und dann auch noch wahr ist.

Schau dir mal deine Liste an:
Zitat([MeinWetter:temp_c] > 20 and [myTwilight:compasspoint] =~ m/south/i and [sz_Jalousie] eq "on" and ([MeinWetter:condition] eq "sonnig" or [MeinWetter:condition] eq "heiter" or [MeinWetter:condition] eq "teilweise wolkig"))
Ich vermute das wäre in einem normalen notify das regexp auf das das notify triggern soll.

Grüße

Edith: Grad gesehen - and [sz_Jalousie] eq "on"
Das müsste eigentlich dazu führen das das DOIF nur einmal die Jalousie auf 30 setzt  :o
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 04 Juli 2014, 17:56:14
Zitat von: Damian am 04 Juli 2014, 16:20:07
Ist schon lustig zu sehen, was ihr da so alles programmiert. So hast du mit DOIF kaum einen Vorteil gegenüber einem notify. Wann liefert bei dir der Sensor 51200 und wann 0?  So etwas sollte man eigentlich als Zweizeiler hinbekommen.

Gruß

Damian

Hat mich auch eine Menge Gehirnschmalz gekostet  :)

Ich kann ja mal das ganze Szenario posten, damit es verständlicher wird: Ich habe im Flur zwei Lampen, einen Bewegungsmelder und zwei Taster. Wenn der Bewegungsmelder eine Bewegung erkennt (Sensor 0) wird über ein Notify (das habe ich hier nicht gepostet) das Licht in Abhängigkeit von der Dämmerung angemacht und gegebenenfalls vorhandene Timer (at) die das Licht ausschalten würden gelöscht, wenn diese eine Restzeit kleiner 10 bzw. 5 Sekunden haben (beide Lampen haben einen eigenen Ausschalttimer, da ich diese unterschiedlich lange anlassen möchte). Erkennt der Bewegungsmelder keine Bewegung mehr wird mit dem gezeigten notify ein Timer (at) definiert, um die Lichter auszuschalten. Dies passiert aber ebenfalls nur, wenn noch kein Timer definiert ist oder dieser eine Restzeit kleiner 10 bzw. 5 Sekunden hat. Hintergrund ist, dass ich über die Taster  ebenfalls das Licht anschalten und Timer zum abschalten definiere, die für 1 bzw. 30 Minuten laufen (kurzer oder langer Tastendruck).

Der Grund, dass ich hierfür diese ausgefallenen ("lustigen") notifies nutze ist, dass ich Homematic-Devices (CUL) nutze, die kein on-for-timer unterstützen...
Titel: Antw:neues Modul DOIF
Beitrag von: Bombjack am 04 Juli 2014, 18:02:53
ZitatNein, nicht immer.

Das einfache on und off morgens und abends wird über ein at getriggert, hätte ich weglassen sollen. Die DOIF Events tagsüber kommen bisher immer doppelt.

ZitatDas passiert aber wenn von den Bedingungen mehr als eine triggert (und das ist zwangsläufig der Fall) und dann auch noch wahr ist.

Ich glaube jetzt habe ich es verstanden. Das Auf und Zufahren wird durch MyTwilight angetriggert und anschliessend löst die Positionsveränderung selbst erneut einen Trigger aus, da ich die Position im DOIF mit abfrage - richtig? Hmm aber wie könnte ich das vermeiden? Wenn ich das weglasse gibt es auch mehrfach Schaltbefehle, da die MyTwilight Aktualisierungsintervalle recht kurz sind.
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 04 Juli 2014, 19:46:15
Zitat von: Damian am 04 Juli 2014, 15:41:02
Schau zunächst wie lange die Pausen sind, wenn du in der Kommandozeile Folgendes eingibst:
IF (1) (set PIFACE 0 1,sleep 0.01,set PIFACE 0 0)

Hallo Damian, danke für die Hilfe. Dies ergibt die gleiche Verzögerung. Gefühlt etwas schneller geht "set PIFACE 0 1;sleep 0.01;set PIFACE 0 0", das kann aber auch täuschen.

Ich hatte gestern nicht nur bei den jetzigen 2 Lampen von notify auf DOIF umgestellt, sondern auch weitere Lampen und damit weitere DOIFs angelegt. Eventuell wurde das System dadurch allgemein etwas träge.

Da in der Abarbeit scheinbar ohnehin eine Pause gemacht wird, habe ich den sleep-Befehl komplett rausgenommen. Und komisch, jetzt werden bei den Lampen nacheinander die Relais einzeln vollständig angesprochen, also erst ein Relais angezogen und losgelassen, danach das nächste angezogen und losgelassen und so weiter.
Damit kann ich sehr gut leben.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 09:08:29
Zitat von: RoBra81 am 04 Juli 2014, 17:56:14
Hat mich auch eine Menge Gehirnschmalz gekostet  :)

Ich kann ja mal das ganze Szenario posten, damit es verständlicher wird: Ich habe im Flur zwei Lampen, einen Bewegungsmelder und zwei Taster. Wenn der Bewegungsmelder eine Bewegung erkennt (Sensor 0) wird über ein Notify (das habe ich hier nicht gepostet) das Licht in Abhängigkeit von der Dämmerung angemacht und gegebenenfalls vorhandene Timer (at) die das Licht ausschalten würden gelöscht, wenn diese eine Restzeit kleiner 10 bzw. 5 Sekunden haben (beide Lampen haben einen eigenen Ausschalttimer, da ich diese unterschiedlich lange anlassen möchte). Erkennt der Bewegungsmelder keine Bewegung mehr wird mit dem gezeigten notify ein Timer (at) definiert, um die Lichter auszuschalten. Dies passiert aber ebenfalls nur, wenn noch kein Timer definiert ist oder dieser eine Restzeit kleiner 10 bzw. 5 Sekunden hat. Hintergrund ist, dass ich über die Taster  ebenfalls das Licht anschalten und Timer zum abschalten definiere, die für 1 bzw. 30 Minuten laufen (kurzer oder langer Tastendruck).

Der Grund, dass ich hierfür diese ausgefallenen ("lustigen") notifies nutze ist, dass ich Homematic-Devices (CUL) nutze, die kein on-for-timer unterstützen...

on-for-timer funktioniert bei mir auch bei HM-Devices (mit HM-LAN-Adapter). Wird wohl softwareseitig gelöst sein.


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 09:13:09
Zitat von: Bombjack am 04 Juli 2014, 18:02:53
Wenn ich das weglasse gibt es auch mehrfach Schaltbefehle, da die MyTwilight Aktualisierungsintervalle recht kurz sind.

Wenn sich der Zustand von MyTwilight aber nicht ändert, dann ist es egal, weil bei DOIF standardmäßig nur einmal geschaltet wird und erst dann wieder, wenn sich der Zustand ändert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 05 Juli 2014, 10:53:38
Zitat von: Damian am 05 Juli 2014, 09:08:29
on-for-timer funktioniert bei mir auch bei HM-Devices (mit HM-LAN-Adapter). Wird wohl softwareseitig gelöst sein.

Ich habe Wired-Devices (HMW_LC_Sw2_DR) an HM485, da gibt's kein on-for-timer...
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 11:02:54
Hallo,

sorry OT:

ZitatIch habe Wired-Devices (HMW_LC_Sw2_DR) an HM485, da gibt's kein on-for-timer...
Dann würde ich an deiner Stelle mal eben im Homematic-Bereich Bescheid geben  ;)
Die Jungs dort sind eigentlich recht flott und haben das recht schnell eingebaut - wenn es sich einfach lösen lässt.
Nur weil es das noch nicht gibt heisst es ja nicht das es nicht geht  ;D
BTT:

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 11:08:20
Zitat von: RoBra81 am 05 Juli 2014, 10:53:38
Ich habe Wired-Devices (HMW_LC_Sw2_DR) an HM485, da gibt's kein on-for-timer...

Das wundert mich aber, weil es in CUL_HM.pm nachgebildet wurde.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 11:12:22
Evtl. fehlt ja nur ein update  8)
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 05 Juli 2014, 16:34:25
Die Homematic wired Geräte sind imho nicht in CUL_HM drin sondern haben ein eigenes Modul. Mal angenommen, on-for-timer würde irgendwann gehen, bekäme ich den heraus, ob und wie lange der Timer schon läuft? Das brauche ich ja für mein Szenario...
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 16:48:50
Hallo,

HM-wired wird durch 10_HM485.pm eingebunden wenn ich den Beitrag richtig gelesen habe.
Melde dich doch einfach mal dort und frag Dirk (das ist glaube ich der Modulautor) ob er on-/off-for-timer in das Modul einbauen könnte.
Thomas hat das gleiche für Somfy gemacht.
Die Modulautoren müssen nur danach gefragt/darauf hingewiesen/darum gebeten werden.

Wie lange der Timer dann schon läuft ist das kleinere Problem da on-/off-for-timer, wenn der Aktor das nicht direkt unterstützt, sowieso in FHEM abgebildet werden muss als normales at das den Aktor nach der Zeit wieder aus-/einschaltet.
Und an die Daten in FHEM sollte man schon dran kommen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: krikan am 05 Juli 2014, 16:55:18
ZitatMal angenommen, on-for-timer würde irgendwann gehen
on-for-timer geht bereits jetzt, wenn Du den Umweg über readingsProxy gehst http://www.fhemwiki.de/wiki/ReadingsProxy .
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 17:26:15
Zitat von: RoBra81 am 05 Juli 2014, 16:34:25
Die Homematic wired Geräte sind imho nicht in CUL_HM drin sondern haben ein eigenes Modul. Mal angenommen, on-for-timer würde irgendwann gehen, bekäme ich den heraus, ob und wie lange der Timer schon läuft? Das brauche ich ja für mein Szenario...

Du hast meine Frage nicht genau beantwortet, wann 51200 kommt und wann 0. Ich gehe mal davon aus, dass bei Bewegung 51200 kommt, dann würde mit:

define OG.hf.LI.Xxx.DI DOIF ([OG.hf.BM.Treppe:sensor] eq "51200") (set OG.hf.LI.Treppe on-for-timer 5)
attr OG.hf.LI.Xxx.DI do always


dein Treppenlicht bei erster Bewegung angehen und bei jeder weiteren Bewegung innerhalb von 5 Sekunden, um weitere 5 Sekunden verlängert und wenn keine Bewegung innerhalb von 5 Sekunden kommt wieder ausgehen.

Das war´s.

Ich werde mir noch etwas für DOIF einfallen lassen, dass man auch solche Fälle ohne on-for-timer mit einer Zeile erledigen kann, sozusagen, als Gegenstück zu wait.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 17:32:28
Hallo,

ZitatIch werde mir noch etwas für DOIF einfallen lassen, dass man auch solche Fälle ohne on-for-timer mit einer Zeile erledigen kann, so zu sagen, als Gegenstück zu wait.
Steht dir natürlich frei das zu tun  ;)

Ich würde aber eher favorisieren das on-/off-for-timer in die jeweiligen Device-Module mit aufgenommen wird.
Dann haben auch diejenigen etwas davon die weder IF noch DOIF verwenden und du musst Dir nicht noch zusätzlich Gedanken machen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 17:34:47
Zitat von: Puschel74 am 05 Juli 2014, 17:32:28
Hallo,
Steht dir natürlich frei das zu tun  ;)

Ich würde aber eher favorisieren das on-/off-for-timer in die jeweiligen Device-Module mit aufgenommen wird.
Dann haben auch diejenigen etwas davon die weder IF noch DOIF verwenden und du musst Dir nicht noch zusätzlich Gedanken machen.

Grüße

ja, on-for-timer würde allerdings je nach Gerätetyp (insb. FS20) ein Kommando an das Gerät schicken und unnötig Traffic produzieren, das würde bei DOIF nicht passieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 17:40:58
Hallo,

Zitatja, on-for-timer würde allerdings je nach Gerätetyp (insb. FS20) ein Kommando an das Gerät schicken und unnötig Traffic produzieren, das würde bei DOIF nicht passieren.

Sorry aber das verteh ich nicht ganz - abgesehen davon das FS20 on-/off-for-timer im Gerät direkt unterstützt.

Wenn ich ein FS20-Device mit on-for-timer einschalte läuft im Device die Zeit ab.
FHEM sendet kein off mehr an das Gerät also nur ein! Sendebefehl.

Wenn ein Device on-/off-for-timer nicht direkt unterstützt und es im Devicemodul nicht nachgebaut ist muss ich
a) dem Gerät ein on senden
b) ein at anlegen (lassen) das nach Zeit x dem Gerät ein off sendet.
Wenn im Devicemodul on-/off-for-timer nachgebildet ist muss ich
a) dem Gerät ein on senden
b) das Modul legt mir das at an und sendet danach ein off.

Im Vergleich zu FS20 habe ich dabei aber jedesmal 2 Sendebefehle.

Grüße

Edith: achso ja DOIF:
Wie willst du das dann mit DOIF lösen ohne dem Gerät ein off zu senden?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 17:48:37
Zitat von: Puschel74 am 05 Juli 2014, 17:40:58

Wenn ich ein FS20-Device mit on-for-timer einschalte läuft im Device die Zeit ab.
FHEM sendet kein off mehr an das Gerät also nur ein! Sendebefehl.


Das sehe ich anders, bei jeder Bewegung wird set... on_for-timer an das FS20-Gerät gesendet und wenn du dich länger vor deinem Bewegungsmelder bewegst, dann wird irgendwann die 1%-Regel zuschlagen und dann wird´s dunkel ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 17:56:37
Hallo,

ah, das meinst du.

Ja das stimmt.
Daher habe ich das in meinen Codes bereits abgefangen  ;)

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Juli 2014, 18:00:45
Zitat von: Puschel74 am 05 Juli 2014, 17:56:37
Hallo,

ah, das meinst du.

Ja das stimmt.
Daher habe ich das in meinen Codes bereits abgefangen  ;)

Grüße

genau, und deswegen programmiert sich jeder seine if-Abfragen, obwohl man für solch einen Standardfall meiner Meinung nach, mit einem Einzeiler auskommen müsste.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Juli 2014, 21:45:31
Hallo,

das
ZitatDaher habe ich das in meinen Codes bereits abgefangen
war mal wieder etwas zu kurz gedacht von mir.

Ich hab die Meldezeiten der Bewegungsmelder auf die on-for-timer-Zeiten der Aktoren abgestimmt.
Wenn der Aktor on-for-timer 120 Sekunden hat dann meldet der Bewegungsmelder frühestens nach 115 Sekunden wieder wenn er noch eine Bewegung erkennt.
Ich hab auch Aktoren die on-for-timer 1920 Sekunden haben (FS20 kann nur so "krumme" Werte wenn es länger geht) - der Badezimmerventilator ist einer davon.
Da meldet der Bewegungsmelder auch nur alle x Sekunden (ich muss nochmal nachschauen wann genau) eine erkannte Bewegung.

Ob das mit allen Bewegungsmelder ght weiß ich nicht und denke ich mal nicht.
Aber FS20-BM können dahingehend eingestellt werden.
Ich denke mal das HM-BW das auch können.
Das würde ja auch im Hinblick auf die Batterielebensdauer Sinn machen nicht alle a Sekunden eine erkannte Bewegung zu melden (wobei a die kürzeste Zeit im BM ist).

Von daher wäre es auch besser den BM dahingehend zu programmieren und du müstest dir wieder keinen Kopf machen wie du das im DOIF abfangen kannst  ;)

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Juli 2014, 09:42:59
Zitat von: Puschel74 am 05 Juli 2014, 21:45:31
Hallo,

daswar mal wieder etwas zu kurz gedacht von mir.

Ich hab die Meldezeiten der Bewegungsmelder auf die on-for-timer-Zeiten der Aktoren abgestimmt.
Wenn der Aktor on-for-timer 120 Sekunden hat dann meldet der Bewegungsmelder frühestens nach 115 Sekunden wieder wenn er noch eine Bewegung erkennt.
Ich hab auch Aktoren die on-for-timer 1920 Sekunden haben (FS20 kann nur so "krumme" Werte wenn es länger geht) - der Badezimmerventilator ist einer davon.
Da meldet der Bewegungsmelder auch nur alle x Sekunden (ich muss nochmal nachschauen wann genau) eine erkannte Bewegung.

Ob das mit allen Bewegungsmelder ght weiß ich nicht und denke ich mal nicht.
Aber FS20-BM können dahingehend eingestellt werden.
Ich denke mal das HM-BW das auch können.
Das würde ja auch im Hinblick auf die Batterielebensdauer Sinn machen nicht alle a Sekunden eine erkannte Bewegung zu melden (wobei a die kürzeste Zeit im BM ist).

Von daher wäre es auch besser den BM dahingehend zu programmieren und du müstest dir wieder keinen Kopf machen wie du das im DOIF abfangen kannst  ;)

Grüße

ja, der Teufel steckt oft im Detail. Dennoch möchte ich mal aufzeigen, wie man so etwas jetzt schon mit DOIF ohne eigene Timer-Verwaltung realisieren kann.

Fall 1 Bewegungsmelder sendet on bei Bewegung und kurz danach wieder off. Hier kommt man mit zwei Zeilen aus.

define DI_BM DOIF ([BM] eq "on)(set Licht on)DOELSE(set Licht off)
attr DI_BM wait 0:10


Das Licht geht an und bleibt an, solange Bewegungsmelder innerhalb von 10 Sekunden immer wieder on liefert, ansonsten geht es nach 10 Sekunden aus (das Licht wird immer nur einmal per on bzw. off geschaltet).

Fall 2  Bewegungsmelder sendet nur on bei Bewegung

define bm_dum dummy

define DI_bm_dum DOIF ([BM])(set bm_dum on,set bm_dum off)
attr DI_bm_dum do always

define DI_BM DOIF ([bm_dum] eq "on")(set Licht on)DOELSE(set Licht off)
attr DI_BM wait 0:10


Hier habe ich einen dummy dazwischen geklemmt, der mir das fehlende "off" liefert.

Es sind zwar keine Einzeiler, ich denke aber einfacher als selbst mit Timern bzw. mit at, if, sleep etc. zu hantieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 06 Juli 2014, 14:17:20
Zitat von: Damian am 05 Juli 2014, 17:26:15
Du hast meine Frage nicht genau beantwortet, wann 51200 kommt und wann 0. Ich gehe mal davon aus, dass bei Bewegung 51200 kommt, dann würde mit:

define OG.hf.LI.Xxx.DI DOIF ([OG.hf.BM.Treppe:sensor] eq "51200") (set OG.hf.LI.Treppe on-for-timer 5)
attr OG.hf.LI.Xxx.DI do always


dein Treppenlicht bei erster Bewegung angehen und bei jeder weiteren Bewegung innerhalb von 5 Sekunden, um weitere 5 Sekunden verlängert und wenn keine Bewegung innerhalb von 5 Sekunden kommt wieder ausgehen.

Das war´s.

Das war's leider nicht. In einem längeren Beitrag (http://forum.fhem.de/index.php/topic,23833.msg181415.html#msg181415) habe ich mein Szenario beschrieben (und auch was 51200 und 0 bedeutet). Mit deinem Einzeiler hätte ich zwei Probleme: Zum einen würde das Licht nur einmal angehen und nach 5 Sekunden aus, da mein Bewegungsmelder bei Bewegung ein Relais schließt und erst bei "Keine Bewegung" wieder öffnet. Zum anderen möchte ich ja wie in meinem Beitrag beschrieben auch noch die Taster mit einbinden, welche die Lampen für x Minuten anschalten sollen - wenn ich dann z.B. nach einem on-for-timer 300 durch den Taster ein on-for-timer 5 durch den Bewegungsmelder schicke, geht das Licht aus...

Daher bin ich wieder bei meinen 6 mehr oder weniger umfangreichen notifies (Bewegungsmelder ein/aus, 2 Taster lang/kurz), die ich eben testweise durch 1 DOIF ersetzen wollte...

Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 06 Juli 2014, 14:30:33
Zitat von: Puschel74 am 05 Juli 2014, 16:48:50
Melde dich doch einfach mal dort und frag Dirk (das ist glaube ich der Modulautor) ob er on-/off-for-timer in das Modul einbauen könnte.
...
Die Modulautoren müssen nur danach gefragt/darauf hingewiesen/darum gebeten werden.

Die Frage an Dirk hat schon jemand im April gestellt und leider bis jetzt keine Antwort bekommen :(
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 06 Juli 2014, 15:02:03
Zitat von: krikan am 05 Juli 2014, 16:55:18
on-for-timer geht bereits jetzt, wenn Du den Umweg über readingsProxy gehst http://www.fhemwiki.de/wiki/ReadingsProxy .

Ich habe die readingsProxy jetzt mal ausprobiert und es funktioniert - danke für den Tipp. ABER: Es bringt mir leider nichts: Ich kann zwar nun on-for-timer für meine Homematic-Wired Geräte nutzen, bekomme aber nicht heraus, wie lange es noch dauert, bis das Gerät abgeschaltet wird. Und damit funktioniert meine Bewegungsmelder-Schalter-Logik nicht mehr...
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 06 Juli 2014, 16:31:38
Zitat von: RoBra81 am 06 Juli 2014, 14:17:20
Daher bin ich wieder bei meinen 6 mehr oder weniger umfangreichen notifies (Bewegungsmelder ein/aus, 2 Taster lang/kurz), die ich eben testweise durch 1 DOIF ersetzen wollte...
Mal unabhängig von DOIF oder notify, warum trennst Du nicht die beiden Fälle:

Fall 1: Das Licht wird per Taster für x Minuten angeschaltet
Fall 2: Das Licht für per Bewegungsmelder für y Sekunden angeschaltet

Bau Dir für beide Fälle jeweils eine komplett eigenständige Lösung. Wenn Fall 1 eintritt, deaktivierst Du die Behandlung von Fall 2 für die Dauer von Fall 1 per disable-Attribut oder indem Du solange die entsprechenden Events wegfilterst. Dann kann der Bewegungsmelder auslösen so viel er will, das brauchst Du gar nicht zu beachten. Fall 2 wird dann y Sekunden vor Ablauf der x Minuten wieder aktiviert und kann so notfalls nahtlos übernehmen, damit das Licht auch im Fall der Fälle nicht ausgeht.

Klingt auf den ersten Blick vielleicht komplizierter, ist in der praktischen Umsetzung aber vermutlich einfacher.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 06 Juli 2014, 18:34:13
Jetzt hab ich dein modul geschnallt. Danke dafür!
Titel: Antw:neues Modul DOIF
Beitrag von: krikan am 06 Juli 2014, 18:37:08
ZitatIch kann zwar nun on-for-timer für meine Homematic-Wired Geräte nutzen, bekomme aber nicht heraus, wie lange es noch dauert, bis das Gerät abgeschaltet wird.
Könnest Dir mal on-till anschauen. Das entstehende "at deviceName+_till" lässt sich auswerten und mit modify anpassen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Juli 2014, 18:48:43
Zitat von: RoBra81 am 06 Juli 2014, 14:17:20
da mein Bewegungsmelder bei Bewegung ein Relais schließt und erst bei "Keine Bewegung" wieder öffnet

genau das hast du vorher aber nicht beschrieben, aber sei es drum.
Nur um einen notify gegen DOIF auszutauschen und weiterhin mit IF-Abfragen zu arbeiten, lohnt der Aufwand meiner Meinung nach nicht - da würde ich bei deiner bisherigen Konstruktion bleiben, da sie offenbar zuverlässig funktioniert.

Dennoch auch für dich ein Vorschlag, wie man die Wait-Timer in DOIF nutzen könnte:



define schalter_d dummy

define di_Schalter DOIF ([Schalter] =~/short/ )
  (set schalter_d short, set schalter_d short_off)
DOELSEIF ([Schalter] =~/long/)
(set schalter_d long, set schalter_d long_off)

attr di_Schalter do always

define di_Licht DOIF ([schalter_d] eq "short" or [schalter_d] eq "long")
  (set Licht on)
DOELSEIF ([schalter_d] eq "short_off")
  (set Licht off)
DOELSEIF ([schalter_d] eq "long_off")
  (set Licht off )
DOELSEIF ([BM] eq "on" and [Licht] eq "off")
(set Licht on)
DOELSEIF ([BM] eq "off")
(set Licht off)

attr di_Licht wait 0:60:1800:0:10


Die Peudonamen musst du natürlich deinen entsprechend anpassen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 06 Juli 2014, 21:42:56
Ich habe leider auch ein kleines Problem. DOIF arbeitet leider nicht immer den ersten Teil ab, obwohl die Bedingungen alle Wahr sind. Der zweite Teil DOELSIF wird leider nie abgearbeitet. Die Bedingung ist 1.

([001_Wetterstation:temperature]>25 and [001_Wetterstation:brightness]>65 and [Thermostat_Wohnzimmer:measured-temp]>22 and [002_Fenster_TR] eq "closed" and $hms gt "12:00" and $hms lt "20:30") (set Jalousie_TR 40,set Jalousie_dummy 40,set Verschattung_dummy 1) DOELSEIF ([Verschattung_dummy]>1) (set Jalousie_TR hoch,set Jalousie_dummy hoch,set Verschattung_dummy 0)

Was mache ich falsch?

Danke für die Hilfe

Gruß Lutz
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Juli 2014, 21:50:59
Zitat von: cruser1800 am 06 Juli 2014, 21:42:56
Ich habe leider auch ein kleines Problem. DOIF arbeitet leider nicht immer den ersten Teil ab, obwohl die Bedingungen alle Wahr sind. Der zweite Teil DOELSIF wird leider nie abgearbeitet. Die Bedingung ist 1.

([001_Wetterstation:temperature]>25 and [001_Wetterstation:brightness]>65 and [Thermostat_Wohnzimmer:measured-temp]>22 and [002_Fenster_TR] eq "closed" and $hms gt "12:00" and $hms lt "20:30") (set Jalousie_TR 40,set Jalousie_dummy 40,set Verschattung_dummy 1) DOELSEIF ([Verschattung_dummy]>1) (set Jalousie_TR hoch,set Jalousie_dummy hoch,set Verschattung_dummy 0)

Was mache ich falsch?

Danke für die Hilfe

Gruß Lutz

Das hatten wir schon mal. Hier scheint eine Rekursion zu sein, die wird von FHEM unterbunden. set Verschattung_dummy 1 im ersten Kommando löst wohl kein Event aus für das zweite Kommando. Das musst du anders realisieren. Da habe ich leider keinen Einfluss drauf.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 06 Juli 2014, 21:58:55
Verschattung_dummy 1) DOELSEIF ([Verschattung_dummy]>1

solltest du dann nicht auf

([Verschattung_dummy]=1

prüfen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Juli 2014, 22:00:24
Version 1.4 im ersten Post.

-status "disabled" eingebaut
-Ein cmd-Status wird nur noch dann für einen nicht existierenden ELSE-Fall gesetzt, wenn es nur den DOIF-Fall gibt. Das grundsätzliche Setzen eines cmd-Status für nicht existierenden ELSE-Fall war ungünstig und machte die Wait-Timer-Steuerung zunichte. Das Beispiel im Post #190 würde z. B. mit Version 1.3 nicht funktionieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 07 Juli 2014, 15:51:02
hallo.
ich habe auch kleines problem wo ich keine lösung finde.
ich schalte die klima ab einen bestimmten wert ein. das klappt auch.
jetzt möchte ich aber , wenn dieser wert bis zu einem anderen wert nicht unterschritten wird die klima weiterlaufen lassen.
wie realisiert man das mit DOIF ?

z.b.  ab 1500W klima on, unter 1000W klima off.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Juli 2014, 16:07:26
Zitat von: satprofi am 07 Juli 2014, 15:51:02
hallo.
ich habe auch kleines problem wo ich keine lösung finde.
ich schalte die klima ab einen bestimmten wert ein. das klappt auch.
jetzt möchte ich aber , wenn dieser wert bis zu einem anderen wert nicht unterschritten wird die klima weiterlaufen lassen.
wie realisiert man das mit DOIF ?

z.b.  ab 1500W klima on, unter 1000W klima off.

define di_Klima DOIF ([Sensor:Watt]>1500) (set Klima on) DOELSEIF ([Sensor:Watt]<1000) (set Klima off)

siehe auch die allgemeine Lösung a la THRESHOLD hier im ersten Post. Noch eleganter kann man das mit dem THRESHOLD-Modul machen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 07 Juli 2014, 16:47:23
Thx. So einfach? man sieht den wald vor lauter bäume nicht mehr....
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 07 Juli 2014, 21:01:48
Zitat von: Damian am 06 Juli 2014, 22:00:24
Version 1.4 im ersten Post.

-status "disabled" eingebaut
-Ein cmd-Status wird nur noch dann für einen nicht existierenden ELSE-Fall gesetzt, wenn es nur den DOIF-Fall gibt. Das grundsätzliche Setzen eines cmd-Status für nicht existierenden ELSE-Fall war ungünstig und machte die Wait-Timer-Steuerung zunichte. Das Beispiel im Post #190 würde z. B. mit Version 1.3 nicht funktionieren.

Gruß

Damian

Danke für deine Antwort. Ist es jetzt bei der Änderung so, dass wenn DOIF falsch ist DOELSIF abgearbeitet wird ohne das es ein weiteres Notify benötigt?

Gruß
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Juli 2014, 22:15:17
Zitat von: cruser1800 am 07 Juli 2014, 21:01:48
Danke für deine Antwort. Ist es jetzt bei der Änderung so, dass wenn DOIF falsch ist DOELSIF abgearbeitet wird ohne das es ein weiteres Notify benötigt?

Gruß

Was für einen Programmierer selbstverständlich ist, ist für andere noch lange nicht klar.

if-then-elseif-else Konstruktionen werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Bei DOIF kommt hinzu, dass nur Bedingungen überprüft werden, die zum ausgelösten Event auch ein Device beinhalten (Angaben in eckigen Klammern).

Beispiel:

define di_test DOIF ([Schalter1] eq "on")(set lampe1 on) DOELSEIF ([Schalter2] eq "on") (set lampe2 on) DOELSE (set lampe3 on)

Event kommt: Schalter1 = on

1. Bedingung wird überprüft -> wahr -> Lampe1 auf on -> Ende der Abarbeitung.

Event kommt: Schalter1 = off

1. Bedingung wird überprüft -> falsch -> weiter prüfen
2. Bedingung wird nicht überprüft, da Schalter1 dort nicht vorkommt -> weiter prüfen
3. DOELESE wird ausgeführt -> Lampe3 auf on -> Ende der Abarbeitung.


Event kommt: Schalter2 = on

1. Bedingung wird nicht überprüft, da Schalter2 dort nicht vorkommt -> weiter prüfen
2. Bedingung wird überpruft -> wahr -> Lampe2 auf on -> Ende der Abarbeitung


Event kommt: Schalter2 = off

1. Bedingung wird nicht überprüft, da Schalter2 dort nicht vorkommt -> weiter prüfen
2. Bedingung wird überprüft -> falsch -> weiter prufen
3. DOELESE wird ausgeführt -> Lampe3 auf on -> Ende der Abarbeitung.

Event kommt: Schalter3 = on

Es passiert gar nichts, da Schalter3 nirgendwo in den Bedingungen vorkommt

Die Änderung in der Version 1.4 betraf nur den Sonderfall, falls kein DOELSE-Fall angegeben wurde und hat mit den obigen Fällen nichts zu tun.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 07 Juli 2014, 22:48:01
@Damian

Danke, jetzt habe ich es kapiert! Die Bedingung des Event's hatte ich nicht auf dem Schirm!

Gruß Lutz
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 07 Juli 2014, 23:02:29
Hallo,

erstmal ein Lob für die viele Arbeit und das gelungene Modul.

Ich experimentiere seit einiger Zeit mit FHEM und meiner Gartenbewässerung rum.
Ich habe eine Lösung die läuft - aber es läßt sich ja immer was verbessern ;-)

Ich  DOIF in meiner Bewässerung einsetzen und stand schon bald am ersten Problem:
Für meine Tests habe ich mich an einem kleinen Ablauf in FHEM versucht.


In meiner Gartenbewässerung kann ich die Bewässerungszeit über ein Dummy einstellen-
Über einen Dummy-Schalter kann ich die Bewässerung einschalten.


define Bewaesserung_Zeit dummy
attr Bewaesserung_Zeit setList state
attr Bewaesserung_Zeit room Bewässerung_DOIF
attr Bewaesserung_Zeit  setList state:1,2,3,4,5,6,7,8,9,10
#attr Bewaesserung_Zeit sortby 01
attr Bewaesserung_Zeit webCmd state

Define Automatik_DOIF dummy
attr Automatik_DOIF room Bewässerung_DOIF
attr Automatik_DOIF toggleDevice true
attr Automatik_DOIF webCmd an:aus
attr Automatik_DOIF devStateIcon aus:Bwaesserung_black_off_48_B an:Bwaesserung_gruen_on_48_B
attr Automatik_DOIF eventMap on:an off:aus


Mit dem folgende DOIF Ausdruck schalte ich jetzt meine 1_Bew_Eiche_DOIF ein.

define Wasser_Eiche DOIF ([Automatik_DOIF] eq "an") (set 1_Bew_Eiche_DOIF on-for-timer 3) DOELSE (set 1_Bew_Eiche_DOIF aus)

In dem Beispiel schalte ich 1_Bew_Eiche_DOIF für 3 Sekunden ein.

Wie kann ich jetzt den Wert "meiner" Bewässerungszeit  - Bewaesserung_Zeit- in dem Ausdruck benutzen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Juli 2014, 23:13:53
Zitat von: Hoeness am 07 Juli 2014, 23:02:29

Mit dem folgende DOIF Ausdruck schalte ich jetzt meine 1_Bew_Eiche_DOIF ein.

define Wasser_Eiche DOIF ([Automatik_DOIF] eq "an") (set 1_Bew_Eiche_DOIF on-for-timer 3) DOELSE (set 1_Bew_Eiche_DOIF aus)

In dem Beispiel schalte ich 1_Bew_Eiche_DOIF für 3 Sekunden ein.

Wie kann ich jetzt den Wert "meiner" Bewässerungszeit  - Bewaesserung_Zeit- in dem Ausdruck benutzen?

Wenn die Bewässerungszeit im Status von Bewaesserung_Zeit steht, dann einfach

define Wasser_Eiche DOIF ([Automatik_DOIF] eq "an") (set 1_Bew_Eiche_DOIF on-for-timer [Bewaesserung_Zeit]) DOELSE (set 1_Bew_Eiche_DOIF aus)

Weitere Infos zu Angaben im Ausführungsteil siehe auch: http://fhem.de/commandref_DE.html#IF

DOIF benutzt die gleiche Syntax wie der FHEM-IF-Befehl.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 07 Juli 2014, 23:57:15
Hallo,

Danke für die schnelle Antwort.

Ich experimentiere noch ein bischen rum.
Ich denke aber, das DOIF meine Gartenbewässerung vereinfachen kann.

Danke.
Titel: Antw:neues Modul DOIF
Beitrag von: kud am 08 Juli 2014, 19:51:10
Tolle Sache mit dem DOIF. Danke.
Aber mein Eintrag

define Feuchte_warnung DOIF ([arduino_ana_1] > 200) (system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'))

liefert im Event-Monitor ein

DOIF Feuchte_warnung last_error: system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'): Unknown command system('/usr/bin/mplayer, try help.

Hab ich da was übersehen?

Gruss
KU
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Juli 2014, 00:03:48
Zitat von: kud am 08 Juli 2014, 19:51:10
Tolle Sache mit dem DOIF. Danke.
Aber mein Eintrag

define Feuchte_warnung DOIF ([arduino_ana_1] > 200) (system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'))

liefert im Event-Monitor ein

DOIF Feuchte_warnung last_error: system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'): Unknown command system('/usr/bin/mplayer, try help.

Hab ich da was übersehen?

Gruss
KU

Perl-Aufrufe bitte in geschweifte Klammern setzen:

define Feuchte_warnung DOIF ([arduino_ana_1] > 200) ({system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &')})

Ich wiederhole mich an dieser Stelle:

Weitere Infos zu Angaben im Ausführungsteil siehe auch: http://fhem.de/commandref_DE.html#IF

DOIF benutzt die gleiche Syntax wie der FHEM-IF-Befehl.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kud am 09 Juli 2014, 08:20:41
Besten Dank.  :)
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 11 Juli 2014, 11:53:09
Hallo.
Warum schaltet DOIF trotzdem wenn Leistung unter 1000W

DOELSEIF ([Heizungsmode] eq "off" and [Pac] < 1000 and $hms gt "10:00" and $hms lt "18:30") (set Klima_SZ off)

dieses commando wurde ausgewertet lt. state
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 Juli 2014, 13:37:42
Zitat von: satprofi am 11 Juli 2014, 11:53:09
Hallo.
Warum schaltet DOIF trotzdem wenn Leistung unter 1000W

DOELSEIF ([Heizungsmode] eq "off" and [Pac] < 1000 and $hms gt "10:00" and $hms lt "18:30") (set Klima_SZ off)

dieses commando wurde ausgewertet lt. state


Meinst du Klima wird nicht off geschaltet, obwohl Status von Pac unter 1000?

Wenn Pac vor 10:00 Uhr unter 1000 gefallen ist, dann passiert nach deiner Definition auch nichts.

Nach meinem Urlaub werde ich Zeitintervalle einbauen [10:00-18:00], dann wird um 10:00 Uhr geprüft, ob Pac unter 1000 steht und geschaltet.

Solange kannst du dir behelfen mit:


DOELSEIF ([Heizungsmode] eq "off" and [Pac] < 1000 and (($hms gt "10:00" or [10:00]) and $hms lt "18:30") (set Klima_SZ off)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 11 Juli 2014, 14:39:06
achso!
ich dachte es wird regelmässig geprüft. heisst wenn nach 10h die leistung unter 1000 fällt, passiert nichts mehr? wobei "off" bei mir für einschalten steht.
es sollte zw. 10 u. 18:30h die klima aus-, bzw. wieder eingeschalten werden wenn der wert unter  od. über 1000w steht.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 Juli 2014, 15:03:05
Zitat von: satprofi am 11 Juli 2014, 14:39:06
achso!
ich dachte es wird regelmässig geprüft. heisst wenn nach 10h die leistung unter 1000 fällt, passiert nichts mehr? wobei "off" bei mir für einschalten steht.
es sollte zw. 10 u. 18:30h die klima aus-, bzw. wieder eingeschalten werden wenn der wert unter  od. über 1000w steht.

Es wird immer nur dann geprüft, wenn ein Event der angegebenen Devices kommt. Bei dir sind die Devices "Heizungsmode" und "Pac".

Wenn Pac regelmäßig sendet, dann sollte es allerdings auch nach 10:00 Uhr kein Problem sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 11 Juli 2014, 15:23:46
aber bei uhrzeit ändert sich status ja minütlich? kommt das nicht durch?
pac sendet alle 3min., und wait ist auf 300
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 Juli 2014, 15:36:27
Zitat von: satprofi am 11 Juli 2014, 15:23:46
aber bei uhrzeit ändert sich status ja minütlich? kommt das nicht durch?
pac sendet alle 3min., und wait ist auf 300

Bei Uhrzeit gibt es nur ein Event, wenn die Zeit in eckigen Klammern angegeben wird (dann gibt es auch einen dazugehörigen Timer in den Readings). $hms ist dagegen nur eine Variable die abgefragt wird. $hms-Angabe löst kein Event aus - es wird also nichts minutlich oder sekundlich abgefragt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 12 Juli 2014, 22:27:16
Hi,

ich bins mal wieder ;-)

Ich möchte mit DOIF ein dummy toggeln (aus/an):

Der Trigger hierzu kommt von einem Taster über GPIO: hier die Config:

######## Input 4 -Beregnung
define In4_Beregnung RPI_GPIO 10
attr In4_Beregnung active_low no
attr In4_Beregnung debounce_in_ms 50
attr In4_Beregnung devStateIcon aus:rain-icon_off an:rain-icon_on
attr In4_Beregnung direction input
attr In4_Beregnung eventMap on:an off:aus
attr In4_Beregnung group 1_Input
attr In4_Beregnung interrupt rising
attr In4_Beregnung pud_resistor down
attr In4_Beregnung room Bewässerung_DOIF
attr In4_Beregnung webCmd an:aus


Der dummy ist wie folgt konfiguriert:

######## Beleuchtung Terasse
define man_Bewaesserung dummy
attr man_Bewaesserung group 2_Output
attr man_Bewaesserung room Bewässerung_DOIF
attr man_Bewaesserung webCmd an:aus
attr man_Bewaesserung devStateIcon aus:Lampe_off an:Lampe_on
attr man_Bewaesserung eventMap on:aus off:an


Mein DOIF sieht wie folgt aus:

define n_In4_Beregnung DOIF ([In4_Beregnung] eq "an" and [man_Bewaesserung] eq "aus") (set man_Bewaesserung an) DOELSEIF ([In4_Beregnung] eq "an" and [man_Bewaesserung] eq "an") (set man_Bewaesserung aus)

Irgendwie stehe ich hier auf dem Schlauch.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Juli 2014, 16:40:42
Zitat von: Hoeness am 12 Juli 2014, 22:27:16
Hi,

ich bins mal wieder ;-)

Ich möchte mit DOIF ein dummy toggeln (aus/an):

Der Trigger hierzu kommt von einem Taster über GPIO: hier die Config:

######## Input 4 -Beregnung
define In4_Beregnung RPI_GPIO 10
attr In4_Beregnung active_low no
attr In4_Beregnung debounce_in_ms 50
attr In4_Beregnung devStateIcon aus:rain-icon_off an:rain-icon_on
attr In4_Beregnung direction input
attr In4_Beregnung eventMap on:an off:aus
attr In4_Beregnung group 1_Input
attr In4_Beregnung interrupt rising
attr In4_Beregnung pud_resistor down
attr In4_Beregnung room Bewässerung_DOIF
attr In4_Beregnung webCmd an:aus


Der dummy ist wie folgt konfiguriert:

######## Beleuchtung Terasse
define man_Bewaesserung dummy
attr man_Bewaesserung group 2_Output
attr man_Bewaesserung room Bewässerung_DOIF
attr man_Bewaesserung webCmd an:aus
attr man_Bewaesserung devStateIcon aus:Lampe_off an:Lampe_on
attr man_Bewaesserung eventMap on:aus off:an


Mein DOIF sieht wie folgt aus:

define n_In4_Beregnung DOIF ([In4_Beregnung] eq "an" and [man_Bewaesserung] eq "aus") (set man_Bewaesserung an) DOELSEIF ([In4_Beregnung] eq "an" and [man_Bewaesserung] eq "an") (set man_Bewaesserung aus)

Irgendwie stehe ich hier auf dem Schlauch.

Es kommt drauf an, was du genau haben möchtest. Bisher geht die Bewässerung an, wenn du deinen dummy aus machst und aus wenn du deinen dummy an machst und immer nur dann wenn in in4_Beregnung an. Wenn In4_Beregnung aus ist passiert gar nichts. Wenn du etwas anderes haben willst, dann musst du es genauer spezifizieren.

Edit: Ich sehe gerade, dass du den dummy selbst schaltest. Das wird nicht gut funktionierten, denn das Schalten des dummys von an auf aus führt in deiner Definition dazu, dass es sofort wieder auf an geht und umgekehrt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 13 Juli 2014, 16:50:14
Zitat von: Damian am 13 Juli 2014, 16:40:42
Es kommt drauf an, was du genau haben möchtest. Bisher geht die Bewässerung an, wenn du deinen dummy aus machst und aus wenn du deinen dummy an machst und immer nur dann wenn in in4_Beregnung an. Wenn In4_Beregnung aus ist passiert gar nichts. Wenn du etwas anderes haben willst, dann musst du es genauer spezifizieren.
Ich denke, es ist anders gemeint. Das DOIF soll von In4_Beregnung getriggert werden. Wenn von dort ein "an" kommt, soll das DOIF den Status von man_Bewaesserung jeweils umkehren (eben toggle).
Die Frage ist halt,  ob In4_Beregnung zwischenzeitlich auch mal was anderes als "an" triggert und den Status des DOIF damit ändert. Andernfalls fehlt ein
attr n_In4_Beregnung do always
damit das DOIF so funktionieren kann.
Ist aber auch eher ins Blaue hinein geraten...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Juli 2014, 17:12:19
Zitat von: Brockmann am 13 Juli 2014, 16:50:14
Ich denke, es ist anders gemeint. Das DOIF soll von In4_Beregnung getriggert werden. Wenn von dort ein "an" kommt, soll das DOIF den Status von man_Bewaesserung jeweils umkehren (eben toggle).
Die Frage ist halt,  ob In4_Beregnung zwischenzeitlich auch mal was anderes als "an" triggert und den Status des DOIF damit ändert. Andernfalls fehlt ein
attr n_In4_Beregnung do always
damit das DOIF so funktionieren kann.
Ist aber auch eher ins Blaue hinein geraten...

ok, jetzt verstehe ich erst, was er vorhat.

do always braucht man eigentlich nur, wenn der gleiche Fall mehrfach hintereinander ausgeführt werden soll, hier sollte es nicht erforderlich sein.

Da wollen wir nur hoffen, dass fhem auch hier einen Loop zuverlässig unterbindet ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 14 Juli 2014, 19:10:35
Hallo werte DOIF-Gemeinde,

heute habe ich folgendes DOIF definiert:
DOIF ([{sunset()}])(Schalter01 on) DOELSEIF ([23:59])(Schalter01 off)

Ist soweit selbsterklärend, denke ich. Das Licht soll bei Sonnenuntergang an gehen und um 23:59 ausgeschaltet werden.
Wurde auch akzeptiert und in den Readings stehen zwei plausible Timer.

Allerdings wird mir seitdem das Logfile mit folgender Fehlermeldung zugepflastert:
Use of uninitialized value in pattern match (m//) at ./FHEM/98_DOIF.pm line 417.
Alle paar Minuten kommt wieder eine neue gleichlautende Zeile dazu...

Ich bin etwa ratlos, weil ich keine DOIFs habe, die alle paar Minuten getriggert werden könnten. Die hängen alle an bestimmten Uhrzeiten oder an bestimmten Status-Dummys, die sich aber auch nicht minütlich ändern...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 14 Juli 2014, 20:56:13
Zitat von: Brockmann am 14 Juli 2014, 19:10:35
Hallo werte DOIF-Gemeinde,

heute habe ich folgendes DOIF definiert:
DOIF ([{sunset()}])(Schalter01 on) DOELSEIF ([23:59])(Schalter01 off)

Ist soweit selbsterklärend, denke ich. Das Licht soll bei Sonnenuntergang an gehen und um 23:59 ausgeschaltet werden.
Wurde auch akzeptiert und in den Readings stehen zwei plausible Timer.

Allerdings wird mir seitdem das Logfile mit folgender Fehlermeldung zugepflastert:
Use of uninitialized value in pattern match (m//) at ./FHEM/98_DOIF.pm line 417.
Alle paar Minuten kommt wieder eine neue gleichlautende Zeile dazu...

Ich bin etwa ratlos, weil ich keine DOIFs habe, die alle paar Minuten getriggert werden könnten. Die hängen alle an bestimmten Uhrzeiten oder an bestimmten Status-Dummys, die sich aber auch nicht minütlich ändern...

Ich nehme an, dass du die Version 1.4 benutzt. Offenbar gibt es bei dir Trigger, die keinen Device-Namen liefern.

Ich bastle z. Zt. noch an der Version 1.5. Bis dahin kannst du im Modul in der Zeile 417 folgende Zeile einfügen:

return "" if (!$dev->{NAME});

danach kommt dann:

return "" if ($hash->{devices}{all} !~ / $dev->{NAME} /);

das sollte helfen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 14 Juli 2014, 21:19:41
Zitat von: Damian am 14 Juli 2014, 20:56:13
Ich nehme an, dass du die Version 1.4 benutzt. Offenbar gibt es bei dir Trigger, die keinen Device-Namen liefern.

Ich bastle z. Zt. noch an der Version 1.5. Bis dahin kannst du im Modul in der Zeile 417 folgende Zeile einfügen:

return "" if (!$dev->{NAME});

danach kommt dann:

return "" if ($hash->{devices}{all} !~ / $dev->{NAME} /);

das sollte helfen.

Gruß

Damian

Ich sehe gerade, das Problem ist wahrscheinlich eher die Tatsache, dass $hash->{devices}{all} nicht existiert, weil du nur Timer hast und keine Device-Angaben. Ich habe offenbar immer in Kombination mit Devices getestet  :)

also dann ab Zeile 417 die roten Zeilen einfügen:

return "" if (!$hash->{devices}{all});
return "" if (!$dev->{NAME});
return "" if ($hash->{devices}{all} !~ / $dev->{NAME} /);

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 15 Juli 2014, 08:37:27
Zitat von: Damian am 14 Juli 2014, 21:19:41
Ich sehe gerade, das Problem ist wahrscheinlich eher die Tatsache, dass $hash->{devices}{all} nicht existiert, weil du nur Timer hast und keine Device-Angaben. Ich habe offenbar immer in Kombination mit Devices getestet  :)
also dann ab Zeile 417 die roten Zeilen einfügen:
Das sieht gut aus. Nach dem Einfügen der Zeilen und "reload..." bleiben die Fehlermeldungen jetzt aus. Danke für den schnellen Fix.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 09:35:53
Zitat von: Brockmann am 15 Juli 2014, 08:37:27
Das sieht gut aus. Nach dem Einfügen der Zeilen und "reload..." bleiben die Fehlermeldungen jetzt aus. Danke für den schnellen Fix.
OK. Ich habe die gefixte Version (1.41) im ersten Post angehängt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 15 Juli 2014, 18:40:50
hallo.
kann es sein, dass wenn man zwischendurch eine änderung an den werten vornimmt, das ding dann nicht mehr richtig schaltet, bis man neu startet?
habe kurz mal einen wert verändert und jetzt wird nicht mehr geschalten. ist mir vorgestern schon aufgefallen, aber am nächsten tag hats dann wieder normal funktioniert.


last_cmd_event Terassentuer 2014-07-15 18:04:06


seit dieser zeit keine abfrage mehr.
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 15 Juli 2014, 20:35:50
Hallo,

ich habe eine Frage zum next_wait_timer!

Kann es sein, dass die Zeit vor der ersten Ausführung und nicht nach der ersten Ausführung läuft!

Bedingung für war:
([001_Wetterstation:temperature]>25 and [001_Wetterstation:brightness]>70 and [Thermostat_Wohnzimmer:measured-temp]>22) (set Jalousie_WZ 40,set Jalousie_EZ 40,set Jalousie_KU 40,set Jalousie_dummy 40,set Verschattung_WZ_dummy on) DOELSEIF ([001_Wetterstation:brightness]<70 and [Verschattung_WZ_dummy] eq "on") (set Jalousie_WZ hoch,set Jalousie_EZ hoch,set Jalousie_KU hoch,set Jalousie_dummy hoch,set Verschattung_WZ_dummy off)

Event ist eingetreten: 2014-07-15_20:08:18 001_Wetterstation brightness: 69

aber: 2014-07-15_20:08:19 Verschattung_WZ next_wait_timer: 15.07.2014 20:23:19 cmd_2 001_Wetterstation

Nach der Wartezeit ist dann cmd_2 auch ordnungsgemäß eingetreten.

Gruß Lutz
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 21:05:19
Zitat von: satprofi am 15 Juli 2014, 18:40:50
hallo.
kann es sein, dass wenn man zwischendurch eine änderung an den werten vornimmt, das ding dann nicht mehr richtig schaltet, bis man neu startet?
Nein.

An welchen Werten? Es wird immer nur einmal geschaltet, bis sich der Zustand ändert, wenn du do always nicht angibst.

Wenn man Änderungen an der Definition (DEF) vornimmt, werden alle Werte zurückgesetzt, dann sollte das nächste zutreffende Event das entsprechenden Kommando auslösen.

Für irgendwelche Analysen, musst du mir einen nachvollziehbaren Fall liefern.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 21:12:21
Zitat von: cruser1800 am 15 Juli 2014, 20:35:50
Hallo,

ich habe eine Frage zum next_wait_timer!

Kann es sein, dass die Zeit vor der ersten Ausführung und nicht nach der ersten Ausführung läuft!

Bedingung für war:
([001_Wetterstation:temperature]>25 and [001_Wetterstation:brightness]>70 and [Thermostat_Wohnzimmer:measured-temp]>22) (set Jalousie_WZ 40,set Jalousie_EZ 40,set Jalousie_KU 40,set Jalousie_dummy 40,set Verschattung_WZ_dummy on) DOELSEIF ([001_Wetterstation:brightness]<70 and [Verschattung_WZ_dummy] eq "on") (set Jalousie_WZ hoch,set Jalousie_EZ hoch,set Jalousie_KU hoch,set Jalousie_dummy hoch,set Verschattung_WZ_dummy off)

Event ist eingetreten: 2014-07-15_20:08:18 001_Wetterstation brightness: 69

aber: 2014-07-15_20:08:19 Verschattung_WZ next_wait_timer: 15.07.2014 20:23:19 cmd_2 001_Wetterstation

Nach der Wartezeit ist dann cmd_2 auch ordnungsgemäß eingetreten.

Gruß Lutz
Ein Wait_Timer kann nur durch ein Ereignis ausgelöst werden, hier also um 20:08:18 gesetzt um 20:08:19 (aufgrund einer langsamen Verarbeitung bei dir) auf 20.23:19, weil du offenbar 5 Minuten für Wait eingestellt hast.

Wo ist das Problem?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 15 Juli 2014, 21:23:45
Hallo Damain,

das Ereignis war da. Heißt das, dass meine Fritzbox zu lange für die Bearbeitung des cmd_2 benötigt, so dass schon  vor Bearbeitung der wait_timer gesetzt wird?

Dann sollte ich mir wohl eine andere Lösung als Server suchen!

Danke
Lutz
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 21:28:29
Zitat von: cruser1800 am 15 Juli 2014, 21:23:45
Hallo Damain,

das Ereignis war da. Heißt das, dass meine Fritzbox zu lange für die Bearbeitung des cmd_2 benötigt, so dass schon  vor Bearbeitung der wait_timer gesetzt wird?

Dann sollte ich mir wohl eine andere Lösung als Server suchen!

Danke
Lutz

Verstehe ich nicht. Der Timer wurde doch maximal eine Sekunde nach dem Event gesetzt (20:08:19) und nicht davor???

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 15 Juli 2014, 21:33:41
Zitat von: Damian am 15 Juli 2014, 21:28:29
Verstehe ich nicht. Der Timer wurde doch maximal eine Sekunde nach dem Event gesetzt (20:08:19) und nicht davor???

Gruß

Damian

Die Helligkeit hat den Wert unterschritten, so dass cmd_1 nicht eintritt und cmd_2 hätte ausgeführt werden müssen.

Leider wurde aber cmd_2 nicht ausgeführt sondern der wait_timer aktiviert. Somit wurde die erste Ausführung von cmd_2 erst nach der Wartezeit von 15 min aktiviert.

Da ich Jalousien damit steuere ist es 15 min länger dunkel.

Hier noch der Auszug aus dem Journal.

2014-07-15_19:02:12 Verschattung_WZ cmd_1
2014-07-15_19:02:12 Verschattung_WZ last_cmd: 1
2014-07-15_19:02:12 Verschattung_WZ last_cmd_event: 001_Wetterstation
2014-07-15_19:02:12 Verschattung_WZ last_error: no error
2014-07-15_19:02:12 Verschattung_WZ next_wait_timer: no wait_timer
2014-07-15_20:08:19 Verschattung_WZ next_wait_timer: 15.07.2014 20:23:19 cmd_2 001_Wetterstation
2014-07-15_20:23:19 Verschattung_WZ cmd_2
2014-07-15_20:23:19 Verschattung_WZ last_cmd: 2
2014-07-15_20:23:19 Verschattung_WZ last_cmd_event: 001_Wetterstation
2014-07-15_20:23:19 Verschattung_WZ last_error: no error
2014-07-15_20:23:19 Verschattung_WZ next_wait_timer: no wait_timer

Da sieht man auch, dass erst der Timer gesetzt wird und beim nächsten mal das cmd_2 ausgeführt wird.


Gruß

Lutz
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 21:37:57
Zitat von: cruser1800 am 15 Juli 2014, 21:33:41
Die Helligkeit hat den Wert unterschritten, so dass cmd_1 nicht eintritt und cmd_2 hätte ausgeführt werden müssen.

Leider wurde aber cmd_2 nicht ausgeführt sondern der wait_timer aktiviert. Somit wurde die erste Ausführung von cmd_2 erst nach der Wartezeit von 15 min aktiviert.

Da ich Jalousien damit steuere ist es 15 min länger dunkel.

Gruß

Lutz

Wie sieht denn die Definition des Wait-Attributes aus, sonst kann ich nur raten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 15 Juli 2014, 21:41:58
Zitat von: Damian am 15 Juli 2014, 21:37:57
Wie sieht denn die Definition des Wait-Attributes aus, sonst kann ich nur raten.

Gruß

Damian

wait           900:900
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 21:49:06
Zitat von: cruser1800 am 15 Juli 2014, 21:41:58
wait           900:900

Es funktioniert wie programmiert. Mit wait 900:900 hast du definiert, dass er 15 Minuten warten solle bevor er das Kommando ausführt und genau das tut er auch.

Warum sollte er denn das Kommando cmd_2 um 20:08:18 ausführen, wenn du ihm sagst, dass er 15 Minuten nach dem Erfüllen der Bedingung (hier für cmd_2) warten soll.

Da hast du offenbar etwas missverstanden.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: cruser1800 am 15 Juli 2014, 21:52:15
Zitat von: Damian am 15 Juli 2014, 21:49:06
Es funktioniert wie programmiert. Mit wait 900:900 hast du definiert, dass er 15 Minuten warten solle bevor er das Kommando ausführt und genau das tut er auch.

Warum sollte er denn das Kommando cmd_2 um 20:23:18 ausführen, wenn du ihm sagst, dass er 15 Minuten nach dem Erfüllen der Bedingung (hier für cmd_2) warten soll.

Da hast du offenbar etwas missverstanden.

Gruß

Damian




Danke, wieder etwas dazu gelernt! Ich bin davon ausgegangen, dass er erst ausführt und dann bei erneuten  Ergebnis erst eine definierte Pause abwartet.

Ist hier genau andersrum!

Danke

Lutz
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Juli 2014, 22:10:48
Zitat von: cruser1800 am 15 Juli 2014, 21:52:15
Danke, wieder etwas dazu gelernt! Ich bin davon ausgegangen, dass er erst ausführt und dann bei erneuten  Ergebnis erst eine definierte Pause abwartet.

Ist hier genau andersrum!

Danke

Lutz

ja. Wichtig zu wissen ist noch, wenn der Zustand während der Wartezeit für cmd_2 sich ändert, bei dir also auf cmd_1, dann wird der Timer von cmd_2 wieder zurückgesetzt und der Timer für cmd_1 gesetzt. Das würde z. B. bedeuten, wenn im Takt von unter 15 Minuten der Zustand bei dir wechseln würde, dann würde nie geschaltet.

So etwas kann man auch mit Watchdog erreichen und genau das wollte ich bei DOIF auf eine einfache Weise auch haben.

Eine definierte Zwangspause, kannst du mit event-min-interval als Attribut bei dem jeweiligen Device definieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 16 Juli 2014, 18:18:01
Zitat von: Damian am 15 Juli 2014, 21:05:19
Nein.

An welchen Werten? Es wird immer nur einmal geschaltet, bis sich der Zustand ändert, wenn du do always nicht angibst.

Wenn man Änderungen an der Definition (DEF) vornimmt, werden alle Werte zurückgesetzt, dann sollte das nächste zutreffende Event das entsprechenden Kommando auslösen.

Für irgendwelche Analysen, musst du mir einen nachvollziehbaren Fall liefern.

Gruß

Damian

ich habe nur den temperaturwert geändert. danach kam nichts mehr, obwohl ja die temperatur zu hoch war.

liegts jetzt an "do always" ? das hab ich aktiviert.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 16 Juli 2014, 18:34:12
Zitat von: satprofi am 16 Juli 2014, 18:18:01
ich habe nur den temperaturwert geändert. danach kam nichts mehr, obwohl ja die temperatur zu hoch war.

liegts jetzt an "do always" ? das hab ich aktiviert.

Poste mal deine Definition, dann kann ich dir sagen, ob die Sache sinnvoll ist. Vielleicht ist es nur ein Verständnisproblem.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 16 Juli 2014, 22:16:32
Vorab zur Info

Ich bin in der Testphase einer neuen Version, die nun auch mit Zeitintervallen umgehen kann. Ich habe auch gleich eine Wochentagfunktion eingebaut, weil ich die Wochentag-Abfragen umständlich fand. Hier einige Beispiele aus der neuen Doku:

Radio soll zwischen 8:00 und 10:00 Uhr an sein:

define DI_Radio DOIF ([08:00-10:00]) (set Radio on) DOELSEIF (set Radio off)

Nur sonntags (0) und samstags (6) (1 entspricht Montag, 2 Dienstag, usw. 5 Freitag):

define DI_Radio DOIF ([08:00-10:00]|06) (set Radio on) DOELSEIF (set Radio off)

Nur montags, mittwochs und freitags:

define DI_Radio DOIF ([08:00-10:00]|135) (set Radio on) DOELSEIF (set Radio off)

Nur am Wochenende bzw. an Feiertagen lt. holiday-Datei (7 entspricht $we):

define DI_Radio DOIF ([08:00-10:00]|7) (set Radio on) DOELSEIF (set Radio off)

Nur an Arbeitstagen (8 ist das Gegenteil von 7, entspricht !$we):

define DI_Radio DOIF ([08:00-10:00]|8) (set Radio on) DOELSEIF (set Radio off)


Schalten bei Sonnenaufgang und Sonnenuntergang:

define DI_Licht ([{sunrise_abs()}-{sunset_abs()}]) (set Aussenleuchte off) DOELSEIF (set Aussenleuchte on)

Rollläden sollen an Arbeitstagen nach 6:25 Uhr hochfahren, wenn es hell wird, am Wochenende erst um 9:00 Uhr:

define DI_Rolladen DOIF ([Sensor:helligkeit]>100 and [06:25-09:00|8] or [09:00|7]) (set Rollladen on)


Wenn die Tests erfolgreich abgeschlossen sind, gibt´s natürlich eine Info zum Download.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: joshi04 am 17 Juli 2014, 06:39:12
Das Modul ist schon super und es wird immer besser! Vorweg ein großer Dank auch wenn sichs wiederholt.
Die Nomenklatur der Tage ist beim Heatung_Control schon ziemlich "sufisticated". Vielleicht kannst Du etwas übernehmen. Aber es gibt sicher Gründe, warum das nicht direkt geht und ich finds  schon total klasse, wenns überhaupt geht. Nomenklatur ist ja nur einmal bei der Definition wichtig.

Ich stelle mich gerne zum testen zur Verfügung.
Schöne Grüße,
John


Gesendet von meinem iPhone mit Tapatalk
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 Juli 2014, 06:47:16
Zitat von: Damian am 16 Juli 2014, 22:16:32
Ich bin in der Testphase einer neuen Version, die nun auch mit Zeitintervallen umgehen kann. Ich habe auch gleich eine Wochentagfunktion eingebaut, weil ich die Wochentag-Abfragen umständlich fand. Hier einige Beispiele aus der neuen Doku:
Wäre es prinzipiell auch möglich, ein "offenes" Intervall anzugeben. Für den Anwendungsfall, den ich hier schon mal geschildert hatte: Ein Licht soll bei Sonnenuntergang, aber frühestens 17:00 Uhr angeschaltet werden. Wenn der Sonnenuntergang vor 17:00 Uhr liegt, soll eben erst um 17:00 Uhr geschaltet werden.

Theoretisch also:
DOIF ([{sunset_abs()}] and [17:00-]) (set Licht on) DOELSE (set Licht off)
aber praktisch geht das vermutlich nicht? Das Problem bei diesem Szenario ist, dass das Licht nicht zu einem bestimmten Zeitpunkt wieder ausgeschaltet werden soll, sondern über eine andere Funktion beim "ins Bett gehen" ausgeschaltet wird.

Wobei, wenn ich die richtig verstehe, könnte ich mir beispielsweise hiermit behelfen:
DOIF ([{sunset_abs()}] and [17:00-sunrise_abs()}]) (set Licht on) DOELSE (set Licht off)
Wobei sunrise_abs erst am nächsten Tag liegt und kleiner als 17:00 Uhr ist. Das reale Intervall wäre also beispielsweise heute 17:00-04:39:59. Würde DOIF damit in diesem Szenario wie gewünscht funktionieren?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 Juli 2014, 07:45:26
Zitat von: Brockmann am 17 Juli 2014, 06:47:16
Wäre es prinzipiell auch möglich, ein "offenes" Intervall anzugeben. Für den Anwendungsfall, den ich hier schon mal geschildert hatte: Ein Licht soll bei Sonnenuntergang, aber frühestens 17:00 Uhr angeschaltet werden. Wenn der Sonnenuntergang vor 17:00 Uhr liegt, soll eben erst um 17:00 Uhr geschaltet werden.

Theoretisch also:
DOIF ([{sunset_abs()}] and [17:00-]) (set Licht on) DOELSE (set Licht off)
aber praktisch geht das vermutlich nicht? Das Problem bei diesem Szenario ist, dass das Licht nicht zu einem bestimmten Zeitpunkt wieder ausgeschaltet werden soll, sondern über eine andere Funktion beim "ins Bett gehen" ausgeschaltet wird.

Wobei, wenn ich die richtig verstehe, könnte ich mir beispielsweise hiermit behelfen:
DOIF ([{sunset_abs()}] and [17:00-sunrise_abs()}]) (set Licht on) DOELSE (set Licht off)
Wobei sunrise_abs erst am nächsten Tag liegt und kleiner als 17:00 Uhr ist. Das reale Intervall wäre also beispielsweise heute 17:00-04:39:59. Würde DOIF damit in diesem Szenario wie gewünscht funktionieren?

Offene Intervalle sind schwierig, sie enden um Mitternacht. Wenn sie nicht enden würden, dann kann man gleich einen Zeitpunkt wählen.

Intervalle z. B. [17:00-16:00] oder mit Funktionen werden unterstützt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 Juli 2014, 07:58:00
Zitat von: Damian am 17 Juli 2014, 07:45:26
Intervalle z. B. [17:00-16:00] oder mit Funktionen werden unterstützt.
Nur noch mal zur Sicherheit:
Das heisst, wenn bei einem Intervall die zweite Angabe kleiner als die erste ist, wird der zweite Zeitpunkt auf den nächsten Tag verschoben?
[17:00-04:00] wäre also zwischen 17:00 Uhr abends heute und 4:00 Uhr morgens am nächsten Tag wahr?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 Juli 2014, 09:29:48
Zitat von: Brockmann am 17 Juli 2014, 07:58:00
Nur noch mal zur Sicherheit:
Das heisst, wenn bei einem Intervall die zweite Angabe kleiner als die erste ist, wird der zweite Zeitpunkt auf den nächsten Tag verschoben?
[17:00-04:00] wäre also zwischen 17:00 Uhr abends heute und 4:00 Uhr morgens am nächsten Tag wahr?
Wenn du es noch vor 17:00 Uhr definierst, dann ja. Es wird immer jeweils der nächstmögliche Trigger-Zeitpunkt genommen. Wenn du es nach 17:00 Uhr definierst, dann wird logischerweise zu erst um 04:00 Uhr getriggert und dann am nächsten Tag um 17:00 Uhr. Es wird aber immer ab 17:00 Uhr der Ausdruck wahr sein und ab 04:00 Uhr false.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 Juli 2014, 13:07:12
Zitat von: Brockmann am 17 Juli 2014, 06:47:16
DOIF ([{sunset_abs()}] and [17:00-sunrise_abs()}]) (set Licht on) DOELSE (set Licht off)
Ich sehe gerade, das wird so nicht funktionieren und zwar für den Fall, dass sunsset vor 17:00 Uhr liegt, dann wird zwar nochmal um 17:00 Uhr getriggert aber sunset ist dann nicht wahr.

Das sollte mit Ausnutzung von sunset-Eigenschaften als Intervallangabe so besser funktionieren:

DOIF ([{sunset(0,"17:00","21:00")}-{sunrise_abs()}]) (set Licht on) DOELSE (set Licht off)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cwagner am 18 Juli 2014, 08:08:21
Moin, Damian,

Urlaub ist eine prima Gelegenheit, mich in DOIF einzuarbeiten - es ist m.E. das vielseitigste und intuitivste Tools in FHEM.

Eine Anregung: I.d.R. will man ja in der Steuerung, dass etwas "allways" gedoed wird, was halten Du und die Mitbnenutzer davon, dass das attribut do als Default schon auf allways steht?

Wenn man dann eine Eintagsfliege will, kann es ja auf - huch - once gibt es gar nicht im Dropdown?

--------

Ein zweites Thema: Wie könnte ich verhindern, dass dieses DOIF ständig immer wieder CMD1 von Eintreten der Dunkelheit bis Ende der Dunkelheit und CMD2 vice versa "feuert". Ich hatte eigentlich ähnlich THRESHOLD erwartet, dass nur der Wechsel gesendet wird - so werden meine Rollläden viele Hundert Mal in am Tag angefunkt - sie tun nichts, aber es ist Funklast und die Relais werden unnötig betätigt.
([Umweltsensor:Helligkeit]< 0.011 or $hms gt "23:00") (set Rolllaeden on,set ROLL_Schlafzimmer AB) DOELSEIF ([Umweltsensor:Helligkeit]> 0.011 or $hms gt "07:00") (set Rolllaeden off)

Was ich erreichen möchte ist: Rollläden gehen runter, wenn Dunkelheit erreicht, allerspätestens aber um 23 Uhr. Sie sollen hochgehen, wenn Helligkeitsschwelle überschritten, spätestens aber um 7 Uhr.

Grüße

Christian

P.S.: Aktuell nur noch 10 THRESHOLDs, schon 4 DOIFs, aber schon jetzt viel klarere Strukturen mit weniger Dummys und Hilfsstrukturen.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 18 Juli 2014, 09:10:18
Zitat von: cwagner am 18 Juli 2014, 08:08:21
Eine Anregung: I.d.R. will man ja in der Steuerung, dass etwas "allways" gedoed wird, was halten Du und die Mitbnenutzer davon, dass das attribut do als Default schon auf allways steht?
Wenn man dann eine Eintagsfliege will, kann es ja auf - huch - once gibt es gar nicht im Dropdown?
Ich habe darüber auch schon nachgedacht, aber meiner Meinung nach ist es besser, wie es jetzt ist. Vor allem der Begriff "once" würde nahelegen, dass das DOIF nur ein einziges Mal und dann nie wieder ausgeführt wird. Und wenn man standardmäßig "do always" verwendet, würden genau solche Fälle, wie Du sie im Folgenden beschreibst, recht häufig auftreten.

Zitat von: cwagner am 18 Juli 2014, 08:08:21
Ein zweites Thema: Wie könnte ich verhindern, dass dieses DOIF ständig immer wieder CMD1 von Eintreten der Dunkelheit bis Ende der Dunkelheit und CMD2 vice versa "feuert".
Hast Du in diesem Fall vielleicht "do always" gesetzt? Das würde das beschriebene Verhalten jedenfalls erklären. Ohne "do always" sollte dieses DOIF immer nur einmal ausgeführt werden, wenn der Helligkeitswert unter die Schwelle sinkt und dann erst wieder, wenn er die Schwelle wieder überschreitet.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Juli 2014, 09:57:27
Hallo Christian,

zum Thema do always. Ein wichtiges Unterscheidungsmerkmal von DOIF zu notify oder at ist die Zustandsverwaltung wie beim THRESHOLD-Modul. Es gibt Anwendungsfälle, da ist do always sicherlich unabdingbar, allerdings in den meisten Fällen (aktuell von 19 Beispielen eins) ist es nicht erforderlich, sondern sogar kontraproduktiv. Das, was viele Anfänger immer wieder tun, sind Konstrukte der Art:
define n notify sensor set aktor on
und merken nicht, dass sie evtl. alle paar Minuten einen Befehl unnötig senden. Beim DOIF muss man sich durch Angabe von do always eben vorher Gedanken machen, ob ständiges Ausführen eines Befehls sinnvoll ist oder eben nicht. Und wie gesagt, in den meisten Fällen braucht man es nicht.

Zu:

([Umweltsensor:Helligkeit]< 0.011 or $hms gt "23:00") (set Rolllaeden on,set ROLL_Schlafzimmer AB) DOELSEIF ([Umweltsensor:Helligkeit]> 0.011 or $hms gt "07:00") (set Rolllaeden off)

Du hast hier keine Hysterese eingebaut, wenn dein Sensor schwankende Werte um 0.011 liefert, dann wechselt der Zustand ständig und führt zur Ausführung. Dann besser etwas Luft lassen, als THRESHOLD-Experte sollte es dir bekannt vorkommen ;)

Besser also:

([Umweltsensor:Helligkeit]< 0.011 or $hms gt "23:00") (set Rolllaeden on,set ROLL_Schlafzimmer AB) DOELSEIF ([Umweltsensor:Helligkeit]> 0.015 or $hms gt "07:00") (set Rolllaeden off)

Den genauen Wert musst du natürlich bei dir anpassen.

Edit: Bei der aktuellen Version 1.41 sollte auch ohne Hysterese bei Schwankungen kein Zustandswechsel erfolgten, da der nicht angegebene ELSE-Fall intern nicht mehr gesetzt wird. Ah ja, do always ist hier natürlich Gift  ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cwagner am 18 Juli 2014, 12:00:00
Hallo "Brockmann",

danke für die Spur meines Verständnisfehlers, auf die Du mich gebracht hast.

Hallo Damian,

danke für die Erläuterung, ich hatte offenbar do allways zu oberflächlich verstanden. Mit der Absicht ist es auch für mich völlig nachvollziehbar, dass dies als Ausnahme in Form eines Attributes gesetzt werden soll.

Zur Hysterese: Da mein Sensor bei diesen schwachen Werten sowieso hin- und herschwankt, glaube ich  über das Attribut wait 300:300 vorgesorgt zu haben. Erfahrungen fehlen noch.

---------

Unter den Attributen fand ich das serienmäßige eventmap, dass ich schon bei THRESHOLD verwandt habe, um in einer Webübersicht "Klartext" zu haben. Das scheint aber bei DOIF (noch nicht?) zu funktionieren.


Grüße

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 18 Juli 2014, 12:20:05
Zitat von: Damian am 16 Juli 2014, 18:34:12
Poste mal deine Definition, dann kann ich dir sagen, ob die Sache sinnvoll ist. Vielleicht ist es nur ein Verständnisproblem.

Gruß

Damian

Hallo.
Vielleicht findest du den/die fehler.


([Heizungsmode] eq "off" and [Pac:state] > 1500 and [HZ_Wohnzimmer_Weather] > 22 and [Terassentuer] eq "Closed" and $hms gt "10:00" and $hms lt "18:30") (set Klima_WZ on) DOELSEIF ([Heizungsmode] eq "auto" and [Pac:state] > 1500 and [HZ_Wohnzimmer_Weather] < 24 and [Terassentuer] eq "Closed" and $hms gt "08:00" and $hms lt "18:30") (set Klima_WZ on) DOELSEIF ([Klima_WZ_manuOn] eq "on" and [HZ_Wohnzimmer_Weather] > 23 and [Terassentuer] eq "Closed") (set Klima_WZ on) DOELSEIF ([Heizungsmode] eq "off" and [Pac:state] < 1000 and [Terassentuer] eq "Closed") (set Klima_WZ off) DOELSEIF ([Klima_WZ_manuOn] eq "off") (set Klima_WZ off) DOELSE (set Klima_WZ ff)


do always
   
wait 300:300:0:300:0:300

Gruss.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Juli 2014, 13:14:30
Zitat von: cwagner am 18 Juli 2014, 12:00:00
Unter den Attributen fand ich das serienmäßige eventmap, dass ich schon bei THRESHOLD verwandt habe, um in einer Webübersicht "Klartext" zu haben. Das scheint aber bei DOIF (noch nicht?) zu funktionieren.


Dafür habe ich bei THRESHOLD genau wenig programmiert wie beim DOIF. Das Verhalten sollte also gleich sein. Bei DOIF gibt es das Attribut cmdState, da kannst du den Zustand beliebig umdefinieren.

Geplant ist in der nächsten Version von DOIF  vollkommen unabhängig vom Zustand beliebige Informationen einstellen zu können. Beispiel:

attr di_test State Das ist der aktuelle Zustand des Moduls: [di_test], die aktuelle Temperatur beträgt [Sensor:temp]

Aktualisierung soll sofort erfolgen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: cwagner am 18 Juli 2014, 14:18:42
Hallo Damian,

das funktioniert einwandfrei. Jetzt wird das richtig informativ - aktuell bastele ich aus gegebenenen Anlass an einer Steuerung, die je nach Sommer/Winter für die Lüftung eine Klappe steuert, die diese 4 Fälle abdeckt:

1. Sommer: Die Luft draußen ist heiß - umschalten auf Erdwärmetauscher - ins Haus strömt gekühlte, entfeuchtete Luft
2. Sommer: Die Luft draußen ist kühler (in der Nacht) als der sich immer weiter erwärmende Erdwärmetauscher - schalte den Erdwärmetauscher aus.
3. Winter: Die Luft draußen ist kälter als die Luft aus dem Erdwärmetauscher - diesen benutzen
4. Winter: Die Lauft draußen ist wärmer als die Luft aus dem Erdwärmetauscher (typisch im zeitigen Frühjahr, wenn der Erdwärmetauscher durchgekühlt ist), den Erdwärmetauscher ausschalten.
Beim Umschalten wird immer der Zustand die letzte Temperatur des Erdwärmetauschers für die nächsten Vergleiche gespeichert.

Das war vorher ein Gewusel von zwei Thresholds und Dummys - nochmals danke für das tolle Modul, ich freu mich schon auf die nächste Version mit vereinfachter Angabe von Zeiträumen und Wochentagsabhängigkeiten.

Herzliche Grüße

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Juli 2014, 23:07:14
Noch kurz vor Mitternacht: Version 1.5 mit Zeitintervallen ist im ersten Post verfügbar.

Die Tests zu Hause über eine 1000 km entfernte Remoteverbindung haben sich etwas schwieriger gestaltet als gedacht  :)

Bitte die komplett überarbeitete Dokumentation im ersten Post beachten.

Achtung: Diese Version ist intern nicht abwärtskompatibel zu der vorherigen. Daher:

System  anhalten, Modul kopieren, System wieder hochfahren (kein reload)

Danach bei allen bereits definierten DOIF-Modulen über die Weboberfläche auf DEF klicken und über modify-Button bestätigen.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Juli 2014, 17:23:17
Zitat von: satprofi am 18 Juli 2014, 12:20:05
Hallo.
Vielleicht findest du den/die fehler.


([Heizungsmode] eq "off" and [Pac:state] > 1500 and [HZ_Wohnzimmer_Weather] > 22 and [Terassentuer] eq "Closed" and $hms gt "10:00" and $hms lt "18:30") (set Klima_WZ on) DOELSEIF ([Heizungsmode] eq "auto" and [Pac:state] > 1500 and [HZ_Wohnzimmer_Weather] < 24 and [Terassentuer] eq "Closed" and $hms gt "08:00" and $hms lt "18:30") (set Klima_WZ on) DOELSEIF ([Klima_WZ_manuOn] eq "on" and [HZ_Wohnzimmer_Weather] > 23 and [Terassentuer] eq "Closed") (set Klima_WZ on) DOELSEIF ([Heizungsmode] eq "off" and [Pac:state] < 1000 and [Terassentuer] eq "Closed") (set Klima_WZ off) DOELSEIF ([Klima_WZ_manuOn] eq "off") (set Klima_WZ off) DOELSE (set Klima_WZ ff)


do always
   
wait 300:300:0:300:0:300

Gruss.
Ohne zu verstehen, was die Abfragen bei dir im Einzelnen bedeuten, habe ich dein Konstrukt etwas zusammengefasst und auf Intervalle umgestellt. do always macht hier keinen Sinn. Sonst wird unnötig bei dir ein set-Befehl wiederholt (wenn etwas auf off gesetzt wurde, dann muss man es beim nächsten Trigger nicht schon wieder auf off setzen)

((([Heizungsmode] eq "off" and [HZ_Wohnzimmer_Weather] > 22) or ([Heizungsmode] eq "auto" and [HZ_Wohnzimmer_Weather] < 24))
and [Pac:state] > 1500 and [10:00-18:30] and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF  ([Klima_WZ_manuOn] eq "on" and [HZ_Wohnzimmer_Weather] > 23 and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF ([Heizungsmode] eq "off" and [Pac:state] < 1000 and [Terassentuer] eq "Closed")
(set Klima_WZ off)
DOELSEIF ([Klima_WZ_manuOn] eq "off")
  (set Klima_WZ off)
DOELSE
  (set Klima_WZ off)
 
wait 300:0:300:0:300


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 19 Juli 2014, 17:38:49
aha, danke.
kann man jetzt zeileneinrückung verwenden?
das wäre ja eine hilfe.

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Juli 2014, 17:44:04
Zitat von: satprofi am 19 Juli 2014, 17:38:49
aha, danke.
kann man jetzt zeileneinrückung verwenden?
das wäre ja eine hilfe.

gruss

Immer schon! Oder haben wir die Doku mit allen 19! Beispielen nicht aufmerksam durchgelesen  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 20 Juli 2014, 11:45:27
Zitat von: Damian am 19 Juli 2014, 17:23:17
Ohne zu verstehen, was die Abfragen bei dir im Einzelnen bedeuten, habe ich dein Konstrukt etwas zusammengefasst und auf Intervalle umgestellt. do always macht hier keinen Sinn. Sonst wird unnötig bei dir ein set-Befehl wiederholt (wenn etwas auf off gesetzt wurde, dann muss man es beim nächsten Trigger nicht schon wieder auf off setzen)

((([Heizungsmode] eq "off" and [HZ_Wohnzimmer_Weather] > 22) or ([Heizungsmode] eq "auto" and [HZ_Wohnzimmer_Weather] < 24))
and [Pac:state] > 1500 and [10:00-18:30] and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF  ([Klima_WZ_manuOn] eq "on" and [HZ_Wohnzimmer_Weather] > 23 and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF ([Heizungsmode] eq "off" and [Pac:state] < 1000 and [Terassentuer] eq "Closed")
(set Klima_WZ off)
DOELSEIF ([Klima_WZ_manuOn] eq "off")
  (set Klima_WZ off)
DOELSE
  (set Klima_WZ off)
 
wait 300:0:300:0:300


Gruß

Damian

leider heute keine einschaltung mehr mit diesem code.
timer läuft seit 10:00 aber keine aktivität.

[edit]
Habe fehler gefunden, vielöleicht ein bug? wenn einer der readings " -???- " hat läuft das ganze nicht an. dies ist aber nach stromausfall oder restart von fhem der fall.
wie kann man das umgehen?

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 Juli 2014, 19:22:14
Zitat von: satprofi am 20 Juli 2014, 11:45:27
leider heute keine einschaltung mehr mit diesem code.
timer läuft seit 10:00 aber keine aktivität.

[edit]
Habe fehler gefunden, vielöleicht ein bug? wenn einer der readings " -???- " hat läuft das ganze nicht an. dies ist aber nach stromausfall oder restart von fhem der fall.
wie kann man das umgehen?

gruss

Wenn eine Bedingung nicht erfüllt ist, weil ein Reading nicht existiert oder einen anderen Wert hat, dann wird natürlich auch das entsprechende Kommando nicht ausgeführt. Sobald jedoch alle Readings den erwarteten Wert haben und ein Event kommt, dann muss das Kommando ausgeführt werden.

Wenn du mir beweisen kannst, dass ein Kommando nicht ausgeführt wird, obwohl alle Werte, die abgefragt werden, den korrekten Wert haben und ein Event stattgefunden hat, dann kann ich nach einem Fehler suchen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 20 Juli 2014, 19:33:57
hallo.
es liegt nicht an DOIF, sondern an fhem selbst. denn werte die keine zustandsänderung nach reboot des systems haben, werden mit -???- gelistet.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 Juli 2014, 19:41:52
Zitat von: satprofi am 20 Juli 2014, 19:33:57
hallo.
es liegt nicht an DOIF, sondern an fhem selbst. denn werte die keine zustandsänderung nach reboot des systems haben, werden mit -???- gelistet.

Wenn du vor dem Reboot save config machst, dann sollte der Reading erhalten bleiben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: TecCheck am 20 Juli 2014, 22:21:54
Hallo zusammen,
hallo Damian,

ich habe jetzt die neueste Version DOIF (1.5)  installiert und es läuft,
soweit ich das feststellen kann, bisher alles bestens.

habe bisher 3 DOIF's laufen, von denen zwei  5 notify's ersetzen und eins direkt als DOIF umgesetzt wurde.

Dein Modul wird ja immer universeller.
Du solltest auf jeden Fall nach dem einchecken (das kommt, da bin ich sicher) neben einem Eintrag in die CommandRef eine WikiSeite mit allen Beispielen hier aus dem Post in Betracht ziehen. Du hast sicher viel Arbeit in dieses Modul investiert und es wäre zu schade, wenn es aus Unkenntniss kaum genutzt würde.

So, jetzt mein (Luxus)Problem:
Ich möchte bei jeder Statusänderung (egal welche Änderung) einer meiner Tür/Fenstersensoren
einen Einschaltbefehl an ein Display senden.
Ist es mit DOIF möglich, dies zu erreichen, ohne jeden Sensor einzeln aufzuzählen wie:
DOIF ([tf_Sens1] eq "on"  or [tf_Sens2] eq "on"  or   [tf_Sens3] eq "on" or . . . . .) (set display on_for_timer 20)

z.B. in dem man auf eine Statusänderung in einer Gruppe triggert wie zb.:

DOIF ([TF_SensorenGruppe] eq "on"  or  [TF_SensorenGruppe] eq "off") (set display on_for_timer 20)

oder kannst du eine solche funktion einbauen?
Ist das 'gemeinsame triggern' überhaupt in fhem möglich??

Sorry,  :-[  wollte (als NichtProgrammierer hab ich keine Ahnung wieviel Arbeit das ist) nicht unverschämt sein, könnte aber nützlich sein.

Jedenfalls DANKE für dein Modul

Schöne Grüße
Wolfgang
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 Juli 2014, 22:43:41
Zitat von: TecCheck am 20 Juli 2014, 22:21:54
Hallo zusammen,
Du solltest auf jeden Fall nach dem einchecken (das kommt, da bin ich sicher) neben einem Eintrag in die CommandRef eine WikiSeite mit allen Beispielen hier aus dem Post in Betracht ziehen. Du hast sicher viel Arbeit in dieses Modul investiert und es wäre zu schade, wenn es aus Unkenntniss kaum genutzt würde.

Da brauchst du dir keine Sorgen zu machen. Die Doku aus dem ersten Post kommt komplett mit allen Beispielen in die Commandref. So habe ich auch beim THRESHOLD verfahren. Wiki mag ganz nett sein, ich finde aber ausführliche Beispiele gehören in die Doku, wo man auch zuerst nachschaut.

Ich bin mir jetzt schon sicher, dass DOIF das THRESHOLD Modul, was nicht ganz unbekannt ist, um ein Vielfaches in der Nutzung übertrumpfen wird, da es viel universeller ist.



Zitat
So, jetzt mein (Luxus)Problem:
Ich möchte bei jeder Statusänderung (egal welche Änderung) einer meiner Tür/Fenstersensoren
einen Einschaltbefehl an ein Display senden.
Ist es mit DOIF möglich, dies zu erreichen, ohne jeden Sensor einzeln aufzuzählen wie:
DOIF ([tf_Sens1] eq "on"  or [tf_Sens2] eq "on"  or   [tf_Sens3] eq "on" or . . . . .) (set display on_for_timer 20)

z.B. in dem man auf eine Statusänderung in einer Gruppe triggert wie zb.:

DOIF ([TF_SensorenGruppe] eq "on"  or  [TF_SensorenGruppe] eq "off") (set display on_for_timer 20)

oder kannst du eine solche funktion einbauen?
Ist das 'gemeinsame triggern' überhaupt in fhem möglich??


Dafür brauche ich nichts zu programmieren. Du fasst deine Sensoren über "structure" zu einer Gruppe zusammen und bestimmst, was passieren soll (z. B. alle off -> gruppe off) und benutzt dann deine structure bei DOIF als Gruppe.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: TecCheck am 20 Juli 2014, 22:53:22
Dankeschön, werde das morgen mal ausprobieren.

Das nenne ich mal Support!
Da kann sich manche Hotline ein paar Scheiben von abschneiden.

Schönen Abend noch!

Wolfgang
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 Juli 2014, 23:00:15
Zitat von: TecCheck am 20 Juli 2014, 22:53:22
Das nenne ich mal Support!
Da kann sich manche Hotline ein paar Scheiben von abschneiden.

Na denn, und das mache ich nebenbei in meinem Urlaub  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 21 Juli 2014, 00:11:36
Hi,

Sorry für meinen späten Kommentar zu euren Antworten.

Ersteinmal möchte ich danke für eure Bemühungen sagen.

Da mein letzter Post ein paar Seiten her ist hier nochmal mein Problem:

Zitat von: Hoeness am 12 Juli 2014, 22:27:16
Hi,

ich bins mal wieder ;-)

Ich möchte mit DOIF ein dummy toggeln (aus/an):

Der Trigger hierzu kommt von einem Taster über GPIO: hier die Config:

######## Input 4 -Beregnung
define In4_Beregnung RPI_GPIO 10
attr In4_Beregnung active_low no
attr In4_Beregnung debounce_in_ms 50
attr In4_Beregnung devStateIcon aus:rain-icon_off an:rain-icon_on
attr In4_Beregnung direction input
attr In4_Beregnung eventMap on:an off:aus
attr In4_Beregnung group 1_Input
attr In4_Beregnung interrupt rising
attr In4_Beregnung pud_resistor down
attr In4_Beregnung room Bewässerung_DOIF
attr In4_Beregnung webCmd an:aus


Der dummy ist wie folgt konfiguriert:

######## Beleuchtung Terasse
define man_Bewaesserung dummy
attr man_Bewaesserung group 2_Output
attr man_Bewaesserung room Bewässerung_DOIF
attr man_Bewaesserung webCmd an:aus
attr man_Bewaesserung devStateIcon aus:Lampe_off an:Lampe_on
attr man_Bewaesserung eventMap on:aus off:an


Mein DOIF sieht wie folgt aus:

define n_In4_Beregnung DOIF ([In4_Beregnung] eq "an" and [man_Bewaesserung] eq "aus") (set man_Bewaesserung an) DOELSEIF ([In4_Beregnung] eq "an" and [man_Bewaesserung] eq "an") (set man_Bewaesserung aus)

Irgendwie stehe ich hier auf dem Schlauch.

Hat sich noch nicht viel geändert. Ich habe heute wieder ein paar Stunden experimentiert. Bin aber nicht weitergekommen.
Im Event Monitor kann ich sehen, dass das dummy man_Bewaesserung aus und danach sofort wieder eingeschaltet wird. Warum ist mir schleierhaft.

2014-07-20 23:38:21 DOIF n_In4_Beregnung cmd_1
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd: 1
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd_event: man_Bewaesserung
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_error: no error
2014-07-20 23:38:21 dummy man_Bewaesserung aus
2014-07-20 23:38:21 dummy man_Bewaesserung an
2014-07-20 23:38:21 DOIF n_In4_Beregnung cmd_2
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd: 2
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd_event: In4_Beregnung
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_error: no error
2014-07-20 23:38:21 RPI_GPIO In4_Beregnung Pinlevel: high
2014-07-20 23:38:21 RPI_GPIO In4_Beregnung an
2014-07-20 23:38:22 RPI_GPIO In4_Beregnung Pinlevel: low
2014-07-20 23:38:22 RPI_GPIO In4_Beregnung aus
2014-07-20 23:38:22 RPI_GPIO In4_Beregnung Langpress: off


Vielleicht kann mir jemand helfen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Juli 2014, 08:16:37
Zitat von: Hoeness am 21 Juli 2014, 00:11:36
Hi,

Sorry für meinen späten Kommentar zu euren Antworten.

Ersteinmal möchte ich danke für eure Bemühungen sagen.

Da mein letzter Post ein paar Seiten her ist hier nochmal mein Problem:

Hat sich noch nicht viel geändert. Ich habe heute wieder ein paar Stunden experimentiert. Bin aber nicht weitergekommen.
Im Event Monitor kann ich sehen, dass das dummy man_Bewaesserung aus und danach sofort wieder eingeschaltet wird. Warum ist mir schleierhaft.

2014-07-20 23:38:21 DOIF n_In4_Beregnung cmd_1
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd: 1
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd_event: man_Bewaesserung
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_error: no error
2014-07-20 23:38:21 dummy man_Bewaesserung aus
2014-07-20 23:38:21 dummy man_Bewaesserung an
2014-07-20 23:38:21 DOIF n_In4_Beregnung cmd_2
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd: 2
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_cmd_event: In4_Beregnung
2014-07-20 23:38:21 DOIF n_In4_Beregnung last_error: no error
2014-07-20 23:38:21 RPI_GPIO In4_Beregnung Pinlevel: high
2014-07-20 23:38:21 RPI_GPIO In4_Beregnung an
2014-07-20 23:38:22 RPI_GPIO In4_Beregnung Pinlevel: low
2014-07-20 23:38:22 RPI_GPIO In4_Beregnung aus
2014-07-20 23:38:22 RPI_GPIO In4_Beregnung Langpress: off


Vielleicht kann mir jemand helfen.

Ich kann das hier z. Zt. aus dem Urlaub nicht nachstellen. Vielleicht hat es doch etwas damit zu tun, dass durch das Setzen des Dummys das Event durch fhem nicht unterbunden wird und erneut ein Event bei n_In4 auslöst.

Du kannst mal probieren

attr n_In4 wait 1:1

zu setzen. Damit wird ein Verzögerungstimer von 1 Sekunde gesetzt, damit könnte das Problem umgangen werden.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Juli 2014, 08:53:32
Zitat von: Damian am 21 Juli 2014, 08:16:37
Ich kann das hier z. Zt. aus dem Urlaub nicht nachstellen. Vielleicht hat es doch etwas damit zu tun, dass durch das Setzen des Dummys das Event durch fhem nicht unterbunden wird und erneut ein Event bei n_In4 auslöst.

Du kannst mal probieren

attr n_In4 wait 1:1

zu setzen. Damit wird ein Verzögerungstimer von 1 Sekunde gesetzt, damit könnte das Problem umgangen werden.

Gruß

Damian

Ich befürchte es wird das Problem nicht beheben, allerdings sollte das die Lösung sein:

define n_In4_Beregnung DOIF ([In4_Beregnung] eq "an")
(IF ([man_Bewaesserung] eq "aus") (set man_Bewaesserung an) ELSE (set man_Bewaesserung aus))

attr n_In4 do always


So löst das Setzen von "man_Bewasseung" kein Event bei n_In4 mehr aus.

Und ich dachte IF bräuchte man gar nicht mehr  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Juli 2014, 09:10:51
Zitat von: Damian am 21 Juli 2014, 08:53:32
Und ich dachte IF bräuchte man gar nicht mehr  :)
Tja, ganz ohne wird es wohl auch in Zukunft nicht gehen.  ;)

Vielleicht noch zur Erklärung für Hoeness, was eigentlich das Problem ist:
Du hast hier eine perfekte Endlosschleife programmiert, die nur dadurch verhindert wird, dass In4_Beregnung irgendwann wieder auf "aus" geht. Das passiert aber nicht sofort, sondern erst, wenn dieser Schritt in der FHEM-Queue dran ist. Das kannst Du im Event-Monitor gut sehen: In4_Beregnung geht erst um :22 wieder auf "aus", da ist das DOIF aber um :21 schon zweimal abgearbeitet.
Denn durch das Verändern von man_Bewaesserung im DOIF rufst Du das DOIF sofort wieder auf, weil eine Änderung an man_Bewaesserung es ja triggert. Da man_Bewaesserung jetzt aber an ist, wird es diesmal gleich wieder ausgeschaltet.
Vermutlich greift FHEM danach selbst ein, weil die Veränderung an man_Bewaesserung durch das DOIF selbst vorgenommen wurde und triggert das DOIF nicht noch ein drittes Mal - eben um eine Endlosschleife zu verhindern. Vielleicht ist die Queue inzwischen aber auch so weit, dass das In4_Beregnung wieder auf "aus" gesetzt wurde. Das kann man (bzw. ich) nicht so genau sagen.

Du möchtest hier ja im Grunde genommen ein Toggle für Dummy verwenden, was FHEM von Hause aus nicht unterstützt. Damian hat dieses Toggle jetzt in seinen Vorschlag eingebaut. Eine etwas universellere Lösung wäre ein cmdalias, der sozusagen ein Toggle für alle Deine Dummy nachrüstet. Das kannst Du das an mehreren Stellen nutzen, etwa so:
define CMD_dtoggle cmdalias dtoggle .* AS IF (Value("$EVTPART0") eq "an")(set $EVTPART0 aus) ELSE (set $EVTPART0 an)
Dann würde Dein DOIF einfach so aussehen:
define n_In4_Beregnung DOIF ([In4_Beregnung] eq "an") (dtoggle man_Bewaesserung)
Das attr n_In4 do always wäre überflüssig, wenn IN4_Beregung ein Taster ist, da das dann ohnehin immer wieder auf "aus" zurückfällt (wie ich annehme). Aber schaden sollte es auch nicht.
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 21 Juli 2014, 10:57:33
Danke für die schnellen Antworten und eure Lösungen.

Ich werde beides heute Abend ausprobieren und mich dann wieder melden.

@Brockmann:

deinen Code
define CMD_dtoggle cmdalias dtoggle .* AS IF (Value("$EVTPART0") eq "an")(set $EVTPART0 aus) ELSE (set $EVTPART0 an)

füge ich irgendwo (weit oben) in meine fhem.cfg ein.
Richtig ?

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Juli 2014, 11:06:04
Zitat von: Hoeness am 21 Juli 2014, 10:57:33
define CMD_dtoggle cmdalias dtoggle .* AS IF (Value("$EVTPART0") eq "an")(set $EVTPART0 aus) ELSE (set $EVTPART0 an)
füge ich irgendwo (weit oben) in meine fhem.cfg ein.
Einfach in die Kommandozeile in der Weboberfläche einfügen. Der allgemeine Konsens hier im Forum ist: Möglichst nichts direkt in der fhem.cfg erstellen/bearbeiten.
Wenn Du Dich daran hältst, ergibt sich auch die Reihenfolge von alleine, da Du einen cmdalias erst in einem define verwenden kannst, wenn Du ihn zuvor definiert hast.
Er wird also automatisch an der "richtigen" Stelle der fhem.cfg stehen.
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 21 Juli 2014, 23:14:22
Hallo,

hat super geklappt.
da ich das toggeln von dummys eventuell noch öfter benötige habe ich die Lösung von Brockmann umgesetzt.

Danke ihr seid TOP.




Titel: Antw:neues Modul DOIF
Beitrag von: Simon74 am 23 Juli 2014, 23:39:19
Schönes Modul, das verstehe sogar ich  :)

Meine erste DOIF Funktion:
define Cafe_Abends_Aus DOIF ([20:59-21:00] and [t5.ku.sd1_Pwr:power] < 2) (set t5.ku.sd1_Sw off)

Ich hätte nun aber gerne im Logfile stehen das <DOIF "Cafe_Abends_Aus"> ausgelöst wurde, wie am einfachsten ?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Juli 2014, 07:27:50
Zitat von: Simon74 am 23 Juli 2014, 23:39:19
define Cafe_Abends_Aus DOIF ([20:59-21:00] and [t5.ku.sd1_Pwr:power] < 2) (set t5.ku.sd1_Sw off)
Ich hätte nun aber gerne im Logfile stehen das <DOIF "Cafe_Abends_Aus"> ausgelöst wurde, wie am einfachsten ?
Da das ganze ja nur einmal pro Tag ausgeführt werden soll, kannst Du das Intervall weglassen und einfach [21:00] schreiben.
Dann wird das DOIF halt um Punkt 21:00 Uhr einmal ausgeführt.

Logeinträge kannst Du auf jeden Fall jederzeit mit {Log 1, "<DOIF Cafe_Abends_Aus>"} einfügen lassen.
Ob DOIF solche Einträge automatisch anlegen sollte, weiß ich nicht. Andere Befehle wie at oder notify tun das ja auch nicht.
Wenn das DOIF einen Status setzt o. ä., dann hinterlässt das im Log ja in der Regel ohnehin Spuren. Und wenn Du einen Eintrag im Log hast, dass die Kaffeemaschine um 21:00 Uhr ausgeschaltet wurde, dann wird es wohl das DOIF gewesen sein, oder?
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 24 Juli 2014, 13:11:44
Hallo,

ich bin gerade dabei meine Lüftersteuerung zu bauen. Ich möchte die maximale Lüfterstufe (0 bis 10) auf Basis verschiedener Kriterien begrenzen. Dabei habe ich an DOIF gedacht. Nun zu meiner Frage: eines der Kriterien soll die Zeit sein (Lüfter im Schlafzimmer nachts nicht auf höchster Stufe). Das wäre mit DOIF und [xx:00] ja kein Problem. Nun würde ich aber gern die Zeit dynamisch halten (Dropdownliste an meinem Lüftungsdummy). Gibt es nun eine Möglichkeit, wenn ein Nutzer eine Zeit auswählt (set LueftungsDummy Ruhe_Ab 10 => wird in einem Reading des Dummys gespeichert) daraus ein DOIF-Event [10:00] zu machen?

Vielen Dank
Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Juli 2014, 15:15:38
Zitat von: RoBra81 am 24 Juli 2014, 13:11:44
Hallo,

ich bin gerade dabei meine Lüftersteuerung zu bauen. Ich möchte die maximale Lüfterstufe (0 bis 10) auf Basis verschiedener Kriterien begrenzen. Dabei habe ich an DOIF gedacht. Nun zu meiner Frage: eines der Kriterien soll die Zeit sein (Lüfter im Schlafzimmer nachts nicht auf höchster Stufe). Das wäre mit DOIF und [xx:00] ja kein Problem. Nun würde ich aber gern die Zeit dynamisch halten (Dropdownliste an meinem Lüftungsdummy). Gibt es nun eine Möglichkeit, wenn ein Nutzer eine Zeit auswählt (set LueftungsDummy Ruhe_Ab 10 => wird in einem Reading des Dummys gespeichert) daraus ein DOIF-Event [10:00] zu machen?

Vielen Dank
Ronny

Zeiten kann man auch als Funktionen mit [{funktion(...)}] angeben. Dazu musst du dir eine eigene Funkion programmieren, die dann die entsprechende Zeit als Returnwert im Format HH:MM oder HH:MM:SS liefert, siehe z. B. sunset(...).

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 24 Juli 2014, 15:35:14
Super, danke!
Titel: Antw:neues Modul DOIF
Beitrag von: gsbox am 24 Juli 2014, 15:42:50
Hallo.

@Damian : Vielen Dank für die tolle DOIF-Möglichkeit. Damit habe ich es hinbekommen, meine Lampen nach einem Timeout automatisch abschalten zu lassen. Aber jetzt scheitere ich leider an einer Meldung, die ich bringen möchte, sofern das Licht durch den Timer und nicht von Hand ausgeschaltet wurde. Ich habe folgenden Code definiert :

define azLichtAus DOIF ([az_licht] eq "on")({Log 1,"az_licht wurde automatisch abgeschaltet";};;set az_licht off)
attr azLichtAus wait 10


Leider gipfelt das in folgender Fehlermeldung

azLichtAus: {Log 1,"az_licht wurde automatisch abgeschaltet";};;;;set az_licht off: Unknown command {Log, try help.
Unknown command };;set, try help.


Was mache ich falsch ? (bin blutiger FHEM-Anfänger  :( )

Vielen Dank für die Hilfe
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Juli 2014, 16:07:38
Zitat von: gsbox am 24 Juli 2014, 15:42:50
define azLichtAus DOIF ([az_licht] eq "on")({Log 1,"az_licht wurde automatisch abgeschaltet";};;set az_licht off)
Versuch es mal mit
...abgeschaltet"},set az_licht off)
Titel: Antw:neues Modul DOIF
Beitrag von: gsbox am 24 Juli 2014, 16:11:03
Danke, das wars. Mensch, da hätte ich auch selber drauf kommen können  ::)

VG
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Juli 2014, 16:16:02
Zitat von: Damian am 24 Juli 2014, 15:15:38
Zeiten kann man auch als Funktionen mit [{funktion(...)}] angeben. Dazu musst du dir eine eigene Funkion programmieren, die dann die entsprechende Zeit als Returnwert im Format HH:MM oder HH:MM:SS liefert, siehe z. B. sunset(...).
Zu welchem Zeitpunkt wird die Funktion denn zur Berechnung aufgerufen und der Timer gesetzt? Mein Eindruck ist, RoBra81 will einfach irgendwann im Laufe des Tages am Dummy eine Zeit einstellen und danach soll sich das DOIF dann richten. Aber das DOIF bekommt doch nichts davon mit, dass am Dummy etwas geändert wurde. Müsste da nicht irgendwie noch ein Trigger dazu, der bei jeder Änderung am Dummy für die Neuberechnung des Timers sorgt?

Alternativ könnte man vielleicht auch modify nutzen, um das DOIF jedes Mal anzupassen, wenn sich der Wert des Dummy ändert.
Titel: Antw:neues Modul DOIF
Beitrag von: gsbox am 24 Juli 2014, 16:38:56
Ich möchte gerne mehrere Lampen, sowie die Rolläden zu unterschiedlichen Zeiten an unterschiedlichen Tagen mit DOIF schalten (um für unseren Urlaub eine Art AnwesenheitsSimulation zu haben).

Jetzt definiere ich ja einige DOIF-Defines. Ist es möglich, diese zu gruppieren, so dass ich diese "Anwesenheits-Simulation" mit einem Atttribut aktivieren/deaktivieren kann ?

Viele Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Juli 2014, 16:56:00
Zitat von: gsbox am 24 Juli 2014, 16:38:56
Jetzt definiere ich ja einige DOIF-Defines. Ist es möglich, diese zu gruppieren, so dass ich diese "Anwesenheits-Simulation" mit einem Atttribut aktivieren/deaktivieren kann ?
Möglicherweise geht es noch eleganter, aber Du könntest einen Dummy "Anwesenheits-Simulation" definieren und in jedes dieser DOIFs die Bedingung
...and [Anwesenheits-Simulation] eq "on")
mit aufnehmen. Dann brauchst Du nur den Dummy passend steuern und alle DOIFs gehorchen.
Titel: Antw:neues Modul DOIF
Beitrag von: gsbox am 24 Juli 2014, 17:03:51
Danke - das werde ich mal ausprobieren.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 24 Juli 2014, 18:55:50
Hallo.
Seit installation der neueren version klappt folgendes nicht mehr richtig



((([Heizungsmode] eq "off" and [HZ_Wohnzimmer_Weather] > 22) or ([Heizungsmode] eq "auto" and [HZ_Wohnzimmer_Weather] < 24)) and [Pac] > 1500 and [10:00-18:30] and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF (([Heizungsmode] eq "off") or ([Heizungsmode] eq "auto") and [Pac] < 1000 and [Terassentuer] eq "Closed")
(set Klima_WZ off)
DOELSEIF  ([Klima_WZ_manuOn] eq "on" and [HZ_Wohnzimmer_Weather] > 22 and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF ([Klima_WZ_manuOn] eq "off")
  (set Klima_WZ off)
DOELSE
  (set Klima_WZ off)


Wenn Terassentuer "open" schaltet Klima nicht off, ebenfalls wenn Pac < 1000 .
Einziges event ist immer nur timer_2

hast du einen tipp?

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Juli 2014, 19:07:17
Zitat von: satprofi am 24 Juli 2014, 18:55:50
Seit installation der neueren version klappt folgendes nicht mehr richtig

Hast Du die Installationshinweise beachtet?
Achtung: Diese Version ist intern nicht abwärtskompatibel zu der vorherigen. Daher:

System  anhalten, Modul kopieren, System wieder hochfahren (kein reload)

Danach bei allen bereits definierten DOIF-Modulen über die Weboberfläche auf DEF klicken und über modify-Button bestätigen.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 24 Juli 2014, 19:12:12
Ja, hab ich. auch gelöscht und neu definiert.
doif schaltet nur mehr wenn die zeit erreicht wird. brauch ich jetzt "do always" ?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Juli 2014, 20:44:04
Zitat von: satprofi am 24 Juli 2014, 19:12:12
Ja, hab ich. auch gelöscht und neu definiert.
doif schaltet nur mehr wenn die zeit erreicht wird. brauch ich jetzt "do always" ?
Auf was steht denn last_cmd?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 24 Juli 2014, 21:54:19
Cmd-5
Titel: Antw:neues Modul DOIF
Beitrag von: Hoeness am 24 Juli 2014, 22:34:54
Hallo,

ich habe eine Frage zu den Wochentagen, die ich bei Zeitangaben definieren kann:

1-6 entspricht Montag-Samstag?
7 entspricht WE
8 entspricht nicht WE

Wie kann ich den Sonntag definieren?

Ich hätte auch noch eine Idee.
Kann DOIF eventuell noch so erweitern, dass ich angeben kann, dass alle 2,3,4,5,... Tage etwas ausgelöst werden soll?

Gruß Hoeness
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Juli 2014, 23:30:02
Zitat von: satprofi am 24 Juli 2014, 21:54:19
Cmd-5
Dann funktioniert alles wie programmiert.
Wenn cmd-5 (off) zuletzt ausgeführt wurde, dann wird es nicht noch mal ausgeführt (wozu auch, off ist off)
Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Juli 2014, 23:47:20
Zitat von: Hoeness am 24 Juli 2014, 22:34:54
Hallo,

ich habe eine Frage zu den Wochentagen, die ich bei Zeitangaben definieren kann:

1-6 entspricht Montag-Samstag?
7 entspricht WE
8 entspricht nicht WE

Wie kann ich den Sonntag definieren?

Ich hätte auch noch eine Idee.
Kann DOIF eventuell noch so erweitern, dass ich angeben kann, dass alle 2,3,4,5,... Tage etwas ausgelöst werden soll?

Gruß Hoeness

Bitte ersten Post noch mal genau lesen, da steht mehrfach drin, dass 0 gleich Sonntag ist.
ZitatKann DOIF eventuell noch so erweitern, dass ich angeben kann, dass alle 2,3,4,5,... Tage etwas ausgelöst werden soll?

mal schauen, kann man erst mal durch Angabe konkreter Tage realisieren z. B 135 (jeden zweiten Tag)

oder mit "and ($mday == 1 or $mday == 15)" für alle zwei Wochen.

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 25 Juli 2014, 10:23:54
Zitat von: Damian am 24 Juli 2014, 23:30:02
Dann funktioniert alles wie programmiert.
Wenn cmd-5 (off) zuletzt ausgeführt wurde, dann wird es nicht noch mal ausgeführt (wozu auch, off ist off)
Gruß

Damian

nein, wenn terassentuer offen, dann keine reaktion. cmd_5 war ja nach 18:30 der fall, das klappt ja.
ich dachte du fragtest nach dem letzten state.

[edit]
ohne "do always" klappt die abschaltung nicht. da wird nur der timer abgefragt, also die angegebene zeit.
alles andere schaltet nicht ab. werde das ganze morgen aufs neue testen.
Titel: Antw:neues Modul DOIF
Beitrag von: UweH am 25 Juli 2014, 18:38:30
Hallo,

dieses Beispiel: define DI_Radio DOIF ([08:00-10:00]|7) (set Radio on) DOELSE (set Radio off) funktioniert bei mir nicht, auch am Wochentag wird eingeschaltet und dann aber auch nicht mehr ausgeschaltet. Ohne angehängte 7 oder 8 funktioniert's...Genau so ist es mit anderen Wochentagen...sobald ich eine Tageszahl hinter eine Zeit setze, schaltet DOIF zwar ein, aber nicht mehr aus. Was mache ich falsch?
Titel: Antw:neues Modul DOIF
Beitrag von: sentinel1 am 25 Juli 2014, 20:57:51
Zitat von: UweH am 25 Juli 2014, 18:38:30
Hallo,

dieses Beispiel: define DI_Radio DOIF ([08:00-10:00]|7) (set Radio on) DOELSE (set Radio off) funktioniert bei mir nicht, auch am Wochentag wird eingeschaltet und dann aber auch nicht mehr ausgeschaltet. Ohne angehängte 7 oder 8 funktioniert's...Genau so ist es mit anderen Wochentagen...sobald ich eine Tageszahl hinter eine Zeit setze, schaltet DOIF zwar ein, aber nicht mehr aus. Was mache ich falsch?

Hallo,

so ([08:00-10:00|7]) auch schon probiert?

Gruß
Claudiu



Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juli 2014, 21:05:01
Zitat von: satprofi am 25 Juli 2014, 10:23:54
nein, wenn terassentuer offen, dann keine reaktion. cmd_5 war ja nach 18:30 der fall, das klappt ja.
ich dachte du fragtest nach dem letzten state.

[edit]
ohne "do always" klappt die abschaltung nicht. da wird nur der timer abgefragt, also die angegebene zeit.
alles andere schaltet nicht ab. werde das ganze morgen aufs neue testen.
Also, das liegt eher an der Definition bzw. am Verständnis. Um 18:30 wird getriggert mit false in der ersten Bedingung, dadurch wird dein letzter Fall (DOELSE) ausgeführt. Wenn du dann Fenster aufmachst dann sind ebenfalls alle Bedingungen, wo Fenster abgefragt wird false und dadurch ist wieder dein DOELSE-Fall dran und dann passiert natürlich nichts, weil er schon zuvor geschaltet wurde. Wenn du etwas anderes willst, musst du dir eine andere Definition überlegen. Dein letzter DOELSE-Fall macht dir wahrscheinlich mehr kaputt als du annimmst.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Juli 2014, 21:17:39
Zitat von: UweH am 25 Juli 2014, 18:38:30
Hallo,

dieses Beispiel: define DI_Radio DOIF ([08:00-10:00]|7) (set Radio on) DOELSE (set Radio off) funktioniert bei mir nicht, auch am Wochentag wird eingeschaltet und dann aber auch nicht mehr ausgeschaltet. Ohne angehängte 7 oder 8 funktioniert's...Genau so ist es mit anderen Wochentagen...sobald ich eine Tageszahl hinter eine Zeit setze, schaltet DOIF zwar ein, aber nicht mehr aus. Was mache ich falsch?

Es war tatsächlich noch ein Tippfehler in der Doku - ich habe es gerade im ersten Post korrigiert, es muss natürlich heißen:

define DI_Radio DOIF ([08:00-10:00|7]) (set Radio on) DOELSE (set Radio off)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: UweH am 26 Juli 2014, 10:03:28
Danke, das war's. Wäre ich nie drauf gekommen.
Damian, vielen Dank für Deine Arbeit und Mühe mit diesem Modul. Das Ding spart mittlerweile etliche notifys und sub's bei mir ein  :)
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 30 Juli 2014, 08:26:55
Gerade habe ich folgendes DOIF versucht:
([STATUS] =~ "Abwesend|Urlaub")
(cmd 1)
DOELSEIF([{OldValue("STATUS")}] ne "Nacht")
(cmd 2)


Das führt zur Fehlermeldung
DOIF: the at function "OldValue("STATUS")" must return a timespec and not Anwesend.: {OldValue("STATUS")}

Das verstehe ich auch: DOIF akzeptiert in dieser Form nur Funktionen, die eine Zeit zurückliefern, aus der sich ein Timer generieren lässt.

Mein Frage ist, ob diese Einschränkung eigentlich wirklich notwendig ist? Prinzipiell könnte man doch eine beliebige Funktion in dieser Form verwenden.
Liefert die Funktion eine Zeit zurück, wird ein entsprechender Timer generiert. Wenn nicht, wird sei einfach nur als Bedingung ausgewertet, wenn das DOIF anderweitig angestoßen wird.
Das böte auch die Möglichkeit, in DOIFs Bedingungen zu formulieren, die nur zur Laufzeit überprüft werden, ohne selbst Trigger für das DOIF zu sein, was in manche Situationen im Hinblick auf Effizienz durchaus sinnvoll sein kann.

(Es geht mir dabei auch gar nicht um das konkrete Beispiel. Das habe ich nun durch Einfügen entsprechenden Perl-Codes innerhalb von (cmd 2) gelöst, was ich aber als "unschöne" Lösung empfinde.)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Juli 2014, 11:25:18
Zitat von: Brockmann am 30 Juli 2014, 08:26:55
Gerade habe ich folgendes DOIF versucht:
([STATUS] =~ "Abwesend|Urlaub")
(cmd 1)
DOELSEIF([{OldValue("STATUS")}] ne "Nacht")
(cmd 2)


Das führt zur Fehlermeldung
DOIF: the at function "OldValue("STATUS")" must return a timespec and not Anwesend.: {OldValue("STATUS")}

Das verstehe ich auch: DOIF akzeptiert in dieser Form nur Funktionen, die eine Zeit zurückliefern, aus der sich ein Timer generieren lässt.

Mein Frage ist, ob diese Einschränkung eigentlich wirklich notwendig ist? Prinzipiell könnte man doch eine beliebige Funktion in dieser Form verwenden.
Liefert die Funktion eine Zeit zurück, wird ein entsprechender Timer generiert. Wenn nicht, wird sei einfach nur als Bedingung ausgewertet, wenn das DOIF anderweitig angestoßen wird.
Das böte auch die Möglichkeit, in DOIFs Bedingungen zu formulieren, die nur zur Laufzeit überprüft werden, ohne selbst Trigger für das DOIF zu sein, was in manche Situationen im Hinblick auf Effizienz durchaus sinnvoll sein kann.

(Es geht mir dabei auch gar nicht um das konkrete Beispiel. Das habe ich nun durch Einfügen entsprechenden Perl-Codes innerhalb von (cmd 2) gelöst, was ich aber als "unschöne" Lösung empfinde.)

Die Fehlermeldung:

"the at function "OldValue("STATUS")" must return a timespec and not Anwesend.: {OldValue("STATUS")}"

kommt nicht aus dem DOIF-Modul, sondern von der FHEM-Funktion, die auch beim at benutzt wird.

Das sollte aber jetzt schon kein Problem sein. DOIF unterstützt volles Perl ohne Einschränkungen, dann musst du es einfach wie in Perl abfragen, wenn du nur den Wert haben willst:

(OldValue("STATUS") ne "Nacht")

das Problem ist allerdings, dass diese Bedingung so nicht ausgewertet wird, weil kein Trigger definiert ist (eckige Klammern), was dann funktionieren sollte ist:

([STATUS] and OldValue("STATUS") ne "Nacht")

hier wird Status als Trigger erkannt und wenn er ungleich Null (sollte der Normalfall sein) ist, ist dieser Ausdruck wahr und der Rest wird einfach abgefragt.

Was viele nicht wissen, man kann jetzt schon nicht nur auf Readings sondern auch auf Internals zugreifen

[DEVICENAME:&Internalname] (steht so in der Doku von IF)

Ich könnte so ähnlich speziell für OldValue, was schon mal öfters gebraucht wird, mir noch eine Syntax ausdenken, z. B.

([&STATUS] ne "Nacht") entspräche: (OldValue("STATUS") ne "Nacht") allerdings mit Trigger und damit einer Auswertung beim Event von STATUS.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 30 Juli 2014, 12:10:53
Hallo Damian,

Danke für die Erläuterung. Da kann DOIF wieder mal schon mehr, als ich dachte.  ;)
Vielleicht wäre es sinnvoll, die Dokumentation um ein solches Beispiel zu erweitern. Bislang ist da nur sunset in eckigen Klammern drin, was ja nochmal etwas anderes ist.
(Ja, ich weiß, in der Featureliste steht was von voller Perl-Unterstützung, aber was das bedeutet und wie man es einsetzen kann, erkennt eben nicht jeder gleich (*Pfeil auf mich*).

Dass bestimmte Arten von Bedingungen keinen Trigger definieren, empfinde ich nicht als Nachteil, sondern sogar als Vorteil, solange man die Wahl hat, welche Variante man verwendet.
Das lässt einem Spielraum, bei der Definition ein wenig auf Effizienz zu achten.

Eine spezielle Unterstützung für OldValue fände ich übertrieben, da es ja doch eher exotisch ist, OldValue als Trigger zu verwenden. Und man könnte es auch jetzt schon definieren:
([STATUS] and (OldValue("STATUS") ne "Nacht")
Dann wird bei jedem Wechsel von STATUS geprüft, ob der vorherige Zustand "Nacht" war. Dafür braucht es keine eigene Syntax, finde ich.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Juli 2014, 12:54:58
Zitat von: Brockmann am 30 Juli 2014, 12:10:53
Hallo Damian,

Danke für die Erläuterung. Da kann DOIF wieder mal schon mehr, als ich dachte.  ;)
Vielleicht wäre es sinnvoll, die Dokumentation um ein solches Beispiel zu erweitern. Bislang ist da nur sunset in eckigen Klammern drin, was ja nochmal etwas anderes ist.
(Ja, ich weiß, in der Featureliste steht was von voller Perl-Unterstützung, aber was das bedeutet und wie man es einsetzen kann, erkennt eben nicht jeder gleich (*Pfeil auf mich*).

Dass bestimmte Arten von Bedingungen keinen Trigger definieren, empfinde ich nicht als Nachteil, sondern sogar als Vorteil, solange man die Wahl hat, welche Variante man verwendet.
Das lässt einem Spielraum, bei der Definition ein wenig auf Effizienz zu achten.

Eine spezielle Unterstützung für OldValue fände ich übertrieben, da es ja doch eher exotisch ist, OldValue als Trigger zu verwenden. Und man könnte es auch jetzt schon definieren:
([STATUS] and (OldValue("STATUS") ne "Nacht")
Dann wird bei jedem Wechsel von STATUS geprüft, ob der vorherige Zustand "Nacht" war. Dafür braucht es keine eigene Syntax, finde ich.
Ja, ich muss auch immer aufpassen, dass man sich die Perl-Syntax nicht verbaut & kann nämlich auch eine Referenz auf Funktionen sein. Durch DOIF wird IF zunehmend an Bedeutung verlieren, obwohl es, wie wir beim Toggeln gesehen haben, durchaus noch seine Berechtigung hat. Ich werde spätestens vor dem Einchecken die Doku aus IF in die DOIF-Doku zusätzlich übernehmen. Ich denke, dass die meisten z. B. auch nicht wissen, dass man auch solche Sache beim DOIF machen kann:

define di_temp DOIF ( [18:00] and ([outdoor:temperature] > 10)) (set thermostat desired-temp {([thermostat:desired-temp:d]+1)})

Hier wird die Wunschtemperatur aus dem Reading der bisherigen genommen, davon nur der Zahlenanteil (d-Option), falls da noch eindere Zeichen stehen, um eins erhöht und wieder mit "set thermostat desired-temp" gesetzt.

Ein kleiner Ausblick noch auf die nächste Version:

Man wird beliebigen Status, unabhängig von Abfragen definieren können:

attr di_Rolladen State Heute beträgt die Temperatur [Wetter:temp] Grad, der Rolladen ist jetzt [di_Rolladen]

Zusätzlich wird man auch Zahlen in der Statusausgabe formatieren können wie beim THRESHOLD über sprintf.

Dann sollen reine Status-Definitionen ohne Ausführungteil möglich sein:

define di_Fenster DOIF ([Fenster] eq "closed") and [Tuer] eq "closed)
DOELSEIF ([Fenster] eq "open" and [Tuer] eq "closed)
DOELSEIF ([Fenster] eq "closed" and [Tuer] eq "open")
DOELSEIF ([Fenster] eq "open" and [Tuer] eq "open")

attr di_Fenster cmdState beide zu|Fenster offen|Tür offen|beide offen


Das kann man zwar jetzt auch schon, aber man muss noch () für die Ausführung angeben:

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 30 Juli 2014, 13:44:28
Zitat von: Damian am 30 Juli 2014, 12:54:58
Man wird beliebigen Status, unabhängig von Abfragen definieren können:
attr di_Rolladen State Heute beträgt die Temperatur [Wetter:temp] Grad, der Rolladen ist jetzt [di_Rolladen]

Zusätzlich wird man auch Zahlen in der Statusausgabe formatieren können wie beim THRESHOLD über sprintf.
Könnte ich damit den State eines DOIFs individuell anpassen, also z. B. so:
attr mein_DOIF State [mein_DOIF:last_cmd] durch [mein_DOIF:last_cmd_event] um [mein_DOIF:...
Ups, dabei fällt mir gerade ein, auf den TimeStamp eines Readings kann DOIF nicht zugreifen, oder?
Ich hätte im Status der meisten DOIFs am liebsten den letzten Befehl, das auslösende Objekt und den Zeitpunkt des Befehls stehen, damit man das direkt ablesen kann.
Also quasi: Rolladen_runter durch Wettersensor um 2014-07-30 13:20:29

Zitat von: Damian am 30 Juli 2014, 12:54:58
Dann sollen reine Status-Definitionen ohne Ausführungteil möglich sein:

Das kann man zwar jetzt auch schon, aber man muss noch () für die Ausführung angeben:
Das heißt, man sollte auch jetzt schon "leere" Ausführungsteile angeben können? Das habe ich nämlich heute morgen gerade erfolglos ausprobiert:
DI_Test DOIF: no commands: ([STATUS] eq "Anwesend") ()
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Juli 2014, 14:30:07
Zitat von: Brockmann am 30 Juli 2014, 13:44:28
Könnte ich damit den State eines DOIFs individuell anpassen, also z. B. so:
attr mein_DOIF State [mein_DOIF:last_cmd] durch [mein_DOIF:last_cmd_event] um [mein_DOIF:...
Ups, dabei fällt mir gerade ein, auf den TimeStamp eines Readings kann DOIF nicht zugreifen, oder?
Ich hätte im Status der meisten DOIFs am liebsten den letzten Befehl, das auslösende Objekt und den Zeitpunkt des Befehls stehen, damit man das direkt ablesen kann.
mit [DEVICE:Reading] kannst du beliebige Readings angeben, insbesondere die eigenen deines DOIF-Moduls. Beim Status muss ich noch schauen, sonst beißt sich die Katze in den Schwanz.
Zitat
Also quasi: Rolladen_runter durch Wettersensor um 2014-07-30 13:20:29
Für Timestamps muss ich mir noch was einfallen lassen.
Zitat
Das heißt, man sollte auch jetzt schon "leere" Ausführungsteile angeben können? Das habe ich nämlich heute morgen gerade erfolglos ausprobiert:
DI_Test DOIF: no commands: ([STATUS] eq "Anwesend") ()

Ich habe das gestern mit DOELSEIF getestet  - das funktioniert, bei DOIF war ich wohl etwas strenger in der Prüfung. Aber ist jetzt unerheblich, zukünftig wird man da alles weglassen können.

Man könnte auch Schweinereien machen wie diese:

define di DOIF
attr di State Die Aussentemperatur beträgt: [Aussen:temp], die Feuchtigkeit beträgt [Aussen:humidity]


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 14:00:15
Hallo,

da ich nicht mehr weiter weiß und im Anfänger Forum bereits geschildert habe was ich für ein Problem habe und hier her vermittelt wurde melde ich mich hier.

Mein "einfaches" Vorhaben soll sein wenn die Waschmaschine unter 2 Watt fällt soll eine nachricht via Pushover gesendet werden und die Waschmaschine bzw. der Aktor davor soll ausgeschaltet werden. Letzteres funktioniert ersteres auch aber ich bekomme die Nachricht alle 5 Minuten auf mein Handy..

#define di_Waschmaschine DOIF ([Verbrauch_WAMA_Wh:power]<3) (set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off)
#attr di_Waschmaschine wait 300
Momentan auskommentiert damit mein Handy Ruhe gibt.

Auszug aus dem Log von gestern
2014.08.02 12:27:51 3: CUL_HM set CUL_HM_HM_LC_SW4_SM_263839 statusRequest
2014.08.02 12:27:52 3: CUL_HM set Garagentor statusRequest
2014.08.02 12:34:17 3: CUL_HM set Waschmaschine off
2014.08.02 12:34:17 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 12:41:57 3: CUL_HM set Waschmaschine off
2014.08.02 12:41:57 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 12:49:38 3: CUL_HM set Waschmaschine off
2014.08.02 12:49:38 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 12:54:59 3: CUL_HM set Waschmaschine off
2014.08.02 12:54:59 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:02:16 3: CUL_HM set Waschmaschine off
2014.08.02 13:02:16 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:07:21 3: CUL_HM set Waschmaschine off
2014.08.02 13:07:21 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:12:32 3: CUL_HM set Waschmaschine off
2014.08.02 13:12:32 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:17:49 3: CUL_HM set Waschmaschine off
2014.08.02 13:17:49 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:25:01 3: CUL_HM set Waschmaschine off
2014.08.02 13:25:01 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:30:02 3: CUL_HM set Waschmaschine off
2014.08.02 13:30:02 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:35:10 3: CUL_HM set Waschmaschine off
2014.08.02 13:35:10 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:40:23 3: CUL_HM set Waschmaschine off
2014.08.02 13:40:23 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:47:30 3: CUL_HM set Waschmaschine off
2014.08.02 13:47:30 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 13:54:34 3: CUL_HM set Waschmaschine off
2014.08.02 13:54:34 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:00:13 3: CUL_HM set Waschmaschine off
2014.08.02 14:00:13 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:07:57 3: CUL_HM set Waschmaschine off
2014.08.02 14:07:57 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:13:20 3: CUL_HM set Waschmaschine off
2014.08.02 14:13:20 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:20:40 3: CUL_HM set Waschmaschine off
2014.08.02 14:20:40 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:25:46 3: CUL_HM set Waschmaschine off
2014.08.02 14:25:46 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:30:59 3: CUL_HM set Waschmaschine off
2014.08.02 14:30:59 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:36:18 3: CUL_HM set Waschmaschine off
2014.08.02 14:36:18 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:43:32 3: CUL_HM set Waschmaschine off
2014.08.02 14:43:32 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:48:35 3: CUL_HM set Waschmaschine off
2014.08.02 14:48:35 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:53:44 3: CUL_HM set Waschmaschine off
2014.08.02 14:53:44 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 14:59:00 3: CUL_HM set Waschmaschine off
2014.08.02 14:59:00 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:06:09 3: CUL_HM set Waschmaschine off
2014.08.02 15:06:09 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:13:16 3: CUL_HM set Waschmaschine off
2014.08.02 15:13:16 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:18:56 3: CUL_HM set Waschmaschine off
2014.08.02 15:18:56 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:26:43 3: CUL_HM set Waschmaschine off
2014.08.02 15:26:43 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:32:08 3: CUL_HM set Waschmaschine off
2014.08.02 15:32:08 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:39:30 3: CUL_HM set Waschmaschine off
2014.08.02 15:39:30 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:44:38 3: CUL_HM set Waschmaschine off
2014.08.02 15:44:38 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:49:53 3: CUL_HM set Waschmaschine off
2014.08.02 15:49:53 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 15:55:14 3: CUL_HM set Waschmaschine off
2014.08.02 15:55:14 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:02:31 3: CUL_HM set Waschmaschine off
2014.08.02 16:02:31 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:07:35 3: CUL_HM set Waschmaschine off
2014.08.02 16:07:35 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:12:46 3: CUL_HM set Waschmaschine off
2014.08.02 16:12:46 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:18:03 3: CUL_HM set Waschmaschine off
2014.08.02 16:18:03 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:25:15 3: CUL_HM set Waschmaschine off
2014.08.02 16:25:15 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:30:16 3: CUL_HM set Waschmaschine off
2014.08.02 16:30:16 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:35:23 3: CUL_HM set Waschmaschine off
2014.08.02 16:35:23 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:40:37 3: CUL_HM set Waschmaschine off
2014.08.02 16:40:37 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:47:43 3: CUL_HM set Waschmaschine off
2014.08.02 16:47:43 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 16:54:47 3: CUL_HM set Waschmaschine off
2014.08.02 16:54:47 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:00:26 3: CUL_HM set Waschmaschine off
2014.08.02 17:00:26 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:08:10 3: CUL_HM set Waschmaschine off
2014.08.02 17:08:10 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:13:32 3: CUL_HM set Waschmaschine off
2014.08.02 17:13:32 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:20:52 3: CUL_HM set Waschmaschine off
2014.08.02 17:20:52 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:25:58 3: CUL_HM set Waschmaschine off
2014.08.02 17:25:58 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:31:11 3: CUL_HM set Waschmaschine off
2014.08.02 17:31:11 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:36:30 3: CUL_HM set Waschmaschine off
2014.08.02 17:36:30 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:43:44 3: CUL_HM set Waschmaschine off
2014.08.02 17:43:44 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:48:47 3: CUL_HM set Waschmaschine off
2014.08.02 17:48:47 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:53:56 3: CUL_HM set Waschmaschine off
2014.08.02 17:53:56 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 17:59:12 3: CUL_HM set Waschmaschine off
2014.08.02 17:59:12 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 18:06:20 3: CUL_HM set Waschmaschine off
2014.08.02 18:06:20 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
2014.08.02 18:12:21 3: CUL_HM set Garagentor getConfig
2014.08.02 18:12:23 3: CUL_HM set Garagentor on-for-timer 1


Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 03 August 2014, 14:03:04
Hallo,

und wie wäre es wenn du auch mal auszugsweise das Logfile des Gerätes anhängst?
Das FHEM-Logfile mit den Meldungen bringt dich hier auch nicht weiter.

Zitatund hier her vermittelt wurde
Aber nur weil du DOIF verwenden willst und das gehört HIER behandelt (und nicht 6 Seiten lang im Anfängerbereich).

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 14:12:56
Richtig das fehlte noch
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 03 August 2014, 14:22:11
Hallo,

nun müssen wir aber erst ein paar Ungereimtheiten klären.

Dieser Logfileeintrag aus dem FHEM-Logfile:
Zitat2014.08.02 12:49:38 3: CUL_HM set Waschmaschine off
2014.08.02 12:49:38 2: di_Waschmaschine: set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
passt mAn nicht zu diesem aus dem Device-Logfile:
Zitat2014-08-02_12:49:58 Verbrauch_WAMA_Wh power: 0.01
Da der Verbrauch erst 20 Sekunden SPÄTER in das Logfile wandert.
Und das kann mMn nicht sein.

Erst der Device-Logfileeintrag und kurze Zeit später der FHEM-Logfileeintrag da das DOIF (oder notify) erst abgearbeitet werden kann NACHDEM das Device seine Werte gesendet hat und unmöglich schon 20 Sekunden vorher.

Grüße

Edith: Erledigt - die FHEM-Logfileeinträge kommen mit 5-minütiger "Verspätung"
@ostseehuepfer
Grenz doch bitte das Device_Logfile auf die Daten des geposteten FHEM-Logfiles ein.
Alle andere Device-Daten sind uninteressant.
Weiters genügt das Reading power und der dahinterstehende Code von dir.
Hilf uns dir zu helfen  ;)
Danke.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 03 August 2014, 14:55:32
Hallo,

pack es bitte in Zitat-Tags und das reading power genügt.
Schau dir deinen Beitrag nochmal an und überleg mal für dich ob du dir das für jemand anderen durchschauen würdest.

Grüße

Edith: Lass gut sein. Vielleicht schaut sich ja jemand solche Textwüsten durch.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 15:54:10
Tippe bitte in der Kommandozeile list di_Waschmaschine und poste hier das Ergebnis.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 August 2014, 16:26:57
Hallo.
Ich habe hier einen denkfehler, bzw. denke ich zu einfach?

Leider funktioniert das and / or nicht. Es schaltet die Kellertuer auch wenn "Alarm_on" off ist.

(([Alarm_on] eq "on") and ([Fenster_Waschkueche] eq "Open") or ([Geraeteschupfen] eq "Open") or ([Kellertuer] eq "Open")) (set Alarm_Sirene on-for-timer 30)

Ziel ist: Alarm_Sirene on-for-timer 30  wenn Alarm_on und eine der bestimmten Türen offen. Oder muss ich für jede tür ein DOELSEIF erstellen?

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 16:31:23
Zitat von: satprofi am 03 August 2014, 16:26:57
Hallo.
Ich habe hier einen denkfehler, bzw. denke ich zu einfach?

Leider funktioniert das and / or nicht. Es schaltet die Kellertuer auch wenn "Alarm_on" off ist.

(([Alarm_on] eq "on") and ([Fenster_Waschkueche] eq "Open") or ([Geraeteschupfen] eq "Open") or ([Kellertuer] eq "Open")) (set Alarm_Sirene on-for-timer 30)

Ziel ist: Alarm_Sirene on-for-timer 30  wenn Alarm_on und eine der bestimmten Türen offen. Oder muss ich für jede tür ein DOELSEIF erstellen?

gruss

dann:

([Alarm_on] eq "on" and ([Fenster_Waschkueche] eq "Open" or [Geraeteschupfen] eq "Open" or [Kellertuer] eq "Open")) (set Alarm_Sirene on-for-timer 30)

Klammern für die Vergleiche brauchst du hier nicht, da sie stärker binden als and bzw. or, dafür musst du um die or-Verknüpfungen welche setzen, da and stärker bindet als or.

Hier mal die Prioritäten-Reihenfolge (Auszug aus der IF-Doku):

++ -- Inkrementieren, Dekrementieren
** Potenzierung
! ~ logische und bitweise Negation
=~ !~ Bindung an Seite reguläre Ausdrücke
* / % x Multiplikation, Division, Modulo-Operation, Zeichenkettenwiederholung
+ - . Addition, Subtraktion, Zeichenkettenaddition
< <= > >= lt le gt ge Vergleich größer/kleiner
== != eq ne Gleichheit/Ungleichheit
& bitweises UND
| ^ bitweises ODER - inklusiv/exklusiv
&& logisches UND
|| logisches ODER
not logische Negation
and logisches UND
or xor logisches ODER (inklusiv/exklusiv)


Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 August 2014, 16:39:48
Aha, danke.
Verstehe ich das richtig, das sämtliche and und or in eigene Klammern sitzen müssen?

z.b.
(([Alarm_on] "on" and [06:00-18:00]) and ([Fenster_Waschkueche] eq "Open") or ([Geraeteschupfen] eq "Open") or ([Kellertuer] eq "Open")) (set Alarm_Sirene on-for-timer 30)

würde Sirene nur aktivieren wenn Alarm_on und Tür offen zw. 6:00 u. 18:00 ?
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 August 2014, 16:50:05
Hallo.
Gerade entdeckt:


perl error in condition: InternalDoIf('Heizungsmode','STATE','') eq "on" DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""): syntax error at (eval 3517) line 1, near ""on" DOIF_time"


hast Du einen Tip?

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 16:51:22
Zitat von: satprofi am 03 August 2014, 16:39:48
Aha, danke.
Verstehe ich das richtig, das sämtliche and und or in eigene Klammern sitzen müssen?

z.b.
(([Alarm_on] "on" and [06:00-18:00]) and ([Fenster_Waschkueche] eq "Open") or ([Geraeteschupfen] eq "Open") or ([Kellertuer] eq "Open")) (set Alarm_Sirene on-for-timer 30)

würde Sirene nur aktivieren wenn Alarm_on und Tür offen zw. 6:00 u. 18:00 ?

Nein. Der ganze Ausdruck muss wahr sein. Klammern sind nur dazu da Prioritäten anders zu setzen als die definierte Reihenfolge der Operatoren vorgesehen ist (siehe mein vorheriger Beitrag).

Es ist sicherlich schwieriger für Leute zu verstehen, die nicht aus der Programmierecke kommen. Da dürfte Literatur über logische Ausdrücke vielleicht weiter helfen - die Programmiersprache dürfe ziemlich egal sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 16:55:14
Zitat von: satprofi am 03 August 2014, 16:50:05
Hallo.
Gerade entdeckt:


perl error in condition: InternalDoIf('Heizungsmode','STATE','') eq "on" DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""): syntax error at (eval 3517) line 1, near ""on" DOIF_time"


hast Du einen Tip?

gruss

Du hast eq hinter Alarm_on vergessen ;)

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 August 2014, 18:03:58
hallo.
Noch ne kurze Frage, wie binde ich  {Email('mail.empfänger@@xxx.xxx','Alarm','Alarm ausgelöst')}   ein ?
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 18:15:48
Hey,

also list di_Waschmaschine ergibt No device named di_Waschmaschine found
und list Waschmaschine ergibt Internals:
Internals:
   DEF        24ABCE01
   NAME       Waschmaschine
   NR         132
   STATE      on
   TYPE       CUL_HM
   chanNo     01
   device     CUL_HM_HM_ES_PMSw1_Pl_24ABCE
   Readings:
     2014-08-02 18:49:40   CommandAccepted yes
     2014-08-03 08:33:59   deviceMsg       on (to HMLAN1)
     2014-08-03 08:33:59   level           100
     2014-08-03 08:33:59   pct             100
     2014-08-03 08:33:59   recentStateType info
     2014-08-03 08:33:59   state           on
     2014-08-03 08:33:59   timedOn         off
   Helper:
     Role:
       chn        1
       prs        1
Attributes:
   icon       scene_washing_machine
   model      HM-ES-PMSw1-Pl
   peerIDs    00000000,
   room       Übersicht,Keller


Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 18:18:40
Zitat von: ostseehuepfer am 03 August 2014, 18:15:48
Hey,

also list di_Waschmaschine ergibt No device named di_Waschmaschine found
und list Waschmaschine ergibt Internals:
Internals:
   DEF        24ABCE01
   NAME       Waschmaschine
   NR         132
   STATE      on
   TYPE       CUL_HM
   chanNo     01
   device     CUL_HM_HM_ES_PMSw1_Pl_24ABCE
   Readings:
     2014-08-02 18:49:40   CommandAccepted yes
     2014-08-03 08:33:59   deviceMsg       on (to HMLAN1)
     2014-08-03 08:33:59   level           100
     2014-08-03 08:33:59   pct             100
     2014-08-03 08:33:59   recentStateType info
     2014-08-03 08:33:59   state           on
     2014-08-03 08:33:59   timedOn         off
   Helper:
     Role:
       chn        1
       prs        1
Attributes:
   icon       scene_washing_machine
   model      HM-ES-PMSw1-Pl
   peerIDs    00000000,
   room       Übersicht,Keller


Grüße

Du musst natürlich dein di_Waschmaschine Modul wieder definiert haben und das Verhalten nachstellen (wiederholte Meldungen), sonst macht eine Analyse des Problems gar keinen Sinn.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 18:21:44
Hey,

sorry ja klar muss ich es erst akivieren
Internals:
   DEF        ([Verbrauch_WAMA_Wh:power]<3) (set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off)
   NAME       di_Waschmaschine
   NR         213
   NTFY_ORDER 50-di_Waschmaschine
   STATE      ???
   TYPE       DOIF
   Condition:
     0          ReadingValDoIf('Verbrauch_WAMA_Wh','power','')<3
   Devices:
     0           Verbrauch_WAMA_Wh
     all         Verbrauch_WAMA_Wh
   Do:
     0          set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off
   Helper:
     last_cond  -1
     last_timer 0
     sleeptimer -1
   Readings:
     0          Verbrauch_WAMA_Wh:power
Attributes:
   wait       300
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 18:25:46
Zitat von: ostseehuepfer am 03 August 2014, 18:21:44
Hey,

sorry ja klar muss ich es erst akivieren
Internals:
   DEF        ([Verbrauch_WAMA_Wh:power]<3) (set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off)
   NAME       di_Waschmaschine
   NR         213
   NTFY_ORDER 50-di_Waschmaschine
   STATE      ???
   TYPE       DOIF
   Condition:
     0          ReadingValDoIf('Verbrauch_WAMA_Wh','power','')<3
   Devices:
     0           Verbrauch_WAMA_Wh
     all         Verbrauch_WAMA_Wh
   Do:
     0          set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off
   Helper:
     last_cond  -1
     last_timer 0
     sleeptimer -1
   Readings:
     0          Verbrauch_WAMA_Wh:power
Attributes:
   wait       300


und Fehlverhalten nachstellen und dann list ... posten
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 18:41:31
Hier die Antwort nicht wundern hab ne 50 Watt Glühbirne dran gehängt anstelle der Wama

Internals:
   DEF        ([Verbrauch_WAMA_Wh:power]<3) (set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off)
   NAME       di_Waschmaschine
   NR         213
   NTFY_ORDER 50-di_Waschmaschine
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-08-03 18:29:05   last_cmd        2
     2014-08-03 18:29:05   last_cmd_event  Verbrauch_WAMA_Wh
     2014-08-03 18:39:56   last_error      set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
     2014-08-03 18:39:56   next_wait_timer no wait_timer
     2014-08-03 18:29:05   state           cmd_2
   Condition:
     0          ReadingValDoIf('Verbrauch_WAMA_Wh','power','')<3
   Devices:
     0           Verbrauch_WAMA_Wh
     all         Verbrauch_WAMA_Wh
   Do:
     0          set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off
   Helper:
     last_cond  1
     last_timer 0
     sleepdevice Verbrauch_WAMA_Wh
     sleeptimer -1
   Readings:
     0          Verbrauch_WAMA_Wh:power
Attributes:
   wait       300
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 18:56:23
Zitat von: ostseehuepfer am 03 August 2014, 18:41:31
Hier die Antwort nicht wundern hab ne 50 Watt Glühbirne dran gehängt anstelle der Wama

Internals:
   DEF        ([Verbrauch_WAMA_Wh:power]<3) (set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off)
   NAME       di_Waschmaschine
   NR         213
   NTFY_ORDER 50-di_Waschmaschine
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-08-03 18:29:05   last_cmd        2
     2014-08-03 18:29:05   last_cmd_event  Verbrauch_WAMA_Wh
     2014-08-03 18:39:56   last_error      set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '';set Waschmaschine off: OK
     2014-08-03 18:39:56   next_wait_timer no wait_timer
     2014-08-03 18:29:05   state           cmd_2
   Condition:
     0          ReadingValDoIf('Verbrauch_WAMA_Wh','power','')<3
   Devices:
     0           Verbrauch_WAMA_Wh
     all         Verbrauch_WAMA_Wh
   Do:
     0          set pushmsg msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '',set Waschmaschine off
   Helper:
     last_cond  1
     last_timer 0
     sleepdevice Verbrauch_WAMA_Wh
     sleeptimer -1
   Readings:
     0          Verbrauch_WAMA_Wh:power
Attributes:
   wait       300


    "2014-08-03 18:29:05   last_cmd        2"  besagt, dass der Verbrauch über 3 Watt war. Das ist aber nicht die Fehlersituation nach der wir suchen.

Also mach die Lampe aus und warte, dass zwei mal die Meldung kommt, das Wait-Attribut kannst du für den Test löschen, dann geht´s schneller.

Ich sehe auch unter last_error eine Meldung, da sollte eigentlich nichts stehen, vielleicht ist das die Ursache.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 19:15:21
OK. Das Problem ist wohl die Tatsache, das set pushmsg ... einen Returnwert, offenbar das "OK" liefert, was als Fehler interpretiert wird. Dadurch wird der Zustand für das Kommando intern im DOIF-Modul nicht gesetzt und daher das Kommando jedesmal wiederholt. Das werde ich in der nächsten Version korrigieren. Nichtdestotrotz sollte set pushmsg ... sich wie alle anderen FHEM-Befehle verhalten und nicht als Returnwert "OK" liefern, wenn alles ok ist.

Ich bin gerade dabei die nächste Version 1.6 fertig zu stellen, solange musst du dich gedulden oder mit Autor von pushmsg ansprechen, dass er das "ok" rausnimmt ansonsten wirst du immer eine Fehlermeldung im Log sehen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 20:03:26
Hey,

super danke für die Info. Was meinst du wann die neue Version erscheint? Nur ca. will kein Stress machen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 20:10:28
Zitat von: ostseehuepfer am 03 August 2014, 20:03:26
Hey,

super danke für die Info. Was meinst du wann die neue Version erscheint? Nur ca. will kein Stress machen.

Grüße

Die ist etwas umfangreicher, das kann noch paar Tage dauern.

Als Entschädigung für deinen Zeitaufwand, nimm erst mal diese. Aber wie gesagt die Logeinträge mit dem OK-Returnwert wird es trotzdem geben, aber das ist wie gesagt nicht meine Baustelle.

Gruß

Damian

Edit: Datei wurde entfernt
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 20:17:10
Danke !!! Nehme mal an damit bekomme ich keine weiteren doppelten Nachrichten?

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 20:18:21
Zitat von: ostseehuepfer am 03 August 2014, 20:17:10
Danke !!! Nehme mal an damit bekomme ich keine weiteren doppelten Nachrichten?

Grüße

Sollte so sein.  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: ostseehuepfer am 03 August 2014, 20:19:18
OK wird gleich getestet Danke!!!!!

Läuft :) Vielen Vielen Dank !!!
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 August 2014, 21:03:00
Zitat von: ostseehuepfer am 03 August 2014, 20:19:18
OK wird gleich getestet Danke!!!!!

Läuft :) Vielen Vielen Dank !!!

Dann lösche bitte noch den Post Nr. 305. Der bläht hier den Thread unnötig auf.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 05 August 2014, 10:55:00
Eine Beobachtung zum praktischen Umgang mit DOIFs, die ich einfach mal loswerden muss:
(am besten erstmal ganz durchlesen, ich brauche keine "Lösung", sondern möchte das Problem zur Diskussion stellen)

In den letzten Tagen musste ich mit meiner Konfiguration ziemlich herumbasteln (ich hatte es irgendwie geschafft, Geräte ohne Typ zu haben, wodurch mein Log mit Fehlermeldungen prall gefüllt wurde, aber das hatte nichts mit DOIFs zu tun). Ich habe diverse Objekte, gelöscht, umbenannt, kopiert, unter dem alten Namen neu definiert usw. Dabei sind mir ein paar Besonderheit im Umgang mit DOIFs aufgefallen. Ich bin mir nicht sicher, ob das Spezialitäten von DOIF sind, aber bei anderen Modulen ist es mir so zumindest noch nicht begegnet.

Grundlegendes "Problem" dabei ist die Prüfung beim Definieren eines DOIFs. Das DOIF wird ja quasi direkt ausprobiert und getestet, ob alle referenzierten Objekte vorhanden sind usw. Nur dann wird das DOIF auch tatsächlich definiert. Soweit, so gut.

Allerdings findet dieser Prozess bei jedem Einlesen der fhem.cfg (sprich bei jedem Neustart) erneut statt. Auch hier wird die Plausibilität geprüft und die DOIFs werden nicht definiert, wenn diese nicht gegeben ist.

Was bedeutet das in der Praxis?
Im worst case hat man aber weder Fehlermeldungen noch das Fehlen des DOIFs bemerkt, immer mal wieder Save config geklickt und hin und wieder einen Neustart durchgeführt. Dann wundert man sich eben eines Tages, was eigentlich aus diesem komplexen DOIF geworden ist, das man für irgendeinen Sonderfall mühsam programmiert hatte.

Nebenbei: Es gibt noch eine spezielle Variante dieses Ablaufs, wo man noch weniger Chancen hat, etwas zu bemerken: wenn man ein referenziertes Objekt löscht und gleich anschließend unter demselben Namen neu erstellt. Das klappt erstmal problemlos und das DOIF arbeitet ordnungsgemäß weiter. Aber nur bis zum nächsten Neustart. Denn da das refenzierte Objekt NACH dem DOIF (neu)definiert wurde, steht es in der fhem.cfg nun HINTER dem DOIF. Es ist also noch nicht bekannt, wenn das DOIF definiert werden soll -> Fehlermeldung, DOIF wird nicht definiert und fliegt beim nächsten Save config aus der fhem.cfg. Warum das passiert ist völlig logisch und nachvollziehbar. Aber intuitiv ist es trotzdem irgendwie nicht, oder?


Nun hat mich dieses Verhalten nicht vor unüberwindbare Hindernisse gestellt. Ich habe es schnell bemerkt und mich darauf eingestellt. Außerdem mache ich vor umfangreicheren Änderungen auch immer eine Sicherung der fhem.cfg, so dass ich "verlorenen" Code schnell wiederherstellen konnte. Ich befürchte nur, dass weniger versierte Benutzer mit diesem Verhalten ihre Schwierigkeiten bekommen könnten. Wenn DOIF in den "FHEM-Kanon" aufgenommen und von immer mehr Leuten eingesetzt wird, könnten sich also Fehlermeldungen wie "Hilfe, mein DOIF ist verschwunden" häufen.

Für mich stellt sich aber auch grundlegend die Frage, ob es wirklich sinnvoll ist, das Definieren von DOIFs zu verweigern, wenn diese die Plausibilitätsprüfung nicht bestehen. Die Alternative wäre, wie auch jetzt eine Fehlermeldung auszugeben, das DOIF aber trotzdem in die Konfiguration aufzunehmen (zumindest wenn sich der Fehler auf die Referenzen bezieht und nicht auf Klammerung o. ä.).  Es funktioniert dann selbstverständlich nicht richtig, bis es korrigiert wurde. Aber genau das Phänomen tritt jetzt ja auch auf, wenn man einem DOIF im laufenden Betrieb ein referenziertes Objekt "unter dem Hintern weglöscht". Das Leben geht weiter, nur das DOIF tut halt nicht, was es soll und meldet statt dessen einen Fehler.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 August 2014, 15:41:46
Zitat von: Brockmann am 05 August 2014, 10:55:00
Eine Beobachtung zum praktischen Umgang mit DOIFs, die ich einfach mal loswerden muss:
(am besten erstmal ganz durchlesen, ich brauche keine "Lösung", sondern möchte das Problem zur Diskussion stellen)

In den letzten Tagen musste ich mit meiner Konfiguration ziemlich herumbasteln (ich hatte es irgendwie geschafft, Geräte ohne Typ zu haben, wodurch mein Log mit Fehlermeldungen prall gefüllt wurde, aber das hatte nichts mit DOIFs zu tun). Ich habe diverse Objekte, gelöscht, umbenannt, kopiert, unter dem alten Namen neu definiert usw. Dabei sind mir ein paar Besonderheit im Umgang mit DOIFs aufgefallen. Ich bin mir nicht sicher, ob das Spezialitäten von DOIF sind, aber bei anderen Modulen ist es mir so zumindest noch nicht begegnet.

Grundlegendes "Problem" dabei ist die Prüfung beim Definieren eines DOIFs. Das DOIF wird ja quasi direkt ausprobiert und getestet, ob alle referenzierten Objekte vorhanden sind usw. Nur dann wird das DOIF auch tatsächlich definiert. Soweit, so gut.

Allerdings findet dieser Prozess bei jedem Einlesen der fhem.cfg (sprich bei jedem Neustart) erneut statt. Auch hier wird die Plausibilität geprüft und die DOIFs werden nicht definiert, wenn diese nicht gegeben ist.

Was bedeutet das in der Praxis?

       
  • Man definiert ein völlig plausibles, korrektes DOIF, wo beispielsweise ein Bedingung wie ([Wetter:temperature] < 24) drin steht.
  • Irgendwann später löscht man - warum auch immer - das Objekt Wetter. Soweit noch kein Problem. Das DOIF funktioniert dann selbstverständlich nicht mehr, aber es gibt zumindest eine Fehlermeldung, die darauf hinweist. Falls man also bemerkt, dass das DOIF nicht mehr wie erwartet funktioniert, kann man erfahren, warum das so ist.
  • Vielleicht bekommt man es aber nicht mit und behebt das Problem nicht. Aber irgendwann speichert man mal wieder die Konfiguration per Save config. Auch noch kein Problem.
  • Irgendwann macht man einen Neustart. Auf den ersten Blick immer noch kein Problem, es sei denn man achtet auf die dabei auftretende Fehlermeldung, dass ein DOIF nicht definiert werden konnte, weil der darin referenzierte Wetter-Wert fehlt.Das sieht man aber nur, wenn man die "Startseite" von FHEM öffnet und nicht direkt einen bestimmten Raum oder ein Dashboard oder Floorplan.
  • Früher oder später merkt man vielleicht, dass das DOIF sich nicht mehr an der gewohnten Stelle findet und nicht mehr tut, was es soll. Noch ist aber nichts verloren, denn in der fhem.cfg steht der Code für das DOIF bis jetzt noch drin.
  • Aber nur solange, bis man nach dem Neustart das erste Mal Save config anklickt. Dann wird die aktuelle Konfiguration in der fhem.cfg gespeichert. Da das DOIF nicht (mehr) dazu gehört, fliegt es nun aus der fhem.cfg. Nun ist also auch der Code des DOIFs verloren, außer selbstverständlich im Backup, das man sinnvollerweise angelegt hat.  ;)
Im worst case hat man aber weder Fehlermeldungen noch das Fehlen des DOIFs bemerkt, immer mal wieder Save config geklickt und hin und wieder einen Neustart durchgeführt. Dann wundert man sich eben eines Tages, was eigentlich aus diesem komplexen DOIF geworden ist, das man für irgendeinen Sonderfall mühsam programmiert hatte.

Nebenbei: Es gibt noch eine spezielle Variante dieses Ablaufs, wo man noch weniger Chancen hat, etwas zu bemerken: wenn man ein referenziertes Objekt löscht und gleich anschließend unter demselben Namen neu erstellt. Das klappt erstmal problemlos und das DOIF arbeitet ordnungsgemäß weiter. Aber nur bis zum nächsten Neustart. Denn da das refenzierte Objekt NACH dem DOIF (neu)definiert wurde, steht es in der fhem.cfg nun HINTER dem DOIF. Es ist also noch nicht bekannt, wenn das DOIF definiert werden soll -> Fehlermeldung, DOIF wird nicht definiert und fliegt beim nächsten Save config aus der fhem.cfg. Warum das passiert ist völlig logisch und nachvollziehbar. Aber intuitiv ist es trotzdem irgendwie nicht, oder?


Nun hat mich dieses Verhalten nicht vor unüberwindbare Hindernisse gestellt. Ich habe es schnell bemerkt und mich darauf eingestellt. Außerdem mache ich vor umfangreicheren Änderungen auch immer eine Sicherung der fhem.cfg, so dass ich "verlorenen" Code schnell wiederherstellen konnte. Ich befürchte nur, dass weniger versierte Benutzer mit diesem Verhalten ihre Schwierigkeiten bekommen könnten. Wenn DOIF in den "FHEM-Kanon" aufgenommen und von immer mehr Leuten eingesetzt wird, könnten sich also Fehlermeldungen wie "Hilfe, mein DOIF ist verschwunden" häufen.

Für mich stellt sich aber auch grundlegend die Frage, ob es wirklich sinnvoll ist, das Definieren von DOIFs zu verweigern, wenn diese die Plausibilitätsprüfung nicht bestehen. Die Alternative wäre, wie auch jetzt eine Fehlermeldung auszugeben, das DOIF aber trotzdem in die Konfiguration aufzunehmen (zumindest wenn sich der Fehler auf die Referenzen bezieht und nicht auf Klammerung o. ä.).  Es funktioniert dann selbstverständlich nicht richtig, bis es korrigiert wurde. Aber genau das Phänomen tritt jetzt ja auch auf, wenn man einem DOIF im laufenden Betrieb ein referenziertes Objekt "unter dem Hintern weglöscht". Das Leben geht weiter, nur das DOIF tut halt nicht, was es soll und meldet statt dessen einen Fehler.

ja, ich muss mal schauen, was passiert, wenn man trotz eines fehlendem Devices das Modul anlegt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 August 2014, 17:36:29
OK. In der nächsten Version wird man ein DOIF-Modul trotz eines fehlenden Devices anlegen können. Zur Laufzeit gibt´s dann entsprechende Meldungen im Log, als auch unter last_error, wie bereits jetzt schon bei fehlenden Readings. Zusätzlich werden Events vorhandener Readings und Internals (z. B. STATE) jeweils als Reading des Moduls protokolliert. Das dürfte eine mögliche Analyse bei Problemen erleichtern (siehe Screenshot). Das Device bbb ist bei mir nicht existent.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Simon74 am 07 August 2014, 14:49:59
Hallo,
ich würde gerne im DOELSEIF Teil einen "at" Eintrag definieren, jedoch nur wenn dieser "at" noch nicht vorhanden ist.
Ich habe es mal so versucht, was nicht funktioniert:
DOIF (wenn dies und das) (tu das) DOELSEIF ([wz.led.off] ne "") (define wz.led.off at +00:15 set t5.wz.bs1.b:FILTER=STATE!=off off)

Wie gehts richtig ?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 07 August 2014, 15:25:58
Zitat von: Simon74 am 07 August 2014, 14:49:59
ich würde gerne im DOELSEIF Teil einen "at" Eintrag definieren, jedoch nur wenn dieser "at" noch nicht vorhanden ist.
Ich habe es mal so versucht, was nicht funktioniert:
DOIF (wenn dies und das) (tu das) DOELSEIF ([wz.led.off] ne "") (define wz.led.off at +00:15 set t5.wz.bs1.b:FILTER=STATE!=off off)
Das kann so nicht gehen. Du fragst damit ja eine Eigenschaft eines Objekts ab, das nicht existiert. Und das gibt einen Fehler.
Die Existenz von Objekten kannst Du mit defined $defs{<Objektname>} abfragen, also ungefähr (ungetestet):
DOELSEIF(not defined $defs{wz.led.off})(define...)
(Diese Bedingung würde so aber nie getriggert werden, also der Trigger für das DOIF muss aus einer der anderen Bedingungen kommen!)
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 07 August 2014, 15:29:39
Ich habe folgendes als DOIF erstellt:
([FHEM_Kalender:modeStarted] ne "")
    (
    setreading Datastore Cal_start_sum (get FHEM_Kalender summary [FHEM_Kalender:modeStarted]),
    setreading Datastore Cal_start_loc (get FHEM_Kalender location [FHEM_Kalender:modeStarted])
    )

In den Readings habe ich dann stehen:

Cal_start_loc    (get FHEM_Kalender location 2vdojpgsnaoneamvfiqcgooglecom)    2014-08-07 14:44:03
Cal_start_sum    (get FHEM_Kalender summary 2vdo5og6naoneamvfpqcgooglecom)     2014-08-07 14:44:03


Also der Ausdruck in eckigen Klammern wird ausgewertet, aber der Rest nicht. Gibt es eine Möglichkeit, den Rückgabewert der get-Funktion ins Reading zu schreiben?
Ich habe schon verschiedene Varianten von Kombinationen von Klammern, fhem"..." usw ausprobiert, aber ich bekomme es nicht hin.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 August 2014, 15:57:18
Zitat von: Brockmann am 07 August 2014, 15:25:58
Das kann so nicht gehen. Du fragst damit ja eine Eigenschaft eines Objekts ab, das nicht existiert. Und das gibt einen Fehler.
Die Existenz von Objekten kannst Du mit defined $defs{<Objektname>} abfragen, also ungefähr (ungetestet):
DOELSEIF(not defined $defs{wz.led.off})(define...)
(Diese Bedingung würde so aber nie getriggert werden, also der Trigger für das DOIF muss aus einer der anderen Bedingungen kommen!)
Eigentlich war meine Idee bei DOIF notify, at, watchdog nicht mehr benutzen zu müssen, da diese Funktionalität in DOIF steckt. Wenn du nur eine Verzögerung haben willst, dann kannst du das einfach mit dem wait-attribut realisieren.

... DOELSEIF ([wz.led.off] ne "") (set t5.wz.bs1.b:FILTER=STATE!=off off)
attr modulname wait ...:900

auch den Filter kannst du dir sparen, da bei DOIF im Gegensatz zu notify nur einmal geschaltet wird.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 August 2014, 16:29:08
Zitat von: Brockmann am 07 August 2014, 15:29:39
Ich habe folgendes als DOIF erstellt:
([FHEM_Kalender:modeStarted] ne "")
    (
    setreading Datastore Cal_start_sum (get FHEM_Kalender summary [FHEM_Kalender:modeStarted]),
    setreading Datastore Cal_start_loc (get FHEM_Kalender location [FHEM_Kalender:modeStarted])
    )

In den Readings habe ich dann stehen:

Cal_start_loc    (get FHEM_Kalender location 2vdojpgsnaoneamvfiqcgooglecom)    2014-08-07 14:44:03
Cal_start_sum    (get FHEM_Kalender summary 2vdo5og6naoneamvfpqcgooglecom)     2014-08-07 14:44:03


Also der Ausdruck in eckigen Klammern wird ausgewertet, aber der Rest nicht. Gibt es eine Möglichkeit, den Rückgabewert der get-Funktion ins Reading zu schreiben?
Ich habe schon verschiedene Varianten von Kombinationen von Klammern, fhem"..." usw ausprobiert, aber ich bekomme es nicht hin.

Ergebnisse von FHEM-Befehlen innerhalb von FHEM-Befehlen direkt auszuwerten ist nicht vorgesehen. Dann wirst du wohl einen Umweg über Perl machen müssen. Den entsprechenden Perl-Code musst du in geschweifte Klammern setzen:  ({....}).

Gruß

Damian




Titel: Antw:neues Modul DOIF
Beitrag von: Simon74 am 07 August 2014, 16:52:18
Zitat von: Damian am 07 August 2014, 15:57:18
Eigentlich war meine Idee bei DOIF notify, at, watchdog nicht mehr benutzen zu müssen, da diese Funktionalität in DOIF steckt. Wenn du nur eine Verzögerung haben willst, dann kannst du das einfach mit dem wait-attribut realisieren.

... DOELSEIF ([wz.led.off] ne "") (set t5.wz.bs1.b:FILTER=STATE!=off off)
attr modulname wait ...:900

auch den Filter kannst du dir sparen, da bei DOIF im Gegensatz zu notify nur einmal geschaltet wird.

Gruß

Damian

Dankeschön !
Titel: Antw:neues Modul DOIF
Beitrag von: jens am 08 August 2014, 11:10:00
Hallo,
ich versuche das Waschmaschinen-Scenario, welches hier im Thread schon behandelt wurde, nachzustellen. So weit funktioniert das Ganze auch, allerdings bekommen ich bei einem fhem neustart immer eine Pushnotification.

Ich benutzte die letzte von Damian gepostete DOIF Funktion.
   
define di_Waschmaschine DOIF ([CUL_EM_8:peak]<0.04) (set Notifications msg 'Keller' 'Waschmaschine FERTIG!!!' '' 0 '')
attr di_Waschmaschine icon scene_washing_machine
attr di_Waschmaschine loglevel 6
attr di_Waschmaschine room Smart
attr di_Waschmaschine wait 300

Muß ich damit leben, da der erste Statuswechsel ja erst nach dem restart passiert, oder kann ich das "peak reading" irgendwie initalisieren?

Vielen Dank,
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 August 2014, 11:29:26
Zitat von: jens am 08 August 2014, 11:10:00
Muß ich damit leben, da der erste Statuswechsel ja erst nach dem restart passiert, oder kann ich das "peak reading" irgendwie initalisieren?
Ansich sollten die States auch von DOIFs im Statefile gesichert und beim Neustart wieder eingelesen werden. Du müsstest nur dafür sorgen, dass regelmäßig ein WriteStatefile durchgeführt wird, beispielsweise so:
define StateFile_schreiben at +*01:00:00 {WriteStatefile}
Das schreibt einmal pro Stunde den aktuelle Stand ins Statefile. Man kann das natürlich alternativ auch an bestimmte wichtige Ereignisse/Aktionen dranhängen.
Bei einem Neustart wird direkt nach dem Einlesen der fhem.cfg auch das Statefile eingelesen, so dass alle Objekte wieder in dem Zustand sind, den sie beim letzten Schreiben des Statefiles hatten.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 August 2014, 11:45:35
Zitat von: Brockmann am 08 August 2014, 11:29:26
Ansich sollten die States auch von DOIFs im Statefile gesichert und beim Neustart wieder eingelesen werden. Du müsstest nur dafür sorgen, dass regelmäßig ein WriteStatefile durchgeführt wird, beispielsweise so:
define StateFile_schreiben at +*01:00:00 {WriteStatefile}
Das schreibt einmal pro Stunde den aktuelle Stand ins Statefile. Man kann das natürlich alternativ auch an bestimmte wichtige Ereignisse/Aktionen dranhängen.
Bei einem Neustart wird direkt nach dem Einlesen der fhem.cfg auch das Statefile eingelesen, so dass alle Objekte wieder in dem Zustand sind, den sie beim letzten Schreiben des Statefiles hatten.

Das wird leider z. Zt. nicht helfen. Ich merke mir den letzten Zustand in Internals nicht in Readings, diese werden beim Neustart neugesetzt. Damit der Zustand ein Reboot überlebt, müsste ich mir den letzten Zustand in den Readings merken (das Reading last_cmd wird jetzt schon gesetzt aber nicht ausgewertet)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 August 2014, 11:50:09
Zitat von: Damian am 08 August 2014, 11:45:35
Das wird leider z. Zt. nicht helfen. Ich merke mir den letzten Zustand in Internals nicht in Readings, diese werden beim Neustart neugesetzt. Damit der Zustand ein Reboot überlebt, müsste ich mir den letzten Zustand in den Readings merken (das Reading last_cmd wird jetzt schon gesetzt aber nicht ausgewertet)
Ah, sorry, ich hatte angenommen, dass die Readings ausschlaggebend wären.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 August 2014, 12:12:45
Zitat von: Brockmann am 08 August 2014, 11:50:09
Ah, sorry, ich hatte angenommen, dass die Readings ausschlaggebend wären.
Ich werde das in der nächsten Version auf Reading-Auswertung umstellen. Dann wird der Zustand erhalten bleiben und das Kommando nicht erneut ausgeführt.

Gruß

Damian


Titel: Finale Version
Beitrag von: Damian am 08 August 2014, 23:09:43
Finale Eincheck-Version ist fertig.

Ich habe nun meine Vorstellungen umgesetzt und die hier besprochenen Probleme behoben.

Die wichtigsten Neuerungen (siehe dazu Beispiele im ersten Post) sind:

+reine Statusanzeige ohne Ausführung von Kommandos
+Angabe von Readings, Stati und Internals sowie Perlberechnungen im Status des Moduls


Bitte die erweiterte Dokumentation im ersten Post beachten.

Achtung: Diese Version ist intern nicht abwärtskompatibel zu der vorherigen. Daher:

System  anhalten, Modul kopieren, System wieder hochfahren (kein reload)

Danach bei allen bereits definierten DOIF-Modulen über die Weboberfläche auf DEF klicken und über modify-Button bestätigen.

Da die bisherigen Versionen recht stabil liefen, erwarte ich keine großen Überraschungen bzgl. der Stabilität. Wenn im Laufe nächster Woche keine gravierenden Mängel auffallen, werde ich die Doku aus dem ersten Post noch in der Source aktualisieren und das Modul einchecken.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: jens am 11 August 2014, 00:04:25
Hallo Damian,
ich kann bestätigen, dass mein Waschmaschinen DOIF jetzt voll funktioniert. D.h. nach einem Neustart gibt es keine "falsche" Notification mehr. Super! Vielen Dank für die rasche Implementierung!

Gruss,
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 August 2014, 09:20:47
Verträgt sich DOIF eigentlich mit IF?

Also mir ist schon klar, dass DOIF das IF eigentlich überflüssig machen sollte. Aber ich habe beispielsweise einen Anwendungsfall, wo beim Triggern eines Ereignisses bestimmte Aktionen immer durchgeführt werden sollen, andere nur in Abhängigkeit von weiteren Bedingungen. Bei einem reinen DOIF müsste ich die "Immer-Aktionen" in jedem Ausführungsteil wiederholen, was ja nicht Sinn der Sache ist. Deshalb dachte ich mir, ich setze in den Ausführungsteil des DOIF ein paar IFs rein. Aber ich habe das Gefühl, dass es da ein grundsätzliches Problem gibt.
([Datastore])
    (
    IF ([Datastore] eq "Test")(trigger global Datastore_Test)
    )

sollte formal korrekt sein, oder? Führt aber mit set Datastore Test zur Fehlermeldung:
IF (Test eq "Test") (trigger global Datastore_Test) : Bareword "Test" not allowed while "strict subs" in use at (eval 96002) line 1.
set Datastore "Test" hingegen klappt.
Um die "verschwundenen" Anführungszeichen zurückzubekommen, habe es dann testweise mal in
    IF ("[Datastore]" eq "Test")(trigger global Datastore_Test)
geändert und überraschenderweise scheint es so zu funktionieren.

Ist das ein ungewollter Seiteneffekt bei der Kombination von IF und DOIF oder ist das so beabsichtigt? Dann sollte man das vielleicht noch dokumentieren.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 August 2014, 09:40:13
Zitat von: Brockmann am 11 August 2014, 09:20:47
Verträgt sich DOIF eigentlich mit IF?

Also mir ist schon klar, dass DOIF das IF eigentlich überflüssig machen sollte. Aber ich habe beispielsweise einen Anwendungsfall, wo beim Triggern eines Ereignisses bestimmte Aktionen immer durchgeführt werden sollen, andere nur in Abhängigkeit von weiteren Bedingungen. Bei einem reinen DOIF müsste ich die "Immer-Aktionen" in jedem Ausführungsteil wiederholen, was ja nicht Sinn der Sache ist. Deshalb dachte ich mir, ich setze in den Ausführungsteil des DOIF ein paar IFs rein. Aber ich habe das Gefühl, dass es da ein grundsätzliches Problem gibt.
([Datastore])
    (
    IF ([Datastore] eq "Test")(trigger global Datastore_Test)
    )

sollte formal korrekt sein, oder? Führt aber mit set Datastore Test zur Fehlermeldung:
IF (Test eq "Test") (trigger global Datastore_Test) : Bareword "Test" not allowed while "strict subs" in use at (eval 96002) line 1.
set Datastore "Test" hingegen klappt.
Um die "verschwundenen" Anführungszeichen zurückzubekommen, habe es dann testweise mal in
    IF ("[Datastore]" eq "Test")(trigger global Datastore_Test)
geändert und überraschenderweise scheint es so zu funktionieren.

Ist das ein ungewollter Seiteneffekt bei der Kombination von IF und DOIF oder ist das so beabsichtigt? Dann sollte man das vielleicht noch dokumentieren.
ja, es ist tatsächlich ein Seiteneffekt, weil bei FHEM-Kommandos DOIF die Readings in eckigen Klammern ersetzt, bevor IF überhaupt zum Zuge kommt.
Ich muss mir die Problematik genauer anschauen. Evtl. muss ich bei DOIF erkennen, dass ein IF-Befehl ausgeführt werden soll und die Ersetzung nicht vornehmen und sie IF überlassen. Diesen Mechanismus habe ich bereits bei verschtelten IF-Befehlen schon eingebaut, daher sollte es machbar sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 August 2014, 12:33:31
Zitat von: Damian am 11 August 2014, 09:40:13
ja, es ist tatsächlich ein Seiteneffekt, weil bei FHEM-Kommandos DOIF die Readings in eckigen Klammern ersetzt, bevor IF überhaupt zum Zuge kommt.
Ich muss mir die Problematik genauer anschauen. Evtl. muss ich bei DOIF erkennen, dass ein IF-Befehl ausgeführt werden soll und die Ersetzung nicht vornehmen und sie IF überlassen. Diesen Mechanismus habe ich bereits bei verschtelten IF-Befehlen schon eingebaut, daher sollte es machbar sein.

Gruß

Damian

Mit der neuen Version (1.61 im ersten Post) sollte es keinen Grund mehr geben auf Perl-if ausweichen zu müssen.  ;)

Funktioniert jetzt mit IF, wie man es erwartet.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 August 2014, 17:27:12
Zitat von: Damian am 11 August 2014, 12:33:31
Mit der neuen Version (1.61 im ersten Post) sollte es keinen Grund mehr geben auf Perl-if ausweichen zu müssen.  ;)
Funktioniert jetzt mit IF, wie man es erwartet.
Sieht gut aus, Danke!
Titel: Antw:neues Modul DOIF
Beitrag von: cwagner am 12 August 2014, 07:23:59
Hallo Damian,

DOIF verfüllt alle Versprechungen und gerade die ABlösung von AT bewährt sich aktuell bei mir besonders: Mein System ist wegen einer anderen Entwicklung instabil, es stürzt also gelegentlich ab: Bei AT bedeutete eine verpasste Zeit auch, dass der entsprechende Befehl ausfiel.

Bei meinen inzwischen 10 DOIFs werden die Bedingungen beim Neustart geprüft und entsprechend alle artig nachgeholt.

Das finde ich sehr fein - wie überhaupt die Vielseitigkeit des Moduls so groß ist, dass ich es vermutlich noch viel öfter einsetzen kann.

Danke!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 August 2014, 08:34:04
Zitat von: cwagner am 12 August 2014, 07:23:59
Hallo Damian,

DOIF verfüllt alle Versprechungen und gerade die ABlösung von AT bewährt sich aktuell bei mir besonders: Mein System ist wegen einer anderen Entwicklung instabil, es stürzt also gelegentlich ab: Bei AT bedeutete eine verpasste Zeit auch, dass der entsprechende Befehl ausfiel.

Bei meinen inzwischen 10 DOIFs werden die Bedingungen beim Neustart geprüft und entsprechend alle artig nachgeholt.

Das finde ich sehr fein - wie überhaupt die Vielseitigkeit des Moduls so groß ist, dass ich es vermutlich noch viel öfter einsetzen kann.

Danke!
Christian

Ja, deswegen habe ich bei DOIF bewusst auf relative Zeitangaben verzichtet, denn es gibt oft Probleme nach einem Absturz, denn der relativ errechnete Zeitpunkt ändert sich dann.

In dem Zusammenhang, will ich auf die Frage nach "Schalten alle X-Tage" eingehen. Will man z. B. alle 2 Tage schalten, dann kann man das auch relativ einfach mit der Modulo-Operation % erledigen. Beispiel

([08:00] and $yday % 2 == 0)

so wird nur an geraden Tagen des Jahres geschaltet. Anstelle der 2 kann man beliebige Zahl einsetzen, z. B. alle zwei Wochen:

([08:00] and $yday % 14 == 0)

Diese Vorgehensweise ist nicht relativ und hat den Vorteil, dass auch nach dem Absturz der Zeitpunkt immer gleich ist und nicht, wie bei relativen Zeitangaben z. B. zwei mal am Tag die Blumen gegossen werden  :)

Es ist mir bewusst, dass es nach dem Jahreswechsel Verschiebungen gibt, das dürfte in den meisten Fälle unerheblich sein, da es nur einmal im Jahr passiert. In kritischen Fällen lässt sich auch so etwas durch entsprechende Abfragen umgehen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 August 2014, 08:54:15
Mir ist gestern noch eine Kleinigkeit aufgefallen, die aber wohl mit der Funktionsweise von DOIF zusammenhängt und sich nicht ändern lässt.
[Bad:humidity] = 60
[Datastore:BZ_H_1] = 59

([Bad:humidity])
   (
   setreading Datastore BZ_H_1 [Bad:humidity],
   set Schwellwert [Datastore:BZ_H_1]
   )

setzt Schwellwert nicht auf auf 60, wie man intuitiv erwarten würde, sondern auf 59.
Wenn das DOIF getriggert wird, wird in dem Moment alles in eckigen Klammern interpretiert und intern durch die in diesem Moment geltenden Werte ersetzt. Ändert man diese Werte dann innerhalb des DOIFs, bekommt das DOIF davon nichts mehr mit und rechnet mit den "alten" Werten weiter.
Intern geht das Ganze quasi so an den Interpreter:

(60)
   (
   setreading Datastore BZ_H_1 60,
   set Schwellwert 59
   )


Dieses Verhalten dürfte sich jederzeit umgehen lassen notfalls indem man per ReadingsVal direkt ausliest. Oder in diesem einfachen (konstruierten) Beispiel bei der zweiten Zuweisung halt wieder den Eingangswert nimmt und nicht den Zwischenspeicher. Ist also kein Problem, nur eine kleine Stolperfalle, auf die man stoßen kann.

Also: Wenn man in einem DOIF (oder auch IF) in ein Reading schreibt, sollte man dieses Reading dahinter nicht mehr per [] verwenden, sondern nur per ReadingsVal, richtig?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 August 2014, 09:13:18
Zitat von: Brockmann am 12 August 2014, 08:54:15
Mir ist gestern noch eine Kleinigkeit aufgefallen, die aber wohl mit der Funktionsweise von DOIF zusammenhängt und sich nicht ändern lässt.
[Bad:humidity] = 60
[Datastore:BZ_H_1] = 59

([Bad:humidity])
   (
   setreading Datastore BZ_H_1 [Bad:humidity],
   set Schwellwert [Datastore:BZ_H_1]
   )

setzt Schwellwert nicht auf auf 60, wie man intuitiv erwarten würde, sondern auf 59.
Wenn das DOIF getriggert wird, wird in dem Moment alles in eckigen Klammern interpretiert und intern durch die in diesem Moment geltenden Werte ersetzt. Ändert man diese Werte dann innerhalb des DOIFs, bekommt das DOIF davon nichts mehr mit und rechnet mit den "alten" Werten weiter.
Intern geht das Ganze quasi so an den Interpreter:

(60)
   (
   setreading Datastore BZ_H_1 60,
   set Schwellwert 59
   )


Dieses Verhalten dürfte sich jederzeit umgehen lassen notfalls indem man per ReadingsVal direkt ausliest. Oder in diesem einfachen (konstruierten) Beispiel bei der zweiten Zuweisung halt wieder den Eingangswert nimmt und nicht den Zwischenspeicher. Ist also kein Problem, nur eine kleine Stolperfalle, auf die man stoßen kann.

Also: Wenn man in einem DOIF (oder auch IF) in ein Reading schreibt, sollte man dieses Reading dahinter nicht mehr per [] verwenden, sondern nur per ReadingsVal, richtig?

ja, das ist der Tatsache geschuldet, dass ich den kompletten String zuerst auswerte und dann an die FHEM-Ausführungsfunktion übergebe. Selbst das könnte ich zukünftig regeln, indem ich die einzelnen Befehle bis zum Komma einzeln auswerte und an FHEM übergebe. Solange kannst du dir in solchen Fällen einfach behelfen, indem du den vorherigen Wert nimmst.

setreading Datastore BZ_H_1 [Bad:humidity],
set Schwellwert [Bad:humidity1]

Ich werde es aber noch anpassen, weil es eine wichtige Eigenschaft des intuitiven Programmierens ist.

Bei IF wird es sich aber nicht machen lassen, da ich dort den kompletten Perl-if zusammen bauen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 12 August 2014, 18:43:27
Hallo.
Ich habe hiermit ein Problem

([Bewohner:state] eq "present" and [08:00-20:59:54]) (set Steckdose2 on)
    DOELSEIF ([Status_Xpeed:state] eq "on" and ($hms ge "19:00" or $hms le "07:59:59")) (set Steckdose2:FILTER=STATE!=on on)  DOELSEIF ([Mediacenter_manuOn:state] eq "on") (set Steckdose2:FILTER=STATE!=on on)
DOELSE (set Steckdose2 off)


Trotz aktiviertem Mediacenter_manuOn, schaltet mir DOIF die Steckdose off.
why?
Das ganze mit IF klappt zwar, aber da wird das Mediacenter_manuOn gar nicht ausgewertet.

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: tekki am 12 August 2014, 19:50:04
Hallo Damian,

ich möchte mich an dieser Stelle für die super Arbeit und das klasse Modul bedanken. Es erleichtert mir meine Umsetzungen erheblich  :)

In den Posts habe ich von der Errormeldung beim Einsatz von Pushmsg gelesen. Ich setze es auch ein und bekommen mit Version 1.61 auch noch den Error. Die Mitteilung wird aber geschickt.

DEF 
([05:05] or [12:00] or [19:00]) (set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '')

error set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '': OK

Ich kann damit leben, wollte es Dir nur zur Info mitteilen.

Grüße
Ralph
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 August 2014, 21:26:57
Zitat von: satprofi am 12 August 2014, 18:43:27
Hallo.
Ich habe hiermit ein Problem

([Bewohner:state] eq "present" and [08:00-20:59:54]) (set Steckdose2 on)
    DOELSEIF ([Status_Xpeed:state] eq "on" and ($hms ge "19:00" or $hms le "07:59:59")) (set Steckdose2:FILTER=STATE!=on on)  DOELSEIF ([Mediacenter_manuOn:state] eq "on") (set Steckdose2:FILTER=STATE!=on on)
DOELSE (set Steckdose2 off)


Trotz aktiviertem Mediacenter_manuOn, schaltet mir DOIF die Steckdose off.
why?
Das ganze mit IF klappt zwar, aber da wird das Mediacenter_manuOn gar nicht ausgewertet.

gruss

So wie du es definiert hast, ist es  sogar ziemlich wahrscheinlich. Entscheidend ist folgender Absatz aus der Doku:

Die Angaben werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch ein Device beinhalten (Angaben in eckigen Klammern).

Jetzt überlege mal, was ausgeführt wird um z. B. 08:00 Uhr, wenn Bewohner:state nicht present ist und Mediacenter_manuOn:state on.
... dein ELSE-Fall.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 August 2014, 21:32:57
Zitat von: tekki am 12 August 2014, 19:50:04
Hallo Damian,

ich möchte mich an dieser Stelle für die super Arbeit und das klasse Modul bedanken. Es erleichtert mir meine Umsetzungen erheblich  :)

In den Posts habe ich von der Errormeldung beim Einsatz von Pushmsg gelesen. Ich setze es auch ein und bekommen mit Version 1.61 auch noch den Error. Die Mitteilung wird aber geschickt.

DEF 
([05:05] or [12:00] or [19:00]) (set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '')

error set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '': OK

Ich kann damit leben, wollte es Dir nur zur Info mitteilen.

Grüße
Ralph

Dazu habe ich bereits schon etwas geschrieben. Das Problem ist, dass set Push_msg einen Returnwert "OK" liefert, statt 0, "" oder undef. Das wird als Fehler interpretiert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 12 August 2014, 22:22:50
Zitat von: Damian am 24 Juni 2014, 21:01:47
Zum Installieren Modul 98_DOIF.pm ins FHEM-Verzeichnis kopieren und in der Kommandozeile reload 98_DOIF.pm eingeben.
Hi,

ich habe so meine lieben Probleme das Modul zu installieren. Lt. Anleitung oben ist das Module ins Verzeichnis /opt/fhem/FHEM kopiert worden. Die Berechtigungen sollten auch korrekt gesetzt sein:
Zitat-rw-r--r-- 1 fhem dialout 32873 Aug 12 21:53 98_DOIF.pm
Aber nach dem reload 98_DOIF.pm in der Kommandozeile kann ich immer noch nicht den neuen DOIF verwenden. FHEM kennt diesen DOIF-Befehl schlichtweg nicht.

Was mache ich denn falsch?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 August 2014, 22:25:03
Zitat von: Roaster am 12 August 2014, 22:22:50
Hi,

ich habe so meine lieben Probleme das Modul zu installieren. Lt. Anleitung oben ist das Module ins Verzeichnis /opt/fhem/FHEM kopiert worden. Die Berechtigungen sollten auch korrekt gesetzt sein:Aber nach dem reload 98_DOIF.pm in der Kommandozeile kann ich immer noch nicht den neuen DOIF verwenden. FHEM kennt diesen DOIF-Befehl schlichtweg nicht.

Was mache ich denn falsch?

Was hast du probiert zu definieren mit dem Modul?

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 13 August 2014, 06:04:41
Zitat von: Damian am 12 August 2014, 21:26:57
So wie du es definiert hast, ist es  sogar ziemlich wahrscheinlich. Entscheidend ist folgender Absatz aus der Doku:

Die Angaben werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch ein Device beinhalten (Angaben in eckigen Klammern).

Jetzt überlege mal, was ausgeführt wird um z. B. 08:00 Uhr, wenn Bewohner:state nicht present ist und Mediacenter_manuOn:state on.
... dein ELSE-Fall.

Gruß

Damian


alles klar, thx.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 August 2014, 07:45:16
Zitat von: satprofi am 13 August 2014, 06:04:41

alles klar, thx.

Das was du willst, wird so besser funktionieren:

(([Bewohner:state] eq "present" and [08:00-21:00]) or ([Status_Xpeed:state] eq "on" and [19:00-08:00]) or  [Mediacenter_manuOn:state] eq "on") (set Steckdose2 on) DOELSE (set Steckdose2 off)

Wichtig zu wissen ist, dass 08:00-21:00 um 21:00 Uhr nicht mehr wahr ist, ebenso ist 19:00-08:00 um 08:00 nicht mehr wahr. Zeitintervall-Angaben bedeuten "bis ausschließlich".

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 13 August 2014, 09:21:36
Zitat von: Damian am 12 August 2014, 22:25:03
Was hast du probiert zu definieren mit dem Modul?

Ich hab's gerade nicht bei der Hand hier in der Arbeit, jedoch bekomme ich gleich beim Speichern der fhem.cfg, dass das Statement DOIF nicht bekannt sei. Ich gehe davon aus, dass dies somit ein globales Problem ist mit meiner Installation als vielmehr ein Problem mit den verwendeten Zeilen innerhalb der fhem.cfg.

Ich werde mal eines der (einfachen) Beispiele vom ersten Posting verwenden um zu prüfen, ob DOIF überhaupt verwendet wird.

Michael
Titel: Antw:neues Modul DOIF
Beitrag von: ph1959de am 13 August 2014, 09:34:18
Hast Du mal versucht, das DOIF über das Befehls-Eingabefeld zu definieren? Gleiche Reaktion/Fehlermeldung?
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 13 August 2014, 18:43:58
Zitat von: ph1959de am 13 August 2014, 09:34:18
Hast Du mal versucht, das DOIF über das Befehls-Eingabefeld zu definieren? Gleiche Reaktion/Fehlermeldung?
Ja, soben mit

DOIF ([GarageTorRechtsZu:state] == "closed" and [GarageTorRechtsAuf:state] == "opened")
DOELSEIF ([GarageTorRechtsZu:state] == "opened" and [GarageTorRechtsAuf:state] == "opened")
DOELSEIF ([GarageTorRechtsZu:state] == "opened" and [GarageTorRechtsAuf:state] == "closed")


Bei GarageTorRechtsZu und GarageTorRechtsAuf handelt es sich um Max Fensterkontakte, die ansonsten einwandfrei funktionieren. Ich habe sie hier auf dem Schreibtisch. Wenn ich diese Zeilen im Eingabefeld eingeben und Enter drücke erhalte ich:
ZitatUnknown command DOIF, try help.

Für mich bedeutet diese Meldung: DOIF ist nicht vorhanden  ??? oder Liege ich so falsch mit meiner Annahme? Wie muss ich das Modul dann korrekterweise installieren?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 August 2014, 18:50:03
Zitat von: Roaster am 13 August 2014, 18:43:58
Für mich bedeutet diese Meldung: DOIF ist nicht vorhanden  ??? oder Liege ich so falsch mit meiner Annahme? Wie muss ich das Modul dann korrekterweise installieren?

und du hast mit "define modulname DOIF ...." angefangen?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 13 August 2014, 18:54:33
Äh, ja sorry wurde von mir abgeschnitten:

define di_Fenster
DOIF ([GarageTorRechtsZu:state] == "closed" and [GarageTorRechtsAuf:state] == "opened")
DOELSEIF ([GarageTorRechtsZu:state] == "opened" and [GarageTorRechtsAuf:state] == "opened")
DOELSEIF ([GarageTorRechtsZu:state] == "opened" and [GarageTorRechtsAuf:state] == "closed")

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 13 August 2014, 23:39:22
Zitat von: Roaster am 13 August 2014, 18:54:33
Äh, ja sorry wurde von mir abgeschnitten:

define di_Fenster
DOIF ([GarageTorRechtsZu:state] == "closed" and [GarageTorRechtsAuf:state] == "opened")
DOELSEIF ([GarageTorRechtsZu:state] == "opened" and [GarageTorRechtsAuf:state] == "opened")
DOELSEIF ([GarageTorRechtsZu:state] == "opened" and [GarageTorRechtsAuf:state] == "closed")


Wie gibst Du das denn wo ein? Diese Fehlermeldung kann nur kommen, wenn Du DOIF ohne vorgehendes define <Name> in derselben Zeile eingibst.
Selbst wenn DOIF nicht korrekt installiert wäre, würde es sonst ein "unknow module"-Fehler geben, aber kein "unknow command". Unknow Command bedeutet, dass Du DOIF als FHEM-Befehl verwendest, aber nicht als FHEM-Modul (wie es sein sollte).

Tippe mal in das Befehlsfeld des Weboberfläche folgenden Befehl (in einer Zeile!):
define DI_Fenster DOIF ([Dummy1])(set Dummy1 1)
Dummy1 muss es dabei nicht geben, zumindest wenn Du die aktuelle Version von DOIF benutzt.
Tritt dabei ein Fehler auf oder wird das DOIF angelegt?
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 14 August 2014, 08:30:42
Oh Mann! Das muss einem aber auch mal gesagt werden, dass das ganze als Einzeiler geschrieben werden muss. Da wäre ich im Leben nicht darauf gekommen  :-\

Bin wohl zu sehr C# Compiler und Editor verwöhnt. Alles klar, nun läuft es auch für Dummies ;D

Vielleicht mal explizit ins erste Posting aufnehmen für solche wie mich  8)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 14 August 2014, 09:00:19
Zitat von: Roaster am 14 August 2014, 08:30:42
Oh Mann! Das muss einem aber auch mal gesagt werden, dass das ganze als Einzeiler geschrieben werden muss. Da wäre ich im Leben nicht darauf gekommen  :-\

Bin wohl zu sehr C# Compiler und Editor verwöhnt. Alles klar, nun läuft es auch für Dummies ;D

Vielleicht mal explizit ins erste Posting aufnehmen für solche wie mich  8)

Das stimmt nicht.

Du musst nur define di_Fenster DOIF in einer Zeile schreiben, damit DOIF von FHEM überhaupt erkannt wird (etwas anderes wirst du in meiner Doku nicht finden). Das hat aber nichts mit DOIF zu tun, sondern gilt für alle Module. Den Rest hinter DOIF kannst du im DEF-Editor auf einzelne Zeilen verteilen wie du willst. Ab da kommt der DOIF-Parser zum Zuge und der kann mit Zeilenumbrüchen umgehen.

Und noch was, Zeichenketten werden im Gegensatz zu Zahlen nicht mit == verglichen, sondern mit eq (siehe Beispiele in der Doku). Genaueres zu Perl-Operatoren siehe hier: http://de.selfhtml.org/perl/sprache/operatoren.htm

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 14 August 2014, 09:34:50
Damit nicht gleich wieder Missverständnisse aufkommen: Wirklich nur define DI_Fenster DOIF in die Befehlszeile zu schreiben, hilft nicht wirklich.
Dadurch wird zwar ein DOIF definiert, aber das hat keinen DEF-Teil, den man bearbeiten könnte.
Ist das eigentlich so beabsichtigt bzw. ließe sich dass nicht ändern, so dass in diesem Fall einfach eine "leere" DEF angelegt wird?

Ansonsten scheint mir die Minimalversion derzeit define DI_Fenster DOIF ([bla]) zu sein, da hat man dann eine DEF, die man anschließend bearbeiten kann.

Und für von C#-Compiler und -Editor Verwöhnte:
Man kann den DEF-Editor durch eine abgespeckte Version von codemirror ersetzen, dann hat man auch Code-Highlighting, Bracket-Matching, Autocompletion usw. in der FHEM-Weboberfläche.
Titel: Antw:neues Modul DOIF
Beitrag von: ph1959de am 14 August 2014, 10:01:09
Zitat von: Brockmann am 14 August 2014, 09:34:50
...
Und für von C#-Compiler und -Editor Verwöhnte:
Man kann den DEF-Editor durch eine abgespeckte Version von codemirror ersetzen, dann hat man auch Code-Highlighting, Bracket-Matching, Autocompletion usw. in der FHEM-Weboberfläche.

Siehe dazu auch diesen Abschnitt  (http://www.fhemwiki.de/wiki/Konfiguration#Syntaxhervorhebung)im Wiki.
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 14 August 2014, 12:01:26
Zitat von: Damian am 14 August 2014, 09:00:19
Und noch was, Zeichenketten werden im Gegensatz zu Zahlen nicht mit == verglichen, sondern mit eq (siehe Beispiele in der Doku). Genaueres zu Perl-Operatoren siehe hier: http://de.selfhtml.org/perl/sprache/operatoren.htm

Danke dir, für die Info mit dem Vergleichsoperator. Ich habs noch nicht am laufen, es war mehr experimentell, aber da wäre ich sicherlich umgehend drübergefallen und gleich wieder hier im Forum aufgeschlagen  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Roaster am 14 August 2014, 12:35:36
Zitat von: ph1959de am 14 August 2014, 10:01:09
Siehe dazu auch diesen Abschnitt  (http://www.fhemwiki.de/wiki/Konfiguration#Syntaxhervorhebung)im Wiki.
Wow, ganz neues Feeling im Editor! Super - Danke für den Tipp!

Michael
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 15 August 2014, 22:42:47
Ich verstehe nicht, warum ein Fehler gemeldet wird:
([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked")
   (set Schloss lock)
DOELSEIF ([Tuerkontakt] eq "closed" and [Schloss] eq "locked (uncertain)")
   (set Schloss unlock,{ PushBulletText('Türstatus locked (uncertain)') },set Schloss lock)
DOELSEIF ([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked (uncertain)")
   (set Schloss unlock,{ PushBulletText('Türstatus unlocked (uncertain)') },set Schloss lock)
DOELSEIF ([Tuerkontakt] eq "closed" and [Schloss] eq "NACK")
   (set Schloss unlock,{ PushBulletText('Türstatus NACK') },set Schloss lock)


Die Meldung lautet bei Auslösung durch NACK:
last_error

set Schloss unlock;{ PushBulletText('Türstatus NACK') };set Schloss lock: Not enough arguments for main::PushBulletText at (eval 85658) line 1, near "'Türstatus NACK') "


Kann mir bitte jemand helfen, den Fehler zu finden?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 16 August 2014, 08:29:15
Zitat von: Invers am 15 August 2014, 22:42:47
Die Meldung lautet bei Auslösung durch NACK:
last_error

set Schloss unlock;{ PushBulletText('Türstatus NACK') };set Schloss lock: Not enough arguments for main::PushBulletText at (eval 85658) line 1, near "'Türstatus NACK') "

Kann mir bitte jemand helfen, den Fehler zu finden?
Der Fehler hat mit DOIF nichts zu tun. Du rufst die PushBulletText-Funktion mit zuwenig Argumenten auf.
Warum überhaupt eine Funktion, es gibt doch ein eigenes Modul für PushBullet, oder?
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 16 August 2014, 08:52:23
Warum ich mich für dieses Modul entschieden habe, weiss ich nicht. Der Service selber ist halt kostenlos.
Es kann sein, dass durch Umprogrammmierung des Moduls eine neue Syntax entstanden ist. Ich werde danach gucken.
Vielen Dank für den Tipp.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 16 August 2014, 11:25:09
Hallo.
Kurze Frage zu eventsreading, wie stelle ich es an das sr_weather von mytwilight als schaltzeitpunkt erkannt wird?
ich möchte zu diesem zeitpunkt eine lampe schalten, aber nur für 2h.
gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 16 August 2014, 11:38:01
Zitat von: satprofi am 16 August 2014, 11:25:09
Kurze Frage zu eventsreading, wie stelle ich es an das sr_weather von mytwilight als schaltzeitpunkt erkannt wird?
Schau doch mal in die Readings des Twilight-Moduls. Da gibt es ein Reading namens aktEvent, dass immer das zuletzt ausgelöste Event angibt.
([mytwilight:aktEvent] eq "sr_weather")(set...)
sollte also klappen.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 16 August 2014, 11:54:54
ja, aber das event bleibt bis abends stehen. wie schaltet dann doif die lampe wieder aus?
habe das ganze mit notify erfolgreich, möchte es mit doif lösen.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 16 August 2014, 11:58:18
Hallo,

schalte die Lampe doch mit einem on-for-timer 7200 ein
Sollte das Gerät kein on-for-timer können lass dir ein at anlegen das 2 Stunden später die Lampe ausschaltet.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 16 August 2014, 12:10:35
Zitat von: Puschel74 am 16 August 2014, 11:58:18
Hallo,

schalte die Lampe doch mit einem on-for-timer 7200 ein
Sollte das Gerät kein on-for-timer können lass dir ein at anlegen das 2 Stunden später die Lampe ausschaltet.

Grüße

a) netio kann nur on/off
b) werds mal bei doif versuchen

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 16 August 2014, 12:16:11

define DI_Lampe_an DOIF ([mytwilight:aktEvent] eq "sr_weather") (set Lampe on)
define DI_Lampe_aus DOIF ([Lampe] eq "on"]) (set Lampe off)
attr DI_Lampe_aus wait 7200

Das ist aber nur sinvoll, wenn "Lampe" nicht noch von anderer Seite aus gesteuert wird.
Theoretisch müsste man auch ein einziges DOIF draus machen können, aber da sich das dann quasi selbst triggert, bin ich nicht sicher, ob das klappt.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 16 August 2014, 12:50:35
habe es mal so definiert

([myTwilight:aktEvent] eq "sr_weather") ("define Lampe_on at +01:00:00 set AquaLamp3000K on","define Lampe2_on at +03:00:00 set AquaLamp4000K_1 on","define Lampe3_on at +04:00:00 set AquaLamp4000K_2 on)


mal sehen obs klappt.

leider nicht

last_error {"define Lampe_on at +01:00:00 set AquaLamp3000K on","define Lampe2_on at +03:00:00 set AquaLamp4000K_1 on","define Lampe3_on at +04:00:00 set AquaLamp4000K_2 on"}: HASH(0x141c9f8)


so klappts leider auch nicht:


([myTwilight:aktEvent] eq "sr_weather") (define Lampe_on at +01:00:00 set AquaLamp3000K on,define Lampe2_on at +03:00:00 set AquaLamp4000K_1 on,define Lampe3_on at +04:00:00 set AquaLamp4000K_2 on)


ich denke es klappt so:


([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp3000K on)
DOELSEIF ([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp4000K_1 on)
DOELSEIF ([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp4000K_2 on)
DOELSEIF ([10:00]) (set AquaLamp3000K off)
DOELSEIF ([17:00]) (set AquaLamp3000K on)
DOELSEIF ([myTwilight:aktEvent] eq "ss_weather) (set AquaLamp4000K_1 off)
DOELSEIF ([myTwilight:aktEvent] eq "ss_civil) (set AquaLamp4000K_2 off)
DOELSEIF ([21:45]) (set AquaLamp3000K off)


dann wait 3600:10800:14400:0:0:0:0:0

[edit]

mir ist gerade  "sleep" eingefallen
jetzt habe ich das ganze so gelöst


([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp3000K on,sleep 7200,set AquaLamp4000K_1 on,sleep 3600,set AquaLamp4000K_2 on)
DOELSEIF ([10:00]) (set AquaLamp3000K off)
DOELSEIF ([17:00]) (set AquaLamp3000K on)
DOELSEIF ([myTwilight:aktEvent] eq "ss_weather) (set AquaLamp4000K_1 off)
DOELSEIF ([myTwilight:aktEvent] eq "ss_civil) (set AquaLamp4000K_2 off)
DOELSEIF ([21:45]) (set AquaLamp3000K off)


dann wait 3600:0:0:0:0:0




gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 August 2014, 13:18:54
Hallo Damian,

ich sitze gerade an folgender Definition:

([Wetter_1] or [Wetter_2])
    (
    setreading WETTER humidity {sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2))}
    )

Das führt zu folgender Fehlermeldung:
DOIF: no right bracket: {sprintf("%.0f"
Meine Vermutung: DOIF interpretiert das Komma zwischen den Parametern von sprintf als "sein" Komma und beendet die Anweisung an der Stelle, was zur Verstümmelung des sprintf und damit logischerweise zur Fehlermeldung führt.
Wie muss ich das formulieren, um dieses Problem zu vermeiden?
(Sinn des Ganzen ist, vom Durchschnitt der aktuellen Werte nur den ganzzahligen Teil als Reading in einen anderen Dummy zu schreiben.)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 August 2014, 14:17:04
Zitat von: Brockmann am 17 August 2014, 13:18:54
Hallo Damian,

ich sitze gerade an folgender Definition:

([Wetter_1] or [Wetter_2])
    (
    setreading WETTER humidity {sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2))}
    )

Das führt zu folgender Fehlermeldung:
DOIF: no right bracket: {sprintf("%.0f"
Meine Vermutung: DOIF interpretiert das Komma zwischen den Parametern von sprintf als "sein" Komma und beendet die Anweisung an der Stelle, was zur Verstümmelung des sprintf und damit logischerweise zur Fehlermeldung führt.
Wie muss ich das formulieren, um dieses Problem zu vermeiden?
(Sinn des Ganzen ist, vom Durchschnitt der aktuellen Werte nur den ganzzahligen Teil als Reading in einen anderen Dummy zu schreiben.)
Perl-Auswertung muss zusätzlich in runde Klammern, also {(....)} -steht so in der Doku. Das musste ich einbauen, da z. B. at selbst geschweifte Klammern für Wiederholungen nutzt.
Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 August 2014, 14:28:38
Zitat von: Damian am 17 August 2014, 14:17:04
Perl-Auswertung muss zusätzlich in runde Klammern, also {(....)} -steht so in der Doku. Das musste ich einbauen, da z. B. at selbst geschweifte Klammern für Wiederholungen nutzt.
Das habe ich schon probiert.

([Wetter_1] or [Wetter_2])
    (
    setreading WETTER humidity {(sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2)))}
    )

Ergibt
DOIF: no right bracket: {(sprintf("%.0f"
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 August 2014, 15:09:38
Zitat von: Brockmann am 17 August 2014, 14:28:38
Das habe ich schon probiert.

([Wetter_1] or [Wetter_2])
    (
    setreading WETTER humidity {(sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2)))}
    )

Ergibt
DOIF: no right bracket: {(sprintf("%.0f"

OK. Damit Komma bei FHEM-Befehlen nicht als Trennzeichen gilt, so muss der FHEM-Befehl, wie bei IF, zusätzlich in runde Klammern, also ((setreading...))

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 August 2014, 17:50:19
Zitat von: Damian am 17 August 2014, 15:09:38
OK. Damit Komma bei FHEM-Befehlen nicht als Trennzeichen gilt, so muss der FHEM-Befehl, wie bei IF, zusätzlich in runde Klammern, also ((setreading...))
Ah, OK, es gibt immer noch eine Variante, auf die man nicht kommt.  ;)

Komplett muss die Klammerarie übrigens so aussehen, damit dann auch der Wert und nicht der Ausdruck im Reading landet:

([Wetter_1] or [Wetter_2])
    (
    (setreading WETTER humidity ({(sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2)))}))
    )

Falls jemand eine Möglichkeit sieht, die eine oder andere Klammer noch loszuwerden, immer her damit.
Ich meine, das ")))}))" am Ende der Zeile darf man wirklich niemandem zeigen, oder?
Ohne Editor mit Bracket-Matching kann man sich da gleich die Kugel geben.

Naja, jetzt läuft es jedenfalls... Danke für die Unterstützung.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 August 2014, 18:14:19
Zitat von: Brockmann am 17 August 2014, 17:50:19
Ah, OK, es gibt immer noch eine Variante, auf die man nicht kommt.  ;)

Komplett muss die Klammerarie übrigens so aussehen, damit dann auch der Wert und nicht der Ausdruck im Reading landet:

([Wetter_1] or [Wetter_2])
    (
    (setreading WETTER humidity ({(sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2)))}))
    )

Falls jemand eine Möglichkeit sieht, die eine oder andere Klammer noch loszuwerden, immer her damit.
Ich meine, das ")))}))" am Ende der Zeile darf man wirklich niemandem zeigen, oder?
Ohne Editor mit Bracket-Matching kann man sich da gleich die Kugel geben.

Naja, jetzt läuft es jedenfalls... Danke für die Unterstützung.

(setreading WETTER humidity ({(sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2)))}))

Die vier roten Klammern können weg.

Je komplexe die Ausdrücke, desto schwierige wird es kompatibel zu bleiben. Irgendwann kann man auch gleich mit {fhem("...."} arbeiten, allerdings sind diese zusammengebauten Ausdrücke meistens auch nicht kürzer.

Die Historie ist ganz einfach:

Gäbe es die Vervielfachungs-Problematik mit Semikolons bei FHEM nicht, dann hätte ich Semikolon statt Komma als Trennzeichen genommen.

Gäbe es das Komma nicht als Trennzeichen, müsste ich nicht auf die Kompatibilität zu FHEM-Befehlen achten,

Müsste ich nicht auf die Kompatibilität der FHEM-Befehle achten, bräuchte man nicht zusätzliche runde Klammern angeben

usw.

Vielleicht überlege ich mir noch eine vereinfachte Syntax für die Formatierung von Zahlen.


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 August 2014, 18:25:16
Zitat von: Damian am 17 August 2014, 18:14:19
(setreading WETTER humidity ({(sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2))])}))
Die vier roten Klammern können weg.
Also die beiden äußeren müssen bleiben, meine ich. Die habe ich extra eingefügt, als ich im Reading (sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2))) anstelle des gewünschten Wertes stehen hatte. Aber die inneren müssten tatsächlich verzichtbar sein. Mal sehen, ob ich mich traue, da nochmal ran zu gehen.  ;)

Meine Anmerkungen waren übrigens auch gar nicht so kritisch gemeint. Mir ist schon klar, dass manche Probleme komplexe Lösungen erfordern.
Aber wenn Du noch Spielraum für Vereinfachung siehst, umso besser.
Wobei das ja nun auch keine Aufgabenstellung ist, die ein Paradebeispiel für die Verwendung von DOIF darstellt. Ich verwende es aber immer gerne, wenn es um Readings geht, weil der Zugriff darauf per DOIF deutlich einfacher und besser lesbar ist.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 August 2014, 18:42:08
Zitat von: Brockmann am 17 August 2014, 18:25:16
Also die beiden äußeren müssen bleiben, meine ich. Die habe ich extra eingefügt, als ich im Reading (sprintf("%.0f",(([Wetter_1:humidity]+[Wetter_2:humidity])/2))) anstelle des gewünschten Wertes stehen hatte. Aber die inneren müssten tatsächlich verzichtbar sein. Mal sehen, ob ich mich traue, da nochmal ran zu gehen.  ;)

Meine Anmerkungen waren übrigens auch gar nicht so kritisch gemeint. Mir ist schon klar, dass manche Probleme komplexe Lösungen erfordern.
Aber wenn Du noch Spielraum für Vereinfachung siehst, umso besser.
Wobei das ja nun auch keine Aufgabenstellung ist, die ein Paradebeispiel für die Verwendung von DOIF darstellt. Ich verwende es aber immer gerne, wenn es um Readings geht, weil der Zugriff darauf per DOIF deutlich einfacher und besser lesbar ist.

Konstruktive Kritik ist immer sinnvoll, da man dadurch immer etwas verbessern kann. Ich bin immer noch der Meinung, dass die roten Klammern weg können. Probiere es mal aus. Wir wollen keinem unnötige Klammern empfehlen.

Aber zunächst eine neue Version 1.7 im ersten Post.

Jetzt werden Befehle einzeln abgearbeitet.

Damit sollte so etwas im Ausführungsteil sauber funktionieren:

(setreading dummy_t test1 on, setreading dummy_t test2 [dummy_t:test1])

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 August 2014, 19:39:15
Zitat von: Damian am 17 August 2014, 18:42:08
Ich bin immer noch der Meinung, dass die roten Klammern weg können. Probiere es mal aus. Wir wollen keinem unnötige Klammern empfehlen.
Du hast Recht. Ich musste die Klammern innerhalb der geschwungenen Klammer hinzufügen, damit der Ausdruck ausgewertet wird, nicht außerhalb.
Titel: Antw:neues Modul DOIF
Beitrag von: tekki am 18 August 2014, 08:03:33
Zitat von: tekki am 12 August 2014, 19:50:04
Hallo Damian,

ich möchte mich an dieser Stelle für die super Arbeit und das klasse Modul bedanken. Es erleichtert mir meine Umsetzungen erheblich  :)

In den Posts habe ich von der Errormeldung beim Einsatz von Pushmsg gelesen. Ich setze es auch ein und bekommen mit Version 1.61 auch noch den Error. Die Mitteilung wird aber geschickt.

DEF 
([05:05] or [12:00] or [19:00]) (set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '')

error set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '': OK

Ich kann damit leben, wollte es Dir nur zur Info mitteilen.

Grüße
Ralph

Hallo Damian,

ich habe hierzu noch einmal eine Frage. Kann es sein das durch den von Push_MSG verursachten Error, die weiteren Nachrichten nicht mehr versendet werden.
Immer wenn ich in der DEF auf modify klicke, wird das DOIF neu initialisiert und sendet einmal die Nachricht zur nächsten Zeitpunkt. Dann erscheint der Error und es kommen keine weiteren Nachrichten. Klicke ich erneut in der DEF wieder auf modify, versendet das DOIF zum nächsten Zeitpunkt wieder eine Nachricht.
Oder habe ich in meiner DEF einen Fehler. Ziel ist es, dass ich zu mehreren Zeitpunkten eine Erinnerungs-Nachricht bekommen möchte.

Grüße
Ralph
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 August 2014, 08:09:20
Zitat von: tekki am 18 August 2014, 08:03:33
Hallo Damian,

ich habe hierzu noch einmal eine Frage. Kann es sein das durch den von Push_MSG verursachten Error, die weiteren Nachrichten nicht mehr versendet werden.
Immer wenn ich in der DEF auf modify klicke, wird das DOIF neu initialisiert und sendet einmal die Nachricht zur nächsten Zeitpunkt. Dann erscheint der Error und es kommen keine weiteren Nachrichten. Klicke ich erneut in der DEF wieder auf modify, versendet das DOIF zum nächsten Zeitpunkt wieder eine Nachricht.
Oder habe ich in meiner DEF einen Fehler. Ziel ist es, dass ich zu mehreren Zeitpunkten eine Erinnerungs-Nachricht bekommen möchte.

Grüße
Ralph

Du hast da was vergessen  ;)

Zitat aus der Doku:

"Angaben, bei denen aufgrund der Definition kein Zustandswechsel erfolgen kann z. B.:
define DI_Licht DOIF ([08:00]) (set Switch on)
attr DI_Licht do always

müssen mit Attribut "do always" definiert werden, damit sie nicht nur einmal, sondern jedes mal (hier jeden Tag) ausgeführt werden."

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: tekki am 18 August 2014, 09:13:10
Danke, werde ich am Abend testen.


Grüße
Ralph
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 18 August 2014, 10:13:38
Zitat von: tekki am 12 August 2014, 19:50:04
DEF 
([05:05] or [12:00] or [19:00]) (set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '')
Geht es dabei immer noch um diese Definition?
Hmm, ok, steht ja in der Doku, dass man in solchen Fällen do always verwenden muss.

Aber wenn ich statt dessen
DEF 
([05:05-05:06] or [12:00-12:01] or [19:00-19:01]) (set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '')

nehme, würde es ohne do always gehen und die Aktion würde trotzdem jeweils nur einmal ausgeführt werden.
Das legt zumindest dieses Beispiel aus der Doku nahe:
define DI_Radio DOIF ([08:00-10:00] or [20:00-22:00]) (set Radio on) DOELSE (set Radio off)

Anscheinend werden einzelne Zeitpunkte intern anders behandelt als Intervalle. Beim Intervall wird jeweils am Anfang des Intervalls und direkt nach dem Ende des Intervalls getriggert. Bei einem Zeitpunkt wird nur am Anfang getriggert, aber nicht nach dem Ende.
Klingt erstmal logisch, aber gibt es dafür wirklich einen guten Grund? Könnte man nicht einen Zeitpunkt intern als ein "Miniintervall" behandeln, also [05:05] entspricht intern [05:05:00-05:05:59]? Dann würde die Bedingung nach dem Zeitpunkt wieder unwahr werden und das DOIF beim nächsten Erreichen des Zeitpunkts auch ohne do always wieder ausgeführt werden.

Ich stelle das mal zur Diskussion, weil ich es etwas unintuitiv finde, dass man beim Angeben von klassischen Schaltzeitpunkten per DOIF grundsätzlich do always setzen muss. Ohne ergibt keinen Sinn, weil das DOIF dann nur ein einziges Mal getriggert würde, also ein einmaliger Schaltzeitpunkt im wahrsten Sinn des Wortes wäre, was ja ein eher exotisches Anwendungszenario ist.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 August 2014, 10:49:24
Zitat von: Brockmann am 18 August 2014, 10:13:38

Ich stelle das mal zur Diskussion, weil ich es etwas unintuitiv finde, dass man beim Angeben von klassischen Schaltzeitpunkten per DOIF grundsätzlich do always setzen muss. Ohne ergibt keinen Sinn, weil das DOIF dann nur ein einziges Mal getriggert würde, also ein einmaliger Schaltzeitpunkt im wahrsten Sinn des Wortes wäre, was ja ein eher exotisches Anwendungszenario ist.
Das stimmt nicht. Auch hier ein Beispiel aus der Doku:

define DI_Licht DOIF ([08:00] or [10:00] or [20:00]) (set Switch on) DOELSEIF ([09:00] or [11:00] or [00:00]) (set Switch off)

Hier kommt man ohne do always aus, weil es zwei Zustände gibt (cmd1 und cmd2), die sich abwechseln.

Grundsätzlich ist eine Zeitpunktangabe nur zum Ausführungszeitpunkt wahr, Intervalle sind dagegen über einen bestimmten Zeitraum wahr. Das sind aus meiner Sicht zwei unterschiedliche Dinge.

Und mit der Angabe:

([05:05-05:06] or [12:00-12:01] or [19:00-19:01]) (set Push_msg msg 'Test' 'Das ist ein Test'' '' 0 '')

würde man unnötig doppelt so oft triggern.

Man könnte auch auf die Idee kommen bei Angaben ohne ELSE-Fall "do always" immer automatisch zu setzen. Diese Vorgehensweise würde allerdings kollidieren mit Abfragen von kontinuierlich sendenden Sensoren, bei denen es Sinn machen kann, kein do always und keinen ELSE-Fall zu definieren - siehe Waschmaschine-fertig-Beispiel.

Ich denke es reicht diesen Sachverhalt deutlich zu dokumentieren. Ich sehe da keinen logischen Bruch.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 August 2014, 11:59:25
Zitat von: Damian am 18 August 2014, 10:49:24

Ich denke es reicht diesen Sachverhalt deutlich zu dokumentieren. Ich sehe da keinen logischen Bruch.

Was mir dazu noch eingefallen ist:

Ich könnte bei der Definition erkennen, ob in allen Bedingungen nur Timer (Timeintervalle) definiert sind und dann automatisch do always-Attribut setzen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 18 August 2014, 17:14:58
Hallo.
Leider klappt es nur bedingt.


([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp3000K on)
DOELSEIF ([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp4000K_1 on)
DOELSEIF ([myTwilight:aktEvent] eq "sr_weather") (set AquaLamp4000K_2 on)
DOELSEIF ([10:00]) (set AquaLamp3000K off)
DOELSEIF ([17:00]) (set AquaLamp3000K on)
DOELSEIF ([myTwilight:aktEvent] eq "ss_weather) (set AquaLamp4000K_1 off)
DOELSEIF ([myTwilight:aktEvent] eq "ss_civil) (set AquaLamp4000K_2 off)
DOELSEIF ([21:45]) (set AquaLamp3000K off)


die lampen werden eingeschaltet, auch 3000k um 10:00 aus. aber eine stunde später wieder an, weil "sr_weather" noch immer aktiv.
hat jemand schon mal mit diesem event geschalten? wenn es nicht klappen sollte muss ich auf "sr" umstellen, das ist nach einiger zeit von sr_weather überschrieben. aber klappt dann das sleep noch?
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 19 August 2014, 07:18:29
Hallo zusammen,

seit längerem lese ich hier bei dem DOIF Modul mit.
Da bin ich so begeistert von und wollte es nun auch mal einsetzen.

Daher mal einfach angefangen. Ich habe einen HM Regensensor und im Dachgeschoss an Dachfenstern Kontakte.
Nun wollte ich wenn es anfängt zu regnen und die Fenster offen sind ein Pushover schicken.
Soweit so gut und dieses DOIF definiert.

Internals:
   CFGFN
   DEF        (([DG_xx_RS_Markise_Rain:state] eq "rain") and (([DG_hz_TK_Dachfenster:state] eq "open") or ([DG_wz_TK_Dachfenster:state] eq "open"))) ( set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '')
   NAME       di_Rain
   NR         163
   NTFY_ORDER 50-di_Rain
   STATE      cmd_2
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Last_cmd:
         Mydblog:
           TIME       1408371955.65279
           VALUE      2
       Last_cmd_event:
         Mydblog:
           TIME       1408371955.65279
           VALUE      DG_hz_TK_Dachfenster
       Last_error:
         Mydblog:
           TIME       1408424752.34098
           VALUE       set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 ''
       State:
         Mydblog:
           TIME       1408371955.65279
           VALUE      cmd_2
   Readings:
     2014-08-18 16:25:55   last_cmd        2
     2014-08-18 16:25:55   last_cmd_event  DG_hz_TK_Dachfenster
     2014-08-19 07:05:52   last_error       set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
     2014-08-18 16:25:55   state           cmd_2
   Condition:
     0          (ReadingValDoIf('DG_xx_RS_Markise_Rain','state','') eq "rain") and ((ReadingValDoIf('DG_hz_TK_Dachfenster','state','') eq "open") or (ReadingValDoIf('DG_wz_TK_Dachfenster','state','') eq "open"))
   Devices:
     0           DG_xx_RS_Markise_Rain  DG_hz_TK_Dachfenster  DG_wz_TK_Dachfenster
     all         DG_xx_RS_Markise_Rain  DG_hz_TK_Dachfenster  DG_wz_TK_Dachfenster
   Do:
     0           set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 ''
   Helper:
     last_cond  1
     last_timer 0
     sleeptimer -1
   Readings:
     0          DG_xx_RS_Markise_Rain:state DG_hz_TK_Dachfenster:state DG_wz_TK_Dachfenster:state
Attributes:
   group      doif


Heute morgen hat meine Frau dann mal die Dachfenster geöffnet und schwups, kommen die Meldungen, da der Regensensort auf "rain" steht, wegen Tau.
Dafür habe ich nun mal ein at definiert, welches alle 30 Minuten die Heizung des Sensors anschmeisst.

Aber das ist nicht das Problem.
Kurioserweise kommen nun brav etwa alle 10 Minuten die Pushmeldungen aufs Handy, obwohl sich weder der Regensensor noch die Sensoren am Fenster ändern.
Bisher bin ich davon ausgegangen, dass DOIF bei Änderungen reagiert.

Nur warum passiert das dann so wie bei mir?


2014.08.19 07:05:52.340 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 07:05:51.356 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 07:05:50.451 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 07:00:00.027 3: CUL_HM set DG_xx_RS_Markise_Heating on-for-timer 500
2014.08.19 06:55:53.602 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:55:52.238 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:55:50.493 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:45:52.288 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:45:51.368 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:45:50.497 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:35:52.235 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:35:51.341 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:35:50.451 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:30:00.027 3: CUL_HM set DG_xx_RS_Markise_Heating on-for-timer 500
2014.08.19 06:25:52.333 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:25:51.373 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:25:50.479 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:21:03.356 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
2014.08.19 06:20:49.135 2: di_Rain:  set myPushover msg 'Regen - Dachfenster' 'Es faengt an zu regnen und ein Dachfenster ist offen.' 'iPhone5S' 0 '': OK
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 19 August 2014, 07:56:50
Auch ich habe
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 August 2014, 08:19:29
Zitat von: maxritti am 19 August 2014, 07:18:29

Heute morgen hat meine Frau dann mal die Dachfenster geöffnet und schwups, kommen die Meldungen, da der Regensensort auf "rain" steht, wegen Tau.
Dafür habe ich nun mal ein at definiert, welches alle 30 Minuten die Heizung des Sensors anschmeisst.

Aber das ist nicht das Problem.
Kurioserweise kommen nun brav etwa alle 10 Minuten die Pushmeldungen aufs Handy, obwohl sich weder der Regensensor noch die Sensoren am Fenster ändern.
Bisher bin ich davon ausgegangen, dass DOIF bei Änderungen reagiert.

Nur warum passiert das dann so wie bei mir?

Du arbeitest nicht mit der aktuellen Version von DOIF.

Nimm einfach die aktuelle Version aus dem ersten Post. Das Problem wurde bereits behoben.

Das System herunterfahren, DOIF-Modul ins FHEM-Verzeichnis kopieren, danach auf  DEF bei deinem definierten DOIF-Modul klicken und mit Modify-Button neu definieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 19 August 2014, 08:28:56
Alles klaro.
Das werde ich mal machen.

Danke Dir auf jeden Fall.
Titel: Antw:neues Modul DOIF
Beitrag von: tekki am 19 August 2014, 09:07:41
Zitat von: Damian am 18 August 2014, 08:09:20
Du hast da was vergessen  ;)

Zitat aus der Doku:

"Angaben, bei denen aufgrund der Definition kein Zustandswechsel erfolgen kann z. B.:
define DI_Licht DOIF ([08:00]) (set Switch on)
attr DI_Licht do always

müssen mit Attribut "do always" definiert werden, damit sie nicht nur einmal, sondern jedes mal (hier jeden Tag) ausgeführt werden."

Gruß

Damian

Hallo Damian,
habe gestern do always hinzugefügt. Nun funktioniert es wie gewünscht. Bzgl. dem Hinweis in der Doku habe ich das nicht auf meine Umsetzung bezogen. Aber im nach hinein ist es logisch, da sich auch in meinem Fall kein Zustand ändert :-)

Danke noch mal
Grüße
Ralph
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 August 2014, 17:48:39
Das aktuelle Modul wurde eingecheckt. Es ist also ab morgen per Update verfügbar.

Rudi müsste es noch in der Commandref zu den Hilfs (Erweiterungs-) Modulen verschieben.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 20 August 2014, 07:30:48
Zitat von: Damian am 19 August 2014, 17:48:39
Das aktuelle Modul wurde eingecheckt. Es ist also ab morgen per Update verfügbar.
Na, das sind doch mal gute Nachrichten!
Bei der Gelegenheit nochmal Danke für das tolle Modul und das geduldige Erklären.  ;)
Aus meiner Sicht bringt DOIF FHEM insgesamt ein schönes Stückchen voran.
Titel: Antw:neues Modul DOIF
Beitrag von: TecCheck am 20 August 2014, 19:22:18
Zitat von: Brockmann am 20 August 2014, 07:30:48
Na, das sind doch mal gute Nachrichten!
Bei der Gelegenheit nochmal Danke für das tolle Modul und das geduldige Erklären.  ;)
Aus meiner Sicht bringt DOIF FHEM insgesamt ein schönes Stückchen voran.


Dem kann ich nur voll und ganz beipflichten!  :)

Wolfgang
Titel: Antw:neues Modul DOIF
Beitrag von: det. am 21 August 2014, 22:18:26
Hallo Damian,
vielen Dank für das sehr nützliche Modul. Hat gleich ein paar Altlasten (notify für WW-Zirkulation und Helligkeits- und zeitgesteuerte Außenbeleuchtung ersetzt). Ein kleines Problem habe ich noch - und vielleicht nur zu dumm gewesen, das in Deinem sehr ausführlichen commandref Artikel zu finden: Ich möchte einen Aktor nach 5min wieder ausschalten und der beherrscht kein on-for-timer 300.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 August 2014, 23:36:40
Zitat von: det. am 21 August 2014, 22:18:26
Hallo Damian,
vielen Dank für das sehr nützliche Modul. Hat gleich ein paar Altlasten (notify für WW-Zirkulation und Helligkeits- und zeitgesteuerte Außenbeleuchtung ersetzt). Ein kleines Problem habe ich noch - und vielleicht nur zu dumm gewesen, das in Deinem sehr ausführlichen commandref Artikel zu finden: Ich möchte einen Aktor nach 5min wieder ausschalten und der beherrscht kein on-for-timer 300.

So etwas hatten wir schon mal. Die Nachbildung eines on-for-timers lässt sich mit zwei DOIF´s und einem Dummy realisieren.

define schalter_d dummy

define di_Schalter DOIF ([Bewegungsmelder] eq "motion" )  (set schalter_d on, set schalter_d off)
attr di_Schalter do always

define di_Licht DOIF ([schalter_d] eq "on")  (set Licht on) DOELSE  (set Licht off)
attr di_Licht wait 0:300


Hiermit wird das Licht bei Bewegung eingeschaltet. Dabei wird, solange es brennt, bei jeder Bewegung die Ausschaltzeit auf 5 Minuten neugesetzt, "set Licht on" wird dabei nicht unnötig wiederholt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 22 August 2014, 10:59:58
Hallo,

ich tüftele gerade an einer Aufgabenstellung und frage mich, ob (und wie) ich dafür DOIF einsetzen kann:

Ich habe einen Dummy für Alarm mit den Zuständen deaktiviert, aktiviert, traege und ausgelöst. Die Umschaltung zwischen deaktiviert, aktiviert und traege erfolgt über Taster an der Wand. Wenn der Alarm aktiviert ist, soll er sobald ein Bewegungsmelder auslöst auf ausgelöst wechseln. Soweit bekomme ich das hin. Nun zur DOIF-Frage: Wenn der Alarm in der Status ausgelöst wechselt, soll eine Aktion ausgeführt werden (auch das bekomme ich noch hin) und außerdem soll ab diesem Zeitpunkt zyklisch (30 Sekunden) geprüft werden, ob der Status noch immer ausgelöst ist und in diesem Fall die Aktion wiederholt werden (bei diesem zyklischen Teil bin ich mir nicht sicher, ob und wie DOIF das ohne at könnte). Der Wechsel aus dem Zustand ausgelöst erfolgt wieder per Wandtaster...

Geht das mit DOIF?

Vielen Dank
Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 22 August 2014, 11:18:47
Zitat von: RoBra81 am 22 August 2014, 10:59:58
Geht das mit DOIF?
Man kann mit DOIF (fast) alles machen. Das heißt aber nicht, dass man alles mit DOIF machen muss oder sollte (IMHO).

So ein alle 30-Sekunden-Task lässt sich mit einem simplen AT sehr einfach lösen.
Du könntest das AT fest definieren, aber standardmäßig mit dem Attribut disabled 1 versehen.
Wenn der Alarm ausgelöst wird, entfernt ein DOIF dieses Attribut und das AT führt alle 30 Sekunden seine Aktion durch.
Wenn der Alarm per Wandtaster aufgehoben wird, setzt ein (oder sogar dasselbe?) DOIF das Attribut wieder und das AT geht schlafen.

Das scheint mir die naheliegendste und geradlinigste Lösung zu sein.
Aber man kann das sicher auch mit zwei DOIFs und einem Dummy hinbekommen, vielleicht analog zu der Bewegungsmelder-Lösung von etwas weiter oben.
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 22 August 2014, 11:22:38
Da bevorzuge ich die AT-Lösung. Es hätte ja sein können, dass DOIF selbst auch soetwas zyklisches kann, aber einer Lösung mit zwei DOIFs und einem Dummy ziehe ich dann doch ein AT vor..

Vielen Dank
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 22 August 2014, 13:04:54
Hallo,

kann mir noch jemand einen Tipp geben, wie ich einen langen Tastendruck als Bedingung formulieren kann? Ich habe ein HMW_IO_12_Sw7_DR_JEQ0497826 mit den Readings press_long und press_short. Beim Betätigen des Tasters gibt es die Events press_long und press_short, aber wie muss ich es Formulieren, damit der die entsprechende Aktion im DOIF ausgelöst wird?

Danke
Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 22 August 2014, 13:39:25
Zitat von: RoBra81 am 22 August 2014, 13:04:54
kann mir noch jemand einen Tipp geben, wie ich einen langen Tastendruck als Bedingung formulieren kann? Ich habe ein HMW_IO_12_Sw7_DR_JEQ0497826 mit den Readings press_long und press_short. Beim Betätigen des Tasters gibt es die Events press_long und press_short, aber wie muss ich es Formulieren, damit der die entsprechende Aktion im DOIF ausgelöst wird?
Wie sehen die Events bei press_long bzw. press_short denn genau aus? Drück doch mal beides und poste dann hier das Protokoll aus dem Event-Monitor.
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 22 August 2014, 13:43:27
Jeweils zwei mal gedrückt:

2014-08-22 13:41:38 HM485 OG.ez.WS.Ku_Tuer_1 press_short: press_short 14
2014-08-22 13:41:44 HM485 OG.ez.WS.Ku_Tuer_1 press_short: press_short 15
2014-08-22 13:41:46 HM485 OG.ez.WS.Ku_Tuer_1 press_long: press_long 16
2014-08-22 13:41:51 HM485 OG.ez.WS.Ku_Tuer_1 press_long: press_long 17
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 22 August 2014, 14:06:25
Zitat von: RoBra81 am 22 August 2014, 13:43:27
Jeweils zwei mal gedrückt:

2014-08-22 13:41:38 HM485 OG.ez.WS.Ku_Tuer_1 press_short: press_short 14
2014-08-22 13:41:44 HM485 OG.ez.WS.Ku_Tuer_1 press_short: press_short 15
2014-08-22 13:41:46 HM485 OG.ez.WS.Ku_Tuer_1 press_long: press_long 16
2014-08-22 13:41:51 HM485 OG.ez.WS.Ku_Tuer_1 press_long: press_long 17

Hmm, ich bin mir nicht sicher, was es mit den Zahlen jeweils am Ende auf sich hat. Zählen die einfach immer hoch?
Sollte aber auch egal sein. Im Prinzip müsste einfach ein
([OG.ez.WS.Ku_Tuer1:press_short])
in Verbindung mit attr do always reichen.
Das reagiert auf jedes Ereignis mit diesem Reading.
(Das ist für DOIF jetzt aber völlig off-topic. Ggf. gehts im Homematic-Forum weiter, falls es so noch nicht klappt.)
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 22 August 2014, 14:29:09
Hallo,

vielen Dank, dass du versuchst, mir zu helfen. Ich finde das nicht OffTopic für DOIF: Um mit dem Taster ein notify zu Triggern habe ich schon seit längerem eine funktionierende Schreibweise:

define TaserNot notify OG.ez.WS.Durchgang_1.*press_long.* ...

Leider schaffe ich es nicht, eine solche für DOIF zu finden. Ich habe es mal nach deinem Vorschlag probiert:

([OG.ez.WS.Durchgang_1:press_long])

Da ich zu Zeit nicht zu Hause bin, mach ich meine Test mit dem trigger-Befehl: Wenn ich

trigger OG.ez.WS.Durchgang_1 press_long

auslöse, reagiert das DOIF.  :)

Löse ich

trigger OG.ez.WS.Durchgang_1 dsfdsfdsfds

aus, reagiert das DOIF auch.  :(

Löse ich

trigger OG.ez.WS.Durchgang_1 press_long: press_long 55

aus, so sieht das Event so aus wie beim Tastendruck, es passiert jedoch nix im DOIF  :( :(

EDIT: Letzteres löst das notify übrigens korrekt aus...
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 22 August 2014, 15:16:03
Zitat von: RoBra81 am 22 August 2014, 14:29:09
: Um mit dem Taster ein notify zu Triggern habe ich schon seit längerem eine funktionierende Schreibweise:
define TaserNot notify OG.ez.WS.Durchgang_1.*press_long.* ...
Diese Definition ist leider nicht eindeutig. Die kann darauf reagieren, dass der Status des Geräts den Wert press_long irgendwas annimmt oder dass das Reading press_long des Geräts auf irgendwas gesetzt wird. Deshalb kann man (bzw. ich jedenfalls) daraus nicht einfach so eine passende DOIF-Bedingung ableiten. Anders gesagt: Das Notify reagiert einfach auf jedes Event, beim dem auf die Zeichenkette "ez.WS.Durchgang_1" die Zeichenkette "press_long" folgt.
Bei DOIF musst man aber konkret angeben, ob nun der Gerätestatus oder ein Reading des Geräts den Trigger liefern sollen.

Mein Verständnis nach Deinen Schilderungen war, dass das Reading press_long bei einem entsprechenden Kontakt auf den Wert press_long <#fortlaufende Nummer> gesetzt wird und diesen Wert solange behält, bis ein erneuter Kontakt erfolgt. Anscheinend ist das aber nicht so oder zumindest kann ich das von Dir beschriebenen Verhalten auf die verschiedenen trigger-Tests nicht nachvollziehen und halte mich deshalb mit weiteren Mutmaßungen zurück.

Aber nochmal der Hinweis: Wenn Du nicht rausbekommst, wann bei diesem Gerät welche Werte wie gesetzt werden, frag doch mal im Homematic-Forum nach, da kann man Dir bei diesem Problem vermutlich besser helfen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 22 August 2014, 15:38:28
Zitat von: RoBra81 am 22 August 2014, 14:29:09
([OG.ez.WS.Durchgang_1:press_long])

wird so nicht funktionieren, dann eher:

([OG.ez.WS.Durchgang_1] =~/long/)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 27 August 2014, 01:45:56
Einen Hinweis und eine Frage hätte ich.
Hinweis:
Wenn ich die Definition define DI_Test DOIF ins Frontend eingebe, kann ich nicht mehr konfigurieren. Ich muss das DOIF löschen und korrekt definieren.

Jetzt die Frage:
Ich habe eine Anwesenheitsprüfung (BinIchDa), die absent und present liefert.
Wenn ich ins Frontend eingebe BinIchDa setstate absent, dann funktioniert das tadellos.
Definiere ich aber folgendes DOIF, geht es nicht.
define DI_Anwesend DOIF ([Schloss] eq "locked" and [BinIchDa] eq "present") (BinIchDa setstate absent)

Die Fehlermeldung lautet:
BinIchDa setstate absent: Unknown command BinIchDa, try help.

Warum geht das so nicht?
Titel: Antw:neues Modul DOIF
Beitrag von: ph1959de am 27 August 2014, 07:13:53
Bist Du sicher, dass Du da wirklich beide male den gleichen Befehl verwendet hast?

Die "offizielle" Syntax lautet doch setstate <devspec> <value> während Du behauptest(?) im WebInterface (damit meinst Du das Befehls-Eingabefeld(?)) würde <devspec> setstate <value> funktionieren?
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 27 August 2014, 08:19:03
Oh, du hast Recht. Ich könnte aber wirklich schwören, dass es gestern Nacht so funktioniert hat. Ich hab auch noch extra mehrmals nachgesehen. Nur die Commandref hatte ich nicht noch einmal befragt, da es ja in meinen Augen funktioniert hatte. Eine Stunde hatte ich rumprobiert. Ich sollte vielleicht so spät nachts nichts mehr machen.
Vielen Dank und sorry.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 August 2014, 10:41:08
Zitat von: Invers am 27 August 2014, 01:45:56
Einen Hinweis und eine Frage hätte ich.
Hinweis:
Wenn ich die Definition define DI_Test DOIF ins Frontend eingebe, kann ich nicht mehr konfigurieren. Ich muss das DOIF löschen und korrekt definieren.

Mit der aktuellen Version ist:
define DI_Test DOIF
durchaus eine sinnvolle Eingabe, wenn man das Modul nur für Statusanzeige nutzen will (siehe dazu Beispiele in der Commandref).

Wenn man im DEF-Editor DOIF ergänzen möchte (was ebenfalls sinnvoll ist), dann muss man mindestens die erste Bedingung mit einem Device oder Zeit angeben, also:

define DI_Test DOIF ([Schloss])

Danach kann man auf den DEF-Button klicken und die Eingaben ergänzen.

Das gilt für die eingecheckte Version.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 27 August 2014, 11:00:26
Verstanden. Danke.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 28 August 2014, 08:13:15
Hallo.
Wollte gestern meine DOIF mit einem Structure-Device ergänzen, klappte auch alles. Aber nach rereadcfg sollte ich erst dieses angelegte DOIF definieren, und es war auch wirklich weg. Erst nach löschen dieses und neu angelegten DOIF klappte es. Was wurde da geändert? Ich will das nicht jetzt bei allen DOIF (ca. 20) auch erleben! Auch weil das ganze nicht sofort als Fehler gemeldet wird, sondern erst bei neustart von FHEM.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 August 2014, 12:35:46
Zitat von: satprofi am 28 August 2014, 08:13:15
Hallo.
Wollte gestern meine DOIF mit einem Structure-Device ergänzen, klappte auch alles. Aber nach rereadcfg sollte ich erst dieses angelegte DOIF definieren, und es war auch wirklich weg. Erst nach löschen dieses und neu angelegten DOIF klappte es. Was wurde da geändert? Ich will das nicht jetzt bei allen DOIF (ca. 20) auch erleben! Auch weil das ganze nicht sofort als Fehler gemeldet wird, sondern erst bei neustart von FHEM.

Du hast bereits mit DOIF-Versionen vor dem Einchecken gearbeitet. Diese waren nicht abwärtskompatibel zueinander. Die Abwärtskompatibilität bleibt erst ab der ersten eingecheckten Version weitgehend gewährleistet.

Das kann für dich im schlimmsten Fall bedeuten, dass du die alten Module löschen und neuanlegen musst (die Syntax ist gleich geblieben). Dessen muss ich jeder bewusst sein, der bereit war mit DOIF-Versionen zu arbeiten, die sich noch im Entwicklungsstadium (vor dem Einchecken) befanden.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 28 August 2014, 14:20:23
aha,danke. heisst das vor jeder änderung erst gelöscht werden sollte und dann neu anlegen. puh, ganz starker tobak.
ich hätte doch kein fhem update machen sollen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 August 2014, 14:37:10
Zitat von: satprofi am 28 August 2014, 14:20:23
aha,danke. heisst das vor jeder änderung erst gelöscht werden sollte und dann neu anlegen. puh, ganz starker tobak.
ich hätte doch kein fhem update machen sollen.

Es reicht normalerweise, wie ich bereits mehrfach geschrieben habe, nach dem Update auf den DEF-Button zu klicken und über modify-Button das Modul ändern (bzw. neu definieren), dann werden alle relevanten readings und internals im Modul gelöscht und neu angelegt.

Beim nächsten Update wird es keine Probleme geben, weil dann die Versionen, die per Update kommen, wie ich schon geschrieben habe, abwärtskompatibel sind.


Du kannst dich immerhin trösten - du warst bei den ersten DOIF-Usern dabei :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 28 August 2014, 15:01:26
Zitat von: Damian am 28 August 2014, 14:37:10
Es reicht normalerweise, wie ich bereits mehrfach geschrieben habe, nach dem Update auf den DEF-Button zu klicken und über modify-Button das Modul ändern (bzw. neu definieren), dann werden alle relevanten readings und internals im Modul gelöscht und neu angelegt.

Du kannst dich immerhin trösten - du warst bei den ersten DOIF-Usern dabei :)

Gruß

Damian

eben, leider nicht. nach modify-button kommt keine fehlermeldung oder dergleichen. auch funktioniert das modul weiterhin. erst bei neustart oder rereadcfg von fhem ist alles ,zuvor modifizierte, weg!

Titel: Antw:neues Modul DOIF
Beitrag von: marvin78 am 28 August 2014, 15:14:34
Hast du nach modify ein save config gemacht?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 August 2014, 15:19:20
Zitat von: satprofi am 28 August 2014, 15:01:26
eben, leider nicht. nach modify-button kommt keine fehlermeldung oder dergleichen. auch funktioniert das modul weiterhin. erst bei neustart oder rereadcfg von fhem ist alles ,zuvor modifizierte, weg!
Also wenn du modify mit dem aktuellen  Modul machst und save config machst, dann muss nach dem Neustart alles funktionieren (woher sollen denn dann noch die alten readings bzw. internals  kommen)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 28 August 2014, 18:29:33
hallo.
leider nicht, gerade wieder getestet. ich habe am sonntag letztes update gemacht, woher weiss ich ob ich aktuelles modul habe?
fakt ist, das nach änderung u. modify nichts passiert. nach save config und rereadcfg ist das doif weg. erst wenn ich es neu anlege ,save und rereadcfg dann ist es da und arbeitet wieder.
egal, ich weiss es jetzt, aber schon blöd wenn man einfach update macht und es dann nach änderung u. evt. neustart weg ist.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 August 2014, 20:10:09
Zitat von: satprofi am 28 August 2014, 18:29:33
woher weiss ich ob ich aktuelles modul habe?

Indem du FHEM-Update machst. Wenn DOIF aktualisiert wurde, dann hast du nicht die aktuelle gehabt. DOIF wurde z. B. gestern von mir marginal geändert - es gibt also heute eine neue Version (sie ist natürlich abwärtskompatibel zu der vorherigen)

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: netbus am 29 August 2014, 09:26:24
Hallo Damian,
ich möchte gerne ein Reading einer Variablen übergeben und das dann verschicken. Geht das auch mit DOIF?
So schaut mein Code aus
define Alarm_Push_ext DOIF ([FensterStatus] eq "open" and [ANLAGE_STATUS] eq "scharf") (set Pushover1 msg 'Externer Alarm' 'Einbrecher ist im Haus und öffnete $fenster_ext' '' 2 'persistent' 30 3600)
Und dieses Reading würde ich gerne einbauen
my $fenster_ext = ReadingsVal("FensterStatus","LastDevice","")
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 29 August 2014, 09:32:30
Zitat von: netbus am 29 August 2014, 09:26:24
Hallo Damian,
ich möchte gerne ein Reading einer Variablen übergeben und das dann verschicken. Geht das auch mit DOIF?
So schaut mein Code aus
define Alarm_Push_ext DOIF ([FensterStatus] eq "open" and [ANLAGE_STATUS] eq "scharf") (set Pushover1 msg 'Externer Alarm' 'Einbrecher ist im Haus und öffnete $fenster_ext' '' 2 'persistent' 30 3600)
Und dieses Reading würde ich gerne einbauen
my $fenster_ext = ReadingsVal("FensterStatus","LastDevice","")
Wozu die Variable? Du kannst das Reading direkt mit [FensterStatus:LastDevice] einfügen, also
define Alarm_Push_ext DOIF ([FensterStatus] eq "open" and [ANLAGE_STATUS] eq "scharf") (set Pushover1 msg 'Externer Alarm' 'Einbrecher ist im Haus und öffnete [FensterStatus:LastDevice]' '' 2 'persistent' 30 3600)
Titel: Antw:neues Modul DOIF
Beitrag von: netbus am 29 August 2014, 09:35:59
Genial das Modul. Danke :D
Titel: Antw:neues Modul DOIF
Beitrag von: frado1 am 31 August 2014, 13:21:03
Hallo Damian,

ich habe gerade versucht in Anlehnung an dein Beispiel
DOIF ([{sunset(0,"17:00","21:00")}-{sunrise_abs()}]) (set Licht on) DOELSE (set Licht off)
einen anderen HORIZON zu verwenden:
([{sunset("HORIZON-3",0,"17:00","21:00")}-{sunrise_abs()}]) (set Tageslicht dunkel) DOELSE (set Tageslicht hell)

Ich bekomme jedoch nur die Fehlermeldung:
t1 DOIF: Wrong timespec {sunset("HORIZON: either HH:MM:SS or {perlcode}: {sunset("HORIZON

Anscheinend interpretiert er das Minus-Zeichen nach HORIZON als "von"-"bis"-Trenner. Im Prinzip funktioniert kein Minus-Zeichen im Perl-Code:
([{sunset("HORIZON",-60,"17:00","21:00")}-{sunrise_abs()}]) (set Tageslicht dunkel) DOELSE (set Tageslicht hell)
ergibt den selben Fehler.

Ich habe auch versucht, den Ausdruck nochmals in runde Klammern zu setzen, ebenfalls kein Erfolg:
([[color=red]([/color]{sunset("HORIZON-3",0,"17:00","21:00")}[color=red])[/color]-{sunrise_abs()}]) (set Tageslicht dunkel) DOELSE (set Tageslicht hell)
ergibt
t1 DOIF: unknown expression format: 00")})-{sunrise_abs()}

Wie mache ich es richtig ?

Danke für die Unterstützung
    Franz


Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 31 August 2014, 14:07:39
Zitat von: frado1 am 31 August 2014, 13:21:03
Wie mache ich es richtig ?

Ich werde es korrigieren, dann brauchst du nichts zu ändern.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: frado1 am 31 August 2014, 15:24:07
Hallo Damian,

ZitatIch werde es korrigieren, dann brauchst du nichts zu ändern.

Super, danke für die schnelle Antwort.

Viele Grüße
   Franz
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 31 August 2014, 19:35:24
Zitat von: frado1 am 31 August 2014, 15:24:07
Hallo Damian,

Super, danke für die schnelle Antwort.

Viele Grüße
   Franz

Problem gelöst. Neue Version ab morgen per Update verfügbar.

Es muss allerdings heißen:

([{sunset("HORIZON=-3",0,"17:00","21:00")}-{sunrise_abs()}]) (set Tageslicht dunkel) DOELSE (set Tageslicht hell)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 September 2014, 09:43:55
Die Dokumentation des Moduls wurde überarbeitet, siehe: http://fhem.de/commandref_DE.html#DOIF

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 September 2014, 12:20:48
Hallo.
Kurze Frage zu ausführen von fhem befehlen. Mailversand über notify klappt, wenn ich selbigen Befehl über DOIF ausführe kommt die mail nicht an.
cdm wird aber ausgeführt. Was ist zu beachten?

[edit]
gelöst.
bei DOIF nur 1x @ , jetzt klappts.
Titel: Antw:neues Modul DOIF
Beitrag von: tagedieb am 02 September 2014, 19:45:37
Hallo
wenn ich die Anleitung richtig interpretiert habe, müsste nachfolgendes DOIF das Ladegerät ein- und auch wieder einschalten?
([FBDECT_22] eq "off") (set FBDECT_22 off) DOELSEIF ([SamsungS2plus:powerLevel]>99) (set FBDECT_22 off) DOELSEIF ([FBDECT_22] eq "on" and [SamsungS2plus:powerLevel]<9) (set FBDECT_22 on)
die ganze "Geschichte" funktioniert jedoch nur, wenn ich ich dieses DOIF ([FBDECT_22] eq "off") (set FBDECT_22 off) DOELSEIF ([SamsungS2plus:powerLevel]<9) (set FBDECT_22 on) DOELSEIF ([FBDECT_22] eq "off" and [SamsungS2plus:powerLevel]>99) (set FBDECT_22 off)
auch aktualisiere   :-\

habe ich da etwas falsch interpretiert?
(wurden nach DOIF Update neu erstellt)

Gruss tagedieb
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 September 2014, 22:18:51
Zitat von: tagedieb am 02 September 2014, 19:45:37
([FBDECT_22] eq "off") (set FBDECT_22 off)


Etwas auf "off" zu schalten, wenn es "off" war, macht irgendwie keinen Sinn.

Unabhängig davon bildest du damit eine Rekursion, weil du durch das Setzen von FBDECT_22 wieder ein Event auslöst, welches du abfragst.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: tagedieb am 03 September 2014, 07:11:34
Guten morgen Damian

Danke für deine Antwort
also heisst das "eq" nicht: "wenn es NICHT an ist" sondern: "wenn es an ist"  ? habe ich das jetzt richtig verstanden?

dann sollte das ja reichen?
([SamsungS2plus:powerLevel]>99) (set FBDECT_22 off) DOELSEIF ([SamsungS2plus:powerLevel]<9) (set FBDECT_22 on)

Gruss Annette
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 September 2014, 07:50:15
Zitat von: tagedieb am 03 September 2014, 07:11:34
Guten morgen Damian
Damian schläft noch.  ;)

Zitat von: tagedieb am 03 September 2014, 07:11:34
also heisst das "eq" nicht: "wenn es NICHT an ist" sondern: "wenn es an ist"  ? habe ich das jetzt richtig verstanden?
eq steht für "EQual", also auf deutsch "gleich". FBDECT_22 eq "off" bedeutet also "wenn der Status von FBDECT gleich off ist".
ne steht für "Not Equal", also auf deutsch "nicht gleich". FBDECT_22 ne "off" bedeutet also "wenn der Status von FBDECT irgendetwas anderes als off ist".

Zitat von: tagedieb am 03 September 2014, 07:11:34
dann sollte das ja reichen?
([SamsungS2plus:powerLevel]>99) (set FBDECT_22 off) DOELSEIF ([SamsungS2plus:powerLevel]<9) (set FBDECT_22 on)
Das kommt darauf an, was Du damit erreichen willst. Ich nehme an, Du wilst eine Steckdose mit dem Ladegerät für das Samsung ein und ausschalten, so dass das Samsung bei Bedarf geladen wird? Dann sollte das reichen.

Es sei an dieser Stelle aber der Hinweis erlaubt, dass ein voll laden auf 100% für die Lebendauer des Akkus suboptimal ist. Idealerweise sollte ein moderne Lion-Akku zwischen 10% und 80% Ladung betrieben werden. Jedes Extrem, also voll laden auf 100% oder auch vollständige Entladung verkürzen die Lebensdauer des Akkus. Das aber nur nebenbei, hat ja mit DOIF nicht wirklich was zu tun.  :)
Titel: Antw:neues Modul DOIF
Beitrag von: tagedieb am 03 September 2014, 08:01:37
Guten morgen Brockmann

Damian schläft noch.  ;)
dann sind wir mal gaaanz leise  ;)

Danke für die tollen Erklärungen - das macht nicht nur mir einiges leichter, sondern auch der FHEM.cfg  :-[
und auch mit dem Sinn meines Doifs liegst du richtig -
da werde ich mal die Sollwerte ändern, denn die leistung das Akku`s muss man ja nicht mutwillig herabsetzten 

Ich wünsche allen einen schönen tag
Gruss Annette

Titel: Antw:neues Modul DOIF
Beitrag von: juppzupp am 03 September 2014, 10:16:53
Guten Morgen,

eine Frage zum DOIF.
In der Beschreibung steht "Ein wichtiges Unterscheidungsmerkmal von DOIF zu notify oder at ist die Zustandsverwaltung. Im Modul wird das zuletzt ausgeführt Kommando festgehalten und ein wiederholtes Ausführen desselben Kommandos unterbunden."

Wenn ich nun folgenden notify durch DOIF ersetzen würde
.*:[Bb]attery.* { if("%" !~ m/ok/) {DebianMail('jupp@@zupp.net','FHEM Batteriewarnung','@ %')} }

frage ich mich wie die Zustandsverwaltung funktioniert. Würde die pro Device oder "nur" pro DOIF stattfinden ?

Folgendes Szenario :
Sensor 1 meldet "Battery low" -> email wird geschickt
Sensor 1 meldet "Battery low" -> email wird nicht mehr geschickt, da keine Zustandsänderung
Sensor 2 meldet "Battery low" -> email wird ?


Danke !


Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 September 2014, 10:26:10
Zitat von: juppzupp am 03 September 2014, 10:16:53
Wenn ich nun folgenden notify durch DOIF ersetzen würde
.*:[Bb]attery.* { if("%" !~ m/ok/) {DebianMail('jupp@@zupp.net','FHEM Batteriewarnung','@ %')} }

frage ich mich wie die Zustandsverwaltung funktioniert. Würde die pro Device oder "nur" pro DOIF stattfinden ?

Folgendes Szenario :
Sensor 1 meldet "Battery low" -> email wird geschickt
Sensor 1 meldet "Battery low" -> email wird nicht mehr geschickt, da keine Zustandsänderung
Sensor 2 meldet "Battery low" -> email wird ?

Ich denke, für diesen Zweck solltest Du es lieber beim notify belassen. Bei DOIF kannst Du keine universelle RegEx verwenden, sondern müsstest die Bedingung an konkrete Geräte und Readings knüpfen. Also beispielsweise
define DI_Battery DOIF ([Sensor1:Battery] eq "low")(send mail) DOELSEIF ([Sensor2:Battery] eq "low")(send mail) DOELSEIF ([Sensor3:Battery] eq "low")(send mail)... usw.


Da scheint mir ein notify universeller zu sein.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 September 2014, 16:23:38
Zitat von: tagedieb am 03 September 2014, 08:01:37
Damian schläft noch.  ;)
dann sind wir mal gaaanz leise  ;)
Das braucht ihr nicht. Ich habe zwar geschlafen, aber in Vollnarkose!
Nun bin ich wieder wach und lebe noch  :)
Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 September 2014, 17:51:36
Zitat von: Damian am 03 September 2014, 16:23:38
Das braucht ihr nicht. Ich habe zwar geschlafen, aber in Vollnarkose!
Nun bin ich wieder wach und lebe noch  :)
Dann wünsche ich gute Erholung und schnelle Genesung!
Titel: Antw:neues Modul DOIF
Beitrag von: tagedieb am 03 September 2014, 18:01:23
na dann....
schone dich aber auch!!!
Gute Genesung
Titel: Antw:neues Modul DOIF
Beitrag von: bamm-bamm am 03 September 2014, 20:12:30
Ich habe einen Raspberry mit PiFace. Über eins von den beiden Relais habe ich einen 5V Lüfter Laufen. Lässt sich über das PiFace Modul auch gut ein-ausschalten.
Die Temperatur lasse ich mit über
define Raspberry weblink htmlCode {ShowRpiValues()}
attr Raspberry room RPi
anzeigen. Meine Frage:
Kann ich über z.B. DOIF regeln, daß ab einer bestimmten CPU-Temperatur das Relais einschaltet (Piface 1 auf 1) und bei einer anderenm wieder ausschaltet (Piface 1 auf 0)?
Das Schalten des Relais würde ich wohl hinbekommen denke ich, aber wie (bzw. woher) kann ich die Temperatur auslesen und dann einbinden?

Würde mich über Tips freuen....
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 04 September 2014, 07:44:41
Zitat von: bamm-bamm am 03 September 2014, 20:12:30
Kann ich über z.B. DOIF regeln, daß ab einer bestimmten CPU-Temperatur das Relais einschaltet (Piface 1 auf 1) und bei einer anderenm wieder ausschaltet (Piface 1 auf 0)?
Das Schalten des Relais würde ich wohl hinbekommen denke ich, aber wie (bzw. woher) kann ich die Temperatur auslesen und dann einbinden?
Jein. Du könntest zwar im DOIF über die Funktion RpiTemp("") auf die Temperatur zugreifen und Vergleichen. Aber da das eine Funktion und kein Gerät ist, würde dieses Bedingung das DOIF niemals auslösen. (Die Funktion erzeugt keine regelmäßigen Events, sondern antwortet eben nur, wenn Sie gefragt wird.)
Du könntest aber die Temperatur regelmäßig in einen Dummy schreiben (ich zitiere mal aus dem Wiki (http://www.fhemwiki.de/wiki/Raspberry_Pi:_99_RPiutils.pm)):
define <name_at> at +*00:05 { fhem("set <name> ".RpiTemp("")) }
Das schreibt alle fünf Minuten die aktuelle Temperatur in <name>. Diesen Dummy könntest Du dann wiederum im DOIF als Bedingung einsetzen, also
DOIF ([<name>] > 55)(set Luefter an) DOELSE (set Luefter off)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 September 2014, 10:36:49
Zitat von: Brockmann am 04 September 2014, 07:44:41
Jein. Du könntest zwar im DOIF über die Funktion RpiTemp("") auf die Temperatur zugreifen und Vergleichen. Aber da das eine Funktion und kein Gerät ist, würde dieses Bedingung das DOIF niemals auslösen. (Die Funktion erzeugt keine regelmäßigen Events, sondern antwortet eben nur, wenn Sie gefragt wird.)
Du könntest aber die Temperatur regelmäßig in einen Dummy schreiben (ich zitiere mal aus dem Wiki (http://www.fhemwiki.de/wiki/Raspberry_Pi:_99_RPiutils.pm)):
define <name_at> at +*00:05 { fhem("set <name> ".RpiTemp("")) }
Das schreibt alle fünf Minuten die aktuelle Temperatur in <name>. Diesen Dummy könntest Du dann wiederum im DOIF als Bedingung einsetzen, also
DOIF ([<name>] > 55)(set Luefter an) DOELSE (set Luefter off)
Vieleicht baue ich irgendwann mal die bereits am Anfang geplante Selbsttriggerung noch ein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: bamm-bamm am 06 September 2014, 12:04:35
Danke für die Info. Leider klappt das bei mir nicht. Es erfolgt kein Schalten. Hier mal der Auszug aus der CFG:

define Rasptemp dummy
attr Rasptemp room RPi
define Rasptemp_log FileLog ./log/Rasptemp-%Y-%m.log Rasptemp
attr Rasptemp_log room RPi
define Rasptemp_at at +*00:05 { fhem("set Rasptemp ".RpiTemp("")) }
define Raspberry_Luefter DOIF ([Rasptemp]>51)(set piface 1 1) DOELSE (set piface 1 0)

Hab ich da irgendwo nen Denkfehler?;)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 September 2014, 15:16:17
Zitat von: bamm-bamm am 06 September 2014, 12:04:35
Danke für die Info. Leider klappt das bei mir nicht. Es erfolgt kein Schalten. Hier mal der Auszug aus der CFG:

define Rasptemp dummy
attr Rasptemp room RPi
define Rasptemp_log FileLog ./log/Rasptemp-%Y-%m.log Rasptemp
attr Rasptemp_log room RPi
define Rasptemp_at at +*00:05 { fhem("set Rasptemp ".RpiTemp("")) }
define Raspberry_Luefter DOIF ([Rasptemp]>51)(set piface 1 1) DOELSE (set piface 1 0)

Hab ich da irgendwo nen Denkfehler?;)
Poste hier Ausgabe von 'list Raspberry_Luefter'

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: bamm-bamm am 07 September 2014, 15:42:00
---schnipp----

Internals:
   CFGFN
   DEF        ([Rasptemp]>51)(set piface 1 1) DOELSE (set piface 1 0)
   NAME       Raspberry_Luefter
   NR         215
   NTFY_ORDER 50-Raspberry_Luefter
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-09-07 15:38:15   cmd_event       Rasptemp
     2014-09-07 15:38:15   cmd_nr          2
     2014-09-07 15:38:15   e_Rasptemp_STATE T: 53.53
     2014-09-07 15:38:15   state           cmd_2
   Condition:
     0          InternalDoIf('Rasptemp','STATE','')>51
   Devices:
     0           Rasptemp
     all         Rasptemp
   Do:
     0          set piface 1 1
     1          set piface 1 0
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Rasptemp:STATE
     all         Rasptemp:STATE
   Readings:
   State:
Attributes:

----schnapp----

Da wohl T: xx.xx ausgelesen wird, hatte ich in DOIF schon mit Parameter":d"  und als Grenzwert 51.00 probiert. Beides jedoch ohne Erfolg.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 September 2014, 15:54:11
Zitat von: bamm-bamm am 07 September 2014, 15:42:00
---schnipp----

Internals:
   CFGFN
   DEF        ([Rasptemp]>51)(set piface 1 1) DOELSE (set piface 1 0)
   NAME       Raspberry_Luefter
   NR         215
   NTFY_ORDER 50-Raspberry_Luefter
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-09-07 15:38:15   cmd_event       Rasptemp
     2014-09-07 15:38:15   cmd_nr          2
     2014-09-07 15:38:15   e_Rasptemp_STATE T: 53.53
     2014-09-07 15:38:15   state           cmd_2
   Condition:
     0          InternalDoIf('Rasptemp','STATE','')>51
   Devices:
     0           Rasptemp
     all         Rasptemp
   Do:
     0          set piface 1 1
     1          set piface 1 0
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Rasptemp:STATE
     all         Rasptemp:STATE
   Readings:
   State:
Attributes:

----schnapp----

Da wohl T: xx.xx ausgelesen wird, hatte ich in DOIF schon mit Parameter":d"  und als Grenzwert 51.00 probiert. Beides jedoch ohne Erfolg.
Es wurde das zweite Kommando ausgeführt. Jetzt muss du im Log schauen, warum um 15:38:15 set piface 1 0 nicht erfolgreich war.
Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 September 2014, 18:32:21
Ich plane folgende Erweiterungen des Moduls:

1) Regelmäßige Triggerung [+HH:MM] oder [+HH:MM:SS] oder [+{perl-func}]

Die Angaben sind natürlich wie Zeiten beliebig mit anderen Operatoren kombinierbar:

DOIF ([+00:05] and fhem("get modul reading")>100) (set ...)

Bedeutung: alle 5 Minuten wird reading ausgewertet, dessen Modul keine Ereignisse erzeugt

2) Wiederholung alle X-Sekunden zulassen

Beispiel für Benachrichtigung:

define di_hohe_feuchtigkeit DOIF ([bad:humidity]>70) (set tablet ttsSay Bitte im Badezimmer lüften.)
attr di_hohe_feuchtigkeit wait 300
attr di_hohe_feuchtigkeit do 600

Bedeutung: 10 Minuten (600 Sekunden) nach der Benachrichtigung wird das letzte Kommando zurückgesetzt. Damit wird eine erneute Benachrichtigung nach dieser Zeitspanne, falls ein Ereignis kommt und die Bedingung noch zutrifft, wiederholt.

Alternativ kann auch die Anzahl der Wiederholungen begrenzt werden:

attr di_hohe_feuchtigkeit do 3x600

Hiermit wird das Zurücksetzen bis zu drei mal wiederholt.

Die Angaben können für jeden DO-Fall mit Doppelpunkt, wie beim wait-Attribut, angegeben werden werden:

attr di_benachrichtigung do 3x600:0

Bei Anregungen zu diesen Erweiterungen, bitte hier posten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 September 2014, 08:47:28
Diese Erweiterungen für DOIF hören sich sehr gut an.

Zitat von: Damian am 07 September 2014, 18:32:21
Die Angaben können für jeden DO-Fall mit Doppelpunkt, wie beim wait-Attribut, angegeben werden werden:
attr di_benachrichtigung do 3x600:0
Was vielleicht noch eine sinnvolle Ergänzung wäre (und mit den geplanten Erweiterungen so noch nicht möglich wäre, oder?): Eine "globale" DO-Vorgabe, in welchem zeitlichen Abstand das DOIF ausgeführt werden soll, unabhängig davon, durch welchen DO-Fall es getriggert wurde.

Praxisbeispiel: Ich habe ein DOIF, das Wetterdaten an ein Tablet zur Darstellung in einem Widget übermittelt. Das DOIF wird verschieden getriggert (Wettersensor innen, Wettersensor außen), soll das Widget aber höchstens alle 30 Minuten aktualisieren. Jetzt könnte ich zwar beide DO-Fälle mit do 1800:1800 begrenzen, aber wenn die Sensoren immer schön abwechselnd melden, würden diese Vorgaben quasi ignoriert, oder?
Da würde ich mir sowas wie do @1800 wünschen, was das DOIF insgesamt quasi für 30 Minuten disabled und dann wieder enabled.

Wie immer nur als Anregung gedacht...  :)
Titel: Antw:neues Modul DOIF
Beitrag von: bamm-bamm am 08 September 2014, 09:33:54
Leider hatte ich mein Log da noch zu klein (verbose). Ist jetzt behoben. Aber "cmd_2" wäre auch falsch, da bei Temperatur über 51 cmd_1 hätte ausgeführt werden müssen. Also doch eher ein Problem beim Auslesen des Temperaturwertes?

aktuell:

Internals:
   CFGFN
   DEF        ([Rasptemp]>51)(set piface 1 1) DOELSE (set piface 1 0)
   NAME       Raspberry_Luefter
   NR         215
   NTFY_ORDER 50-Raspberry_Luefter
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-09-08 09:27:39   cmd_event       Rasptemp
     2014-09-08 09:27:39   cmd_nr          2
     2014-09-08 09:27:39   e_Rasptemp_STATE T: 53.00
     2014-09-08 09:27:39   state           cmd_2
   Condition:
     0          InternalDoIf('Rasptemp','STATE','')>51
   Devices:
     0           Rasptemp
     all         Rasptemp
   Do:
     0          set piface 1 1
     1          set piface 1 0
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Rasptemp:STATE
     all         Rasptemp:STATE
   Readings:
   State:
Attributes:

------

2014.09.08 09:27:38 5: HMLAN_Parse: HMLAN1 V:03C4 sNo:LEQ0101928 d:26EE12 O:26EC0A t:133300C3 IDcnt:0008
2014.09.08 09:27:39 5: exec at command Rasptemp_at
2014.09.08 09:27:39 5: Cmd: >{ fhem("set Rasptemp ".RpiTemp("")) }<
2014.09.08 09:27:39 5: Cmd: >set Rasptemp T: 53.00<
2014.09.08 09:27:39 4: dummy set Rasptemp T: 53.00
2014.09.08 09:27:39 5: Triggering Rasptemp (1 changes)
2014.09.08 09:27:39 5: Notify loop for Rasptemp T: 53.00
2014.09.08 09:27:39 5: Cmd: >set piface 1 0<
2014.09.08 09:27:39 3: PIFACE piface set port 1 0
2014.09.08 09:27:39 5: Triggering piface (1 changes)
2014.09.08 09:27:39 5: Notify loop for piface out1: 0
2014.09.08 09:27:39 4: eventTypes: PIFACE piface out1: 0 -> out1: .*
2014.09.08 09:27:39 5: Triggering Raspberry_Luefter (3 changes)
2014.09.08 09:27:39 5: Notify loop for Raspberry_Luefter cmd_nr: 2
2014.09.08 09:27:39 4: eventTypes: DOIF Raspberry_Luefter cmd_nr: 2 -> cmd_nr: .*
2014.09.08 09:27:39 4: eventTypes: DOIF Raspberry_Luefter cmd_event: Rasptemp -> cmd_event: Rasptemp
2014.09.08 09:27:39 4: eventTypes: DOIF Raspberry_Luefter cmd_2 -> cmd_2
2014.09.08 09:27:39 4: eventTypes: DOIF Raspberry_Luefter state: cmd_2 -> state: cmd_2
2014.09.08 09:27:39 4: eventTypes: dummy Rasptemp T: 53.00 -> T: .*
2014.09.08 09:27:39 4: eventTypes: dummy Rasptemp state: T: 53.00 -> state: T: .*
2014.09.08 09:27:39 5: redefine at command Rasptemp_at as +*00:05 { fhem("set Rasptemp ".RpiTemp("")) }
2014.09.08 09:27:47 5: HMLAN/RAW: /E286BA8,0000,1333248A,FF,FF97,E8865A286BA8000000A0BA41

Gruß,
Andreas

Zitat von: Damian am 07 September 2014, 15:54:11
Es wurde das zweite Kommando ausgeführt. Jetzt muss du im Log schauen, warum um 15:38:15 set piface 1 0 nicht erfolgreich war.
Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 September 2014, 09:41:48
Zitat von: bamm-bamm am 08 September 2014, 09:33:54
Leider hatte ich mein Log da noch zu klein (verbose). Ist jetzt behoben. Aber "cmd_2" wäre auch falsch, da bei Temperatur über 51 cmd_1 hätte ausgeführt werden müssen. Also doch eher ein Problem beim Auslesen des Temperaturwertes?

   DEF        ([Rasptemp]>51)(set piface 1 1) DOELSE (set piface 1 0)

Versuch doch mal  ([Rasptemp:state:d]>51)
Damit werden nur die Zahlen ausgewertet und "T:" ignoriert.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 September 2014, 10:43:35
Zitat von: Brockmann am 08 September 2014, 08:47:28
Diese Erweiterungen für DOIF hören sich sehr gut an.
Was vielleicht noch eine sinnvolle Ergänzung wäre (und mit den geplanten Erweiterungen so noch nicht möglich wäre, oder?): Eine "globale" DO-Vorgabe, in welchem zeitlichen Abstand das DOIF ausgeführt werden soll, unabhängig davon, durch welchen DO-Fall es getriggert wurde.

Praxisbeispiel: Ich habe ein DOIF, das Wetterdaten an ein Tablet zur Darstellung in einem Widget übermittelt. Das DOIF wird verschieden getriggert (Wettersensor innen, Wettersensor außen), soll das Widget aber höchstens alle 30 Minuten aktualisieren. Jetzt könnte ich zwar beide DO-Fälle mit do 1800:1800 begrenzen, aber wenn die Sensoren immer schön abwechselnd melden, würden diese Vorgaben quasi ignoriert, oder?
Da würde ich mir sowas wie do @1800 wünschen, was das DOIF insgesamt quasi für 30 Minuten disabled und dann wieder enabled.

Wie immer nur als Anregung gedacht...  :)

Auch bei 1800:1800 reagiert das Modul. Es ist also zu keinem Zeitpunkt disabled, sondern unterbindet nur Wiederholung derselben Bedingung für die angegebene Zeitdauer. Ein Zustandswechsel führt also, wie bisher, zur sofortigen Ausführung des entsprechenden (anderen) Kommandos, wenn kein wait-Attribut gesetzt ist.

Edit: Ich sehe gerade du wolltest das Gegenteil haben, lässt sich sicherlich auch einbauen.

Gruß

Damian







Titel: Antw:neues Modul DOIF
Beitrag von: bamm-bamm am 08 September 2014, 10:47:42
Super  - danke schön ;)
Irgendwie hatte ich die Wiki wohl falsch verstanden und es nur mit "Rasptemp:d", also ohne "state" probiert.
Scheinbar stören auch die Nachkommastellen nicht *puu*, nach halbstündiger Beobachtung scheint der Wechsel zu klappen.

Ich hätte zwar auch einen temperaturgesteuerten Lüfter einbauen können, aber der Raspberry/Piface sollen schliesslich selbst mal was tun für den teuren Strom *gg*


Zitat von: Brockmann am 08 September 2014, 09:41:48
Versuch doch mal  ([Rasptemp:state:d]>51)
Damit werden nur die Zahlen ausgewertet und "T:" ignoriert.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 September 2014, 10:53:55
Zitat von: bamm-bamm am 08 September 2014, 10:47:42
Super  - danke schön ;)
Irgendwie hatte ich die Wiki wohl falsch verstanden und es nur mit "Rasptemp:d", also ohne "state" probiert.
Scheinbar stören auch die Nachkommastellen nicht *puu*, nach halbstündiger Beobachtung scheint der Wechsel zu klappen.

Ich hätte zwar auch einen temperaturgesteuerten Lüfter einbauen können, aber der Raspberry/Piface sollen schliesslich selbst mal was tun für den teuren Strom *gg*

Wenn man tatsächlich den Status filtern wollte, weil es z. B. keinen Reading "state" gäbe, dann könnte man das mit [Rasptemp:&STATE:d] erreichen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 11 September 2014, 09:24:46
Da ich mein folgendes Problem gerne mit DOIF lösen würde, poste ich mal hier. Sollte das nicht ok sein, ziehe ich gerne zu HM um.
Ich möchte meine Küchenbeleuchtung mit dem DOIF Beispiel aus der Commandref nutzen und hab das mal nachgebaut:
define switch_d dummy
define di_switch DOIF ([BM_Kueche] eq "motion" and  [BM_Kueche:brightness:d] <50) (set switch_d on, set switch_d off)
attr di_switch do always
define di_light DOIF ([switch_d] eq "on") (set LED_Kueche on,set MyTTS tts An.) DOELSE (set LED_Kueche off,set MyTTS tts Aus.)
attr di_light wait 0:240

Leider funktioniert es nicht wie erwartet.

Zuerst stellte ich fest, dass motion vom Bewegungsmelder auch gemeldet wurde, wenn irgendein anderer Wert sich änderte.
Das konnte ich umgehen, indem ich beim BM
attr BM_Kueche event-on-update-reading state
gesetzt habe.
Das hat nun leider den Nachteil, dass auch nichts anderes mehr im Log erscheint. Gerne würde ich wieder die Helligkeitswerte loggen, aber das löst leider dann auch motion aus.

Leider funktioniert es trotzdem noch nicht, wie erwartet. Das Licht geht zwar brav immer bei Bewegung an, aber leider geht es immer wieder mal aus, auch dann, wenn Bewegung stattfindet.
Es hat den Anschein, als wenn eine fortlaufende Bewegung nicht registriert wird, sondern nur, wenn eine Unterbrechung stattfindet, also wenn jemand kurzzeitig den Raum verlässt und wieder rein kommt.

Kennt jemand eine Möglichkeit, die Bewegung mit einem DOIF so abzufragen, dass das Licht so lange an bleibt, bis 240 Sekunden keine Bewegung stattgefunden hat?

Das könnte man wahrscheinlich mit motioncount lösen, aber ich bekomme das nicht in das DOIF rein.

Danke im Voraus.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 September 2014, 09:52:48
Zitat von: Invers am 11 September 2014, 09:24:46
Da ich mein folgendes Problem gerne mit DOIF lösen würde, poste ich mal hier. Sollte das nicht ok sein, ziehe ich gerne zu HM um.
Ich möchte meine Küchenbeleuchtung mit dem DOIF Beispiel aus der Commandref nutzen und hab das mal nachgebaut:
define switch_d dummy
define di_switch DOIF ([BM_Kueche] eq "motion" and  [BM_Kueche:brightness:d] <50) (set switch_d on, set switch_d off)
attr di_switch do always
define di_light DOIF ([switch_d] eq "on") (set LED_Kueche on,set MyTTS tts An.) DOELSE (set LED_Kueche off,set MyTTS tts Aus.)
attr di_light wait 0:240

Leider funktioniert es nicht wie erwartet.

Zuerst stellte ich fest, dass motion vom Bewegungsmelder auch gemeldet wurde, wenn irgendein anderer Wert sich änderte.
Das konnte ich umgehen, indem ich beim BM
attr BM_Kueche event-on-update-reading state
gesetzt habe.
Das hat nun leider den Nachteil, dass auch nichts anderes mehr im Log erscheint. Gerne würde ich wieder die Helligkeitswerte loggen, aber das löst leider dann auch motion aus.

Leider funktioniert es trotzdem noch nicht, wie erwartet. Das Licht geht zwar brav immer bei Bewegung an, aber leider geht es immer wieder mal aus, auch dann, wenn Bewegung stattfindet.
Es hat den Anschein, als wenn eine fortlaufende Bewegung nicht registriert wird, sondern nur, wenn eine Unterbrechung stattfindet, also wenn jemand kurzzeitig den Raum verlässt und wieder rein kommt.

Kennt jemand eine Möglichkeit, die Bewegung mit einem DOIF so abzufragen, dass das Licht so lange an bleibt, bis 240 Sekunden keine Bewegung stattgefunden hat?

Das könnte man wahrscheinlich mit motioncount lösen, aber ich bekomme das nicht in das DOIF rein.

Danke im Voraus.

Ich habe diesen Bewegungsmelder nicht. Du musst erstmal ein eindeutiges Kriterium nur für Bewegung bei dem Sender herausfinden.

Wenn zyklisch Helligkeitswert ohne Bewegung gesendet wird, dann solltest du die Abfrage aus der Bedingung herausnehmen, damit DOIF die Helligkeitsveränderung nicht als Trigger ansieht:

define di_switch DOIF ([BM_Kueche] eq "motion") (IF ([BM_Kueche:brightness:d] <50) (set switch_d on, set switch_d off))


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 11 September 2014, 10:06:26
Vielen Dank. Ich werde das ausprobieren.
Titel: Antw:neues Modul DOIF
Beitrag von: Otto am 11 September 2014, 20:24:22
Hallo,
ein tolles Modul!

Ich habe meine Rollos umgestellt, aber auch sehr viele Bedingungen vor:

der einfache code ist der:
define di_Rollo_WZ_mitte DOIF ([Bewegungsmelder1:brightness]>110 and [07:00-07:45|12345] or [08:30|7]) (set Rollo_WZ_mitte:FILTER=level!=100 on) DOELSEIF ([Bewegungsmelder1:brightness]<65 and [17:00-22:00]|01234) (set Rollo_WZ_mitte:FILTER=level!=0 off) DOELSEIF ([Bewegungsmelder1:brightness]<65 and [20:00-22:30]|56) (set Rollo_WZ_mitte:FILTER=level!=0 off)

Jetzt sollen noch für Sommer und Winter unterschiedliche Zeiten gelten und brightness auch für den Teil or [08:30|7]

Sollte man das alles in eine DOIF oder aufteilen in mehrere

Gruß Otto
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 September 2014, 20:35:50
Zitat von: Otto am 11 September 2014, 20:24:22
Hallo,
ein tolles Modul!

Ich habe meine Rollos umgestellt, aber auch sehr viele Bedingungen vor:

der einfache code ist der:
define di_Rollo_WZ_mitte DOIF ([Bewegungsmelder1:brightness]>110 and [07:00-07:45|12345] or [08:30|7]) (set Rollo_WZ_mitte:FILTER=level!=100 on) DOELSEIF ([Bewegungsmelder1:brightness]<65 and [17:00-22:00]|01234) (set Rollo_WZ_mitte:FILTER=level!=0 off) DOELSEIF ([Bewegungsmelder1:brightness]<65 and [20:00-22:30]|56) (set Rollo_WZ_mitte:FILTER=level!=0 off)

Jetzt sollen noch für Sommer und Winter unterschiedliche Zeiten gelten und brightness auch für den Teil or [08:30|7]

Sollte man das alles in eine DOIF oder aufteilen in mehrere

Gruß Otto

Um unnötiges Schalten zu Vermeiden, sollte alles in ein Modul und dann nach Möglichkeit nur ein on- und ein off-Kommando.

so sieht z. B. meine Definition aus:

([Helligkeit] eq "on" and [06:25-08:00|8]) or [09:00|7])
  ((set R_W_S,R_W_W[1-3] on))
DOELSEIF ([Helligkeit] eq "off")
  ((set R_W_S,R_W_W[1-3] off))


Wenn du sehr unterschiedliche Definitionen für Winter bzw. Sommer haben möchtest, dann kannst du auch zwei Module definieren und je nach Jahreszeit mit disable zwischen beiden switchen oder ein Sommer/Winter-Flag mit abfragen. Aber das muss jeder für sich entscheiden.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 16 September 2014, 16:52:42
Hallo zusammen,


ich hätte da mal eine Frage zum DOIF.
Und zwar steuere ich meine Rollos anhand des Ertrags meiner Photovoltaikanlage. Ich glaube das habe ich hier schon mal geschrieben :)

Heute sagte man mir, dass der Rollo ein wenig verrückt gespielt hat.

Zum Status:

Folgendes DOIF habe ich definiert um einen Rollo an der Terrasse zu steuern:

Internals:
   CFGFN
   DEF        ([mySL:Pac_avg] >= 2100) (set EG_wz_RO_TerrasseRechts 0) DOELSEIF ([mySL:Pac_avg] >= 1501) (set EG_wz_RO_TerrasseRechts 30) DOELSE (set EG_wz_RO_TerrasseRechts 100)
   NAME       di_CheckSonneRechts
   NR         145
   NTFY_ORDER 50-di_CheckSonneRechts
   STATE      cmd_3
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Mydblog:
           TIME       1410874307.33259
           VALUE      mySL
       Cmd_nr:
         Mydblog:
           TIME       1410874307.33259
           VALUE      3
       State:
         Mydblog:
           TIME       1410874307.33259
           VALUE      cmd_3
   Readings:
     2014-09-16 15:31:47   cmd_event       mySL
     2014-09-16 15:31:47   cmd_nr          3
     2014-09-16 16:46:50   e_mySL_Pac_avg  1191
     2014-09-16 15:31:47   state           cmd_3
     2014-09-16 09:44:31   wait_timer      no timer
   Condition:
     0          ReadingValDoIf('mySL','Pac_avg','') >= 2100
     1          ReadingValDoIf('mySL','Pac_avg','') >= 1501
   Devices:
     0           mySL
     1           mySL
     all         mySL
   Do:
     0          set EG_wz_RO_TerrasseRechts 0
     1          set EG_wz_RO_TerrasseRechts 30
     2          set EG_wz_RO_TerrasseRechts 100
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
   Readings:
     0           mySL:Pac_avg
     1           mySL:Pac_avg
     all         mySL:Pac_avg
   State:
Attributes:
   group      doif
   verbose    5
   wait       900

   
Mit dem wait 900 wollte ich vermeiden, dass der Rollo Achterbahn fährt, sofern der Ertrag der PV Anlage meinen Schwellwert erreicht hat und dort drüber oder drunter rutscht.

Aber irgendwie scheint das mMn heute so gegen 15:30 nicht funktioniert zu haben.
Das grüne ist die Stellung des Rollos. Die rosa Linien sind die Schwellwerte, wo der Rollo entsprechend runter oder hoch gehen soll.

Hat dazu jemand eine Idee, warum der Rollo da um 15:30 so oft hoch und runter gegangen ist?

Eigentlich hätte ich erwartet, dass der um 15:28 hoch fährt, weil Pac_avg unter den Schwellwert gerutscht ist. Dann sollte erst mal dank wait 900 15 Minuten Ruhe sein. Stattdessen geht der um 15:30 wieder runter um dann um 15:33 wieder hoch zu fahren.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 16 September 2014, 17:08:01
Zitat von: maxritti am 16 September 2014, 16:52:42
Hat dazu jemand eine Idee, warum der Rollo da um 15:30 so oft hoch und runter gegangen ist?
Eigentlich hätte ich erwartet, dass der um 15:28 hoch fährt, weil Pac_avg unter den Schwellwert gerutscht ist. Dann sollte erst mal dank wait 900 15 Minuten Ruhe sein. Stattdessen geht der um 15:30 wieder runter um dann um 15:33 wieder hoch zu fahren.
Gegen 15:30 hat der Wert um 1500 oszilliert, also war mal Bedingung 2 und mal Bedingung 3 erfüllt.
Das wait-Attribut hast Du aber nur für Bedingung 1 gesetzt. Wenn das bei allen drei Bedingungen nur verzögert reagieren soll, müsste das
attr <...> wait 900:900:900
lauten.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 16 September 2014, 17:16:44
Cool, das geht ja mal wieder schneller hier als die Polizei erlaubt :)
Das erklärt natürlich einiges. Ich werde es direkt mal umstellen.

Danke Dir.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 17 September 2014, 12:00:37
Ich noch mal. Ich kann zwar gerade das Problem von gestern nicht prüfen, da die Sonne momentan dauerhaft scheint.
Aber mir ist gerade noch was anderes aufgefallen.

Irgendwie habe ich den Eindruck, dass das wait 900:900:900 die Schaltvorgänge um 15 Minuten verzögert.
So sollte es ja nicht sein. Es sollte so sein, wenn Pac_avg einen Wert X überschritten hat, den Rollo auf Wert Y zu setzen.
Und dann erst mal 15 Minuten nichts zu machen, egal was mit Pac_avg passiert.

So um 10:47 hat Pac_avg den Wert 1500 erreicht, aber der Rollo geht erst um 11:02 runter.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 September 2014, 12:08:59
Zitat von: maxritti am 17 September 2014, 12:00:37
Irgendwie habe ich den Eindruck, dass das wait 900:900:900 die Schaltvorgänge um 15 Minuten verzögert.
Ja, exakt das macht das wait-Attribut. Es wartet beim Eintreten einer Bedingung, ob diese über einen Zeitraum x unverändert wahr bleibt und führt erst dann die Aktion aus. So ist das wait-Attribut (derzeit) definiert. Damian hat aber schon angedeutet, das wait-Attribut in der nächsten Version zu erweitern, so dass auch das möglich sein sollte, was Du meinst, also Aktion sofort ausführen, aber dann erstmal x Sekunden nichts mehr tun.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 September 2014, 16:46:28
Zitat von: Brockmann am 17 September 2014, 12:08:59
Ja, exakt das macht das wait-Attribut. Es wartet beim Eintreten einer Bedingung, ob diese über einen Zeitraum x unverändert wahr bleibt und führt erst dann die Aktion aus. So ist das wait-Attribut (derzeit) definiert. Damian hat aber schon angedeutet, das wait-Attribut in der nächsten Version zu erweitern, so dass auch das möglich sein sollte, was Du meinst, also Aktion sofort ausführen, aber dann erstmal x Sekunden nichts mehr tun.

Es werden sich im Laufe der Zeit sicherlich noch einige Erweiterungen für das DOIF-Modul ergeben. Man kann aber jetzt schon für das Herunterfahren wait auf 0 Minuten und für das Hochfahren auf z. B. auf 30 Minuten stellen. Allerdings hat sich gerade bei der Beschattung bei mir auch das Abwarten vor dem ersten Schalten bewährt. Denn, wenn die Sonne alle 14 Minuten für ein Paar Minuten den Zustand wechselt, dann bewegt sich bei mir gar nichts - was ich gut finde.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 17 September 2014, 17:15:39
Irgendwie drehe ich mich gerade ein wenig im Kreis.

Vom Prinzip klappt das mit dem wait und dem verzögertem Schalten nach Werteänderung ja ganz gut.
Ich habe zur Terrasse ein Fenster, wo das ganz gut klappt.
Nun gibt es aber noch eine Terassentür wo ein Türkontakt dran. D.h., der Rollo soll sich nur bewegen, wenn die Türe zu ist.
Angenommen der Rollo an der Tür ist wegen hoher Sonne ganz zugefahren, jemand macht die Tür auf, dann wäre es schick, wenn der Rollo direkt hochfahren würde.
Dank wait wartet der aber noch die eingestellte Zeit.

Oder aber der Rollo ist oben und die Türe auf. Jetzt macht man die Türe zu, dann sollte der bei Sonneneinstrahlung runter fahren. Aber auch da passiert logischerweise dank wait erst mal nichts.

Bekommt man das mit dem DOIF überhaupt hin, was ich mir da gedacht habe?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 September 2014, 17:29:02
Zitat von: maxritti am 17 September 2014, 17:15:39
Bekommt man das mit dem DOIF überhaupt hin, was ich mir da gedacht habe?
Du könntest zusätzliche Bedingungen für den Türkontakt einfügen und bei denen die wait-Zeit auf 0 setzen. Du müsstest dabei auf die Reihenfolge achten, so dass die Bedingungen, die durch Änderungen am Türstatus getriggert werden, vor den allgemeineren Bedingungen stehen. Ist schon etwas komplizierter, sollte aber machbar sein.
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 19 September 2014, 17:45:38
([05:15-23:59] and [geofancy:currLoc_Susie] eq "home" or [geofancy:currLoc_Arthur]  eq "home") (set He_Zirkulationspumpe on) DOELSE (set He_Zirkulationspumpe off)

warum wird hier nicht zu den Anfangs- bzw Endzeiten ein bzw.  ausgeschaltet? Zwischendurch wenn keiner zu Hause ist, wird geschaltet.

Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 September 2014, 17:51:12
Zitat von: knochenmuehle am 19 September 2014, 17:45:38
([05:15-23:59] and [geofancy:currLoc_Susie] eq "home" or [geofancy:currLoc_Arthur]  eq "home") (set He_Zirkulationspumpe on) DOELSE (set He_Zirkulationspumpe off)

warum wird hier nicht zu den Anfangs- bzw Endzeiten ein bzw.  ausgeschaltet? Zwischendurch wenn keiner zu Hause ist, wird geschaltet.

Andreas

da war wohl Arthur zuhause ;)

dann eher:

([05:15-23:59] and ([geofancy:currLoc_Susie] eq "home" or [geofancy:currLoc_Arthur]  eq "home")) (set He_Zirkulationspumpe on) DOELSE (set He_Zirkulationspumpe off)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 20 September 2014, 08:24:31
Danke, jetzt läufts!
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 September 2014, 08:43:26
Zitat von: knochenmuehle am 20 September 2014, 08:24:31
Danke, jetzt läufts!

Nur mal zur Info für Nicht-Programmierer: "and" hat höhere Priorität als "or", wenn also zuerst die or-Verknüpfung ausgewertet werden soll und dann die and-Verknüpfung, dann muss man die or-Verknüpfung klammern. Das hat aber weniger etwas mit DOIF zu tun, sondern gilt für Perl und andere Programmiersprachen und entspricht der Regel "Punkt- (and) vor Strich(or) -Rechnung", denn mathematisch gesehen, steckt nichts anderes dahinter.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 23 September 2014, 08:20:49
Hi,

momentan bin ich dabei der einfachheithalber Schaltzeiten und andere Vorgaben in Readingsggroups auszulagern, es stellt sich aber nicht so einfach wie gedacht.
Ist es möglich Readings als Zeitintervalle auszuwerten?

define di_Reklame DOIF ([[d_Reklame_Vorgabe:start]-[d_Reklame_Vorgabe:ende]] and ([EIB_6302] le [d_Reklame_Vorgabe:vorgabe]))(set struct_10_11010 on)

Funktioniert leider nicht. Ich bekomme den Fehler

di_Reklame DOIF: unknown expression format: 00

obwohl in der Forgabe Zeiten im viertelstunden Takt stehen.

Ich hoffe das Bild gibt eine Vorstellung davon, was ich Vorhabe. Vielleicht ist es ja möglich ohne ein notify mit der DEF

EIB_6302 {
if(ReadingsVal("d_Reklame_Vorgabe","modus","error") eq "auto")
{if
(
  (
   (
    (ReadingsVal("d_Reklame_Vorgabe","start","error") < ReadingsVal("d_Reklame_Vorgabe","ende","error")) and
    (($hour.":".$min) >= ReadingsVal("d_Reklame_Vorgabe","start","error"))and
    (($hour.":".$min) < ReadingsVal("d_Reklame_Vorgabe","ende","error"))
   )
   or
   (
    (ReadingsVal("d_Reklame_Vorgabe","start","error") > ReadingsVal("d_Reklame_Vorgabe","ende","error"))and
    (
     (
      (($hour.":".$min) >= ReadingsVal("d_Reklame_Vorgabe","start","error"))and
      (($hour.":".$min) <= "24:00")
     )
     or
     (
      (($hour.":".$min) >= "00:00")and
      (($hour.":".$min) < ReadingsVal("d_Reklame_Vorgabe","ende","error"))
     )
    )
   )
  )and
  (Value("EIB_6302") <= ReadingsVal("d_Reklame_Vorgabe","vorgabe","error"))
)
  {
   if(Value("struct_10_11010") ne 80)
    {fhem("set struct_10_11010 on")}
  }
else
  {
   if(Value("struct_10_11010") ne 5)
    {fhem("set struct_10_11010 off")}
  }
}}

zu benutzen.

Danke und Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 23 September 2014, 10:44:52
Zitat von: igami am 23 September 2014, 08:20:49
Ist es möglich Readings als Zeitintervalle auszuwerten?
Schau mal dieses Beispiel aus der Command-Ref:
[11:00-{sunset_abs()}]
Analog dazu sollte es gehen, also in geschweiften Klammern und nicht mit dem DOIF-Mechanismus zum Auswerten der Readings, sondern mit ReadingsVal.
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 23 September 2014, 12:42:41
Das habe ich schon probiert, erfolgreich. Nur dann werden die Zeiten nicht sofort beim Ändern in das DOIF übernommen. Das wäre in diesem Fall nicht schlimm, ich habe aber auch noch eine andere Schaltung, die ich nur über Zeit und nicht zusätzlich noch über Helligkeit mache, da wird dann erst beim Schalten der alten Zeiten die neue Zeit übernommen.
Vielleicht ist es ja möglich, das Modul um die Auswertung zu erweitern?

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 23 September 2014, 12:56:14
Zitat von: igami am 23 September 2014, 12:42:41
Nur dann werden die Zeiten nicht sofort beim Ändern in das DOIF übernommen. Das wäre in diesem Fall nicht schlimm, ich habe aber auch noch eine andere Schaltung, die ich nur über Zeit und nicht zusätzlich noch über Helligkeit mache, da wird dann erst beim Schalten der alten Zeiten die neue Zeit übernommen.
Du könntest versuchen, die Bedingung um die Teilbedingung
and [d_Reklame_Vorgabe:start]
zu erweitern. Dann wird getriggert, wann immer sich an d_Reklame_Vorgabe:start etwas ändert. Das müsstest Du dann mit dem Attribut do always kombinieren. Ich bin mir aber nicht sicher, ob das DOIF dann auch aktualisiert wird, wenn die andere Bedingung in dem Moment nicht erfüllt ist?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 September 2014, 17:50:35
Die Berechnung der Zeit müsste in einer Perl-Routine stattfinden. Dann könnte man das in geschweiften Klammern angeben.

DOIF ([{anfang()}-{ende()}])(set...)

Die Routinen werden bei der Definition ausgeführt und danach, wenn der errechnete Timer zuschlägt und der nächste  Zeitpunkt bestimmt werden muss.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: det. am 23 September 2014, 19:26:51
Hallo Damian,
habe eine Weile gebraucht um festzustellen, das Dein Modul mit readings die über FHEM2FHEM von einem Childserver kommen, nichts anfangen kann. Habe mir dann über cloneDummy geholfen. Gibt es dafür einen leicht zu erklärenden Grund?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 September 2014, 19:45:44
Zitat von: det. am 23 September 2014, 19:26:51
Hallo Damian,
habe eine Weile gebraucht um festzustellen, das Dein Modul mit readings die über FHEM2FHEM von einem Childserver kommen, nichts anfangen kann. Habe mir dann über cloneDummy geholfen. Gibt es dafür einen leicht zu erklärenden Grund?

Wahrscheinlich wird bei Änderung dieser Readings kein Event erzeugt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: det. am 23 September 2014, 19:55:41
Zitat von: Damian am 23 September 2014, 19:45:44
Wahrscheinlich wird bei Änderung dieser Readings kein Event erzeugt.
da es bei notifys funktioniert - müssen doch mMn Events erzeugt werden. Irgendwie setzt Dein Modul das physische Vorhandensein der Sensordefinition vor Eintritt des Events voraus?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 September 2014, 20:02:11
Zitat von: det. am 23 September 2014, 19:55:41
da es bei notifys funktioniert - müssen doch mMn Events erzeugt werden. Irgendwie setzt Dein Modul das physische Vorhandensein der Sensordefinition vor Eintritt des Events voraus?

Das war mal so bei den ersten Versionen vor dem Einchecken.

Wenn du die aktuelle Version hast, dann ist z. B.

define di_test DOIF ([blabla:blabla]) (set bla on)

möglich, obwohl nichts davon existiert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: dancatt am 25 September 2014, 15:36:24
Hallo zusammen,

ich versuche mich gerade an meinem ersten DOIF.


define Heizung_Schalter dummy
attr Heizung_Schalter group Global.Schalter.Heizung
attr Heizung_Schalter icon max_heizungsthermostat
attr Heizung_Schalter room Global
attr Heizung_Schalter setList state:Anwesend,Arbeit,Pfalz,Abwesend
attr Heizung_Schalter webCmd state

define di_Kinderzimmer_Heizung_Schalter DOIF (Kinderzimmer_Heizung_Schalter eq "Anwesend")\
  (set Kinderzimmer_Heizung_Schalter Anwesend, set Wohnzimmer_Heizung_Schalter Anwesend)\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Arbeit")\
  (set Kinderzimmer_Heizung_Schalter Arbeit, set Wohnzimmer_Heizung_Schalter Arbeit)\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Pfalz")\
  (set Kinderzimmer_Heizung_Schalter Pfalz, set Wohnzimmer_Heizung_Schalter Pfalz)\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Abwesend")\
  (set Kinderzimmer_Heizung_Schalter Abwesend, set Wohnzimmer_Heizung_Schalter Abwesend)

#####################################################################

define Kinderzimmer_Heizung_Schalter dummy
attr Kinderzimmer_Heizung_Schalter group Kinderzimmer.Schalter.Heizung
attr Kinderzimmer_Heizung_Schalter icon max_heizungsthermostat
attr Kinderzimmer_Heizung_Schalter room Kinderzimmer
attr Kinderzimmer_Heizung_Schalter setList state:Anwesend,Arbeit,Pfalz,Abwesend
attr Kinderzimmer_Heizung_Schalter webCmd state

define di_Kinderzimmer_Heizung_Schalter DOIF (Kinderzimmer_Heizung_Schalter eq "Anwesend" or Kinderzimmer_Heizung_Schalter eq "Arbeit" or Kinderzimmer_Heizung_Schalter eq "Pfalz")\
  ({HeizungTemperaturlisteSetzen("Kinderzimmer_Heizung_Schalter", "Kinderzimmer_Heizung_Clima")})\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Abwesend")\
  (set Kinderzimmer_Heizung_Clima controlManu off)

#####################################################################

define Wohnzimmer_Heizung_Schalter dummy
attr Wohnzimmer_Heizung_Schalter group Wohnzimmer.Schalter.Heizung
attr Wohnzimmer_Heizung_Schalter icon max_heizungsthermostat
attr Wohnzimmer_Heizung_Schalter room Wohnzimmer
attr Wohnzimmer_Heizung_Schalter setList state:Anwesend,Arbeit,Pfalz,Abwesend
attr Wohnzimmer_Heizung_Schalter webCmd state

define di_Wohnzimmer_Heizung_Schalter DOIF (Wohnzimmer_Heizung_Schalter eq "Anwesend" or Wohnzimmer_Heizung_Schalter eq "Arbeit" or Wohnzimmer_Heizung_Schalter eq "Pfalz")\
  ({HeizungTemperaturSetzen("Wohnzimmer_Heizung_Schalter", "Wohnzimmer_Wandthermostat_Climate")})\
DOELSEIF (Wohnzimmer_Heizung_Schalter eq "Abwesend")\
  (set Wohnzimmer_Wandthermostat_Climate controlManu off)


Dabei kommt folgender Fehler wenn ich FHEM neu starte:

Error messages while initializing FHEM:
configfile: di_Kinderzimmer_Heizung_Schalter DOIF: no state, reading or time in condition: Kinderzimmer_Heizung_Schalter eq "Anwesend"
di_Kinderzimmer_Heizung_Schalter DOIF: no state, reading or time in condition: Kinderzimmer_Heizung_Schalter eq "Anwesend" or Kinderzimmer_Heizung_Schalter eq "Arbeit" or Kinderzimmer_Heizung_Schalter eq "Pfalz"
di_Wohnzimmer_Heizung_Schalter DOIF: no state, reading or time in condition: Wohnzimmer_Heizung_Schalter eq "Anwesend" or Wohnzimmer_Heizung_Schalter eq "Arbeit" or Wohnzimmer_Heizung_Schalter eq "Pfalz"



Was mir noch aufgefallen ist, dass wenn ich "save config" ausführe, dass alle DOIF's in der cfg-Datei verschwinden.

Was mache ich da falsch?

Vielen Dank.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 September 2014, 16:24:57
Zitat von: dancatt am 25 September 2014, 15:36:24

Was mache ich da falsch?

Du musst schon in der Bedingung, so wie es in der Doku des Moduls steht und in den vielen Beispielen aufgezeigt ist, deine Devices in eckige Klammern setzen, also:

define di_Kinderzimmer_Heizung_Schalter DOIF ([Kinderzimmer_Heizung_Schalter] eq "Anwesend")...


Gruß


Damian

Titel: Antw:neues Modul DOIF
Beitrag von: dancatt am 25 September 2014, 17:18:10
Ja, na sowas, danke, da sitzt man ewig davor und dann sieht man sowas nicht.
Danke
Titel: Antw:neues Modul DOIF
Beitrag von: Steffen am 01 Oktober 2014, 07:04:24
Hallo!

Es geht um diese Code versuch:
([06:00-08:00] and [SamsungTv] eq "disconnected") ({HueOffSofa}) DOELSE ({HueOffSideBoard})
attr wait 0:10

ich möchte das zu erst HueOffSofa(ausgeführt/aus) geht und dann etwas Zeit verzögert(ca.30sek) die HueOffSideBoard aber irgendwie klappt das so nicht richtig, die "HueOffSofa" wird ordentlich wie in der 99.pm angelegt ausgestellt aber bei der "HueOffSideBoard" will es einfach nicht funktionieren?!

Beide .pm werden korrekt ausgeführt wenn ich sie in Fhem direkt ausführe.

Hat jemand vielleicht eine Idee?

Mfg Steffen
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Oktober 2014, 07:51:13
Zitat von: Steffen am 01 Oktober 2014, 07:04:24
Hallo!

Es geht um diese Code versuch:
([06:00-08:00] and [SamsungTv] eq "disconnected") ({HueOffSofa}) DOELSE ({HueOffSideBoard})
attr wait 0:10

ich möchte das zu erst HueOffSofa(ausgeführt/aus) geht und dann etwas Zeit verzögert(ca.30sek) die HueOffSideBoard aber irgendwie klappt das so nicht richtig, die "HueOffSofa" wird ordentlich wie in der 99.pm angelegt ausgestellt aber bei der "HueOffSideBoard" will es einfach nicht funktionieren?!

Beide .pm werden korrekt ausgeführt wenn ich sie in Fhem direkt ausführe.

Hat jemand vielleicht eine Idee?

Mfg Steffen

"else" heißt auf deutsch "sonst". Der Fall DOELSE wird nur ausgeführt, wenn deine Bedingung nicht! wahr ist, also sonst.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Steffen am 01 Oktober 2014, 08:09:21
Zitat von: Damian am 01 Oktober 2014, 07:51:13
"else" heißt auf deutsch "sonst". Der Fall DOELSE wird nur ausgeführt, wenn deine Bedingung nicht! wahr ist, also sonst.

Gruß

Damian

Das hatte ich mir auch schon gedacht und war nur ein versuch von vielen aber bekommt man denn zwei Befehle mit einer Verzögerung(wait) unter gebracht??

Mfg Steffen
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 01 Oktober 2014, 08:35:44
Zitat von: Steffen am 01 Oktober 2014, 08:09:21
Das hatte ich mir auch schon gedacht und war nur ein versuch von vielen aber bekommt man denn zwei Befehle mit einer Verzögerung(wait) unter gebracht??
Dafür gibt es den Sleep-Befehl (http://fhem.de/commandref.html#sleep). Also ungefähr so:

({HueOffSofa};;sleep 30 quiet;;{HueOffSideBoard})

Wichtig: Unbedingt, das FHEM-sleep verwenden, nicht das Perl-sleep, denn letzteres hält FHEM für den angegebenen Zeitraum komplett an.
Alternativ könntest Du auch ein at +00:00:30 definieren, das würde 30 Sekunden später ausgeführt und dann wieder gelöscht.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Oktober 2014, 13:38:37
Zitat von: Brockmann am 01 Oktober 2014, 08:35:44
Dafür gibt es den Sleep-Befehl (http://fhem.de/commandref.html#sleep). Also ungefähr so:

({HueOffSofa};;sleep 30 quiet;;{HueOffSideBoard})

Wichtig: Unbedingt, das FHEM-sleep verwenden, nicht das Perl-sleep, denn letzteres hält FHEM für den angegebenen Zeitraum komplett an.
Alternativ könntest Du auch ein at +00:00:30 definieren, das würde 30 Sekunden später ausgeführt und dann wieder gelöscht.

Leider legt auch FHEM-Sleep in Kombination mit DOIF FHEM lahm. Ich werde mir da noch etwas einfallen lassen müssen. Z. Zt. ist also für Verzögerungen zwischen den Befehlen bei DOIF, nur die at-Lösung sinnvoll.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Otto am 03 Oktober 2014, 07:32:00
Hallo,

habe mal eine Verständnisfrage, im commandref steht:

ZitatLampe soll ab 6:00 Uhr angehen, wenn es dunkel ist und wieder ausgehen, wenn es hell wird, spätestens aber um 9:00 Uhr:
define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)

Aber wenn die brightness nach 9:00 >40 ist passiert nix, richtig?

Wie fängt man das ab?

Gruß Otto
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Oktober 2014, 07:43:38
Zitat von: Otto am 03 Oktober 2014, 07:32:00
Hallo,

habe mal eine Verständnisfrage, im commandref steht:

Aber wenn die brightness nach 9:00 >40 ist passiert nix, richtig?

Wie fängt man das ab?

Gruß Otto
Die Bedingung ist ab 9:00 Uhr nicht mehr wahr und damit geht die Lampe aus. Daher ist es egal ob nach 9:00 brightness >40, da die Bedingung bereits falsch ist und die Lampe ausgegangen ist. Mehr als falsch geht nicht und mehr als aus auch nicht ;)
Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 03 Oktober 2014, 19:28:27
Hallo zusammen,  ich möchte über meine Fensterkontakte meine Rollladen steuern.  Z.B. wenn ich das Fenster inerhalb von zwei sec auf und wieder zu mache soll der Rollo hochfahren.  Habe mir die Doku  komplett durchgelesen,  aber finde dazu irgendwie keinen Ansatz. 
Könnt ihr mir weiterhelfen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Oktober 2014, 21:27:39
Zitat von: holzwurm83 am 03 Oktober 2014, 19:28:27
Hallo zusammen,  ich möchte über meine Fensterkontakte meine Rollladen steuern.  Z.B. wenn ich das Fenster inerhalb von zwei sec auf und wieder zu mache soll der Rollo hochfahren.  Habe mir die Doku  komplett durchgelesen,  aber finde dazu irgendwie keinen Ansatz. 
Könnt ihr mir weiterhelfen?

Endlich mal was zum Knobeln  :D

setreading Fenster doppelkick off (nur einmalig setzen)

und dann:

define di_fensterhoch DOIF ([Fenster])
  (IF ([Fenster:doppelklick] eq "on")
    (set Rollladen hoch)
  ELSE
    (setreading Fenster doppelklick on, define doppelklick_off at +00:00:02 setreading Fenster doppelklick off))

attr di_fensterhoch do always


Wird demnächst auch ohne at funktionieren  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 15:28:56
Hallo Damian,

habe das mal versucht umzusetzen. Irgendwas mache ich wohl falsch.

Das ist die def. vom Rollo:
define WZ_J_OST dummy
attr WZ_J_OST KU_J_Front Alle_Jalousie
attr WZ_J_OST alias Osten
attr WZ_J_OST devStateIcon 00:fts_shutter_up:auf C8:fts_shutter_down:stop C9:fts_shutter_manual:zu
attr WZ_J_OST eventMap zu:00 auf:C8 stop:C9
attr WZ_J_OST group Jalousie
attr WZ_J_OST icon fts_blade_arc
attr WZ_J_OST room Wohnzimmer
attr WZ_J_OST setList zu auf stop
attr WZ_J_OST webCmd zu:auf:stop


Das ist die def. vom Fenster:
define WZ_Fenster_OST_R DOIF ([HMW_Sen_SC_12_DR_JEQ0545703_05:sensor] == 51200 and [HMW_Sen_SC_12_DR_JEQ0545703_06:sensor] == 0) DOELSEIF ([HMW_Sen_SC_12_DR_JEQ0545703_05:sensor] == 0 and [HMW_Sen_SC_12_DR_JEQ0545703_06:sensor] == 51200) DOELSEIF ([HMW_Sen_SC_12_DR_JEQ0545703_05:sensor] == 51200 and [HMW_Sen_SC_12_DR_JEQ0545703_06:sensor] == 51200)
attr WZ_Fenster_OST_R cmdState zu|gekippt|offen
attr WZ_Fenster_OST_R devStateIcon zu:fts_window_1w offen:fts_window_1w_open@red gekippt:fts_window_1w_tilt@red
attr WZ_Fenster_OST_R group Fenster
attr WZ_Fenster_OST_R icon fts_door_right
attr WZ_Fenster_OST_R room Wohnzimmer


Und hier noch die def. für die Umsetzung:
define di_fensterhoch DOIF ([WZ_Fenster_OST_R])   (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen")     (set WZ_J_OST auf)   ELSE     (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:04 setreading Fenster doppelklick zu))
attr di_fensterhoch do always


irgendwie gibt es auch ein Error Reading:
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 15:40:51
Hallo,

du weisst aber das du ALLE Fenster gegen den Namen deines Fensters austauschen musst?
Selbiges mit dem Rollladen.

Auch fehlt mir irgendwie das neue Reading beim Fenster - auch hier bietet es sich an im geposteten Code Fenster gegen den Namen deines Fensters zu tauschen.
Das sollte aber immerhin einen Meldung von FHEM provoziert haben.

Und Screenshots kann man auch schön einbinden - man muss niemanden zwingen diese erst runterladen zu müssen  ;)

Grüße

Edith: Erst jetzt geshehen:
define WZ_Fenster_OST_R DOIF ([HMW_Sen_SC_12_DR_JEQ0545703_05:sensor] == 51200 and [HMW_Sen_SC_12_DR_JEQ0545703_06:sensor] == 0) DOELSEIF ([HMW_Sen_SC_12_DR_JEQ0545703_05:sensor] == 0 and [HMW_Sen_SC_12_DR_JEQ0545703_06:sensor] == 51200) DOELSEIF ([HMW_Sen_SC_12_DR_JEQ0545703_05:sensor] == 51200 and [HMW_Sen_SC_12_DR_JEQ0545703_06:sensor] == 51200)

Das ist ein Define eines DOIF und kein Device im Sinne von - das ist der Sensor an meinem Fenster.
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 16:01:38
Zitatdu weisst aber das du ALLE Fenster gegen den Namen deines Fensters austauschen musst?
Selbiges mit dem Rollladen.
Ein Fenster hatte ich wohl übersehen:
define di_fensterhoch DOIF ([WZ_Fenster_OST_R])   (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen")     (set WZ_J_OST auf)   ELSE     (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:04 setreading WZ_Fenster_OST_R doppelklick zu))
attr di_fensterhoch do always


ZitatAuch fehlt mir irgendwie das neue Reading beim Fenster - auch hier bietet es sich an im geposteten Code Fenster gegen den Namen deines Fensters zu tauschen.
Habe da noch mal ein Bild angehängt. Mit dem Bilder anhängen muss ich aber noch üben.

Trotz dessen scheint da noch was nicht zu passen.

ZitatDas ist ein Define eines DOIF und kein Device im Sinne von - das ist der Sensor an meinem Fenster.

Heißt es, dass man es nun anders lösen muss?
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 16:09:57
Hallo,

ZitatHeißt es, dass man es nun anders lösen muss?
Weiß ich nicht - da muss Damian was dazu sagen.

Du solltest dir aber angewöhnen erstmal in das FHEM-Logfile zu schauen.
Das ist nicht so schwer lesbar und kryptisch wie verborgene Mythen immer behaupten.
Dort wirst du immerhin fündig wenn dir FHEM etwas mitteilen möchte.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 16:26:19
In der Fehlermeldung steht: IF: unknown reading: WZ_Fenster_OST_R:doppelklick

also hast du nicht zu Anfang , wie ich geschrieben habe:

setreading WZ_Fenster_OST_R doppelkick off

gesetzt.

Gruß

Damian



Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 16:29:50
Hallo,

Zitat von: Damian am 05 Oktober 2014, 16:26:19
In der Fehlermeldung steht: IF: unknown reading: WZ_Fenster_OST_R:doppelklick

also hast du nicht zu Anfang , wie ich geschrieben habe:

setreading WZ_Fenster_OST_R doppelkick off

gesetzt.

Gruß

Damian

So wird es sein - aber lass doch mal die Fragesteller selbst ein bischen mitdenken  ;D

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 16:39:27
Zitat von: Damian am 05 Oktober 2014, 16:26:19
In der Fehlermeldung steht: IF: unknown reading: WZ_Fenster_OST_R:doppelklick

also hast du nicht zu Anfang , wie ich geschrieben habe:

setreading WZ_Fenster_OST_R doppelkick off

gesetzt.

Gruß

Damian

Ich habe passend dazu
setreading WZ_Fenster_OST_R doppelkick zu
gesetzt.

Habe  off = zu und für on = offen ersetzt, oder habe ich da zu viel mitgedacht?  ;D
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 16:41:14
doppelkick oder doppelklick?
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 16:55:05
Zitat von: Puschel74 am 05 Oktober 2014, 16:41:14
doppelkick oder doppelklick?

So habe das auf "doppelklick" korrigiert. Jetzt fährt der Rollo auch hoch. Allerdings bereits beim erstem mal "offen" und nicht wie geplant erst nach zwei mal "offen" innerhalb von zwei sec.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 17:13:59
Hallo,

im letzten Code von dir sind auch 4 Sekunden eingetragen  ;)
Alles was anders ist sehen wir hier nicht.

Ein setreading löst mWn KEIN Event aus - daher dürfte sich das Device auch nicht selbst triggern.

Für weitergehende Hilfe wäre es nützlich den von dir zuletzt benutzten Code zu sehen.
Sorry aber meine Glaskugel ist noch beim polieren  8)

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 17:39:27
Anbei meine finale Def.:
define di_fensterhoch DOIF ([WZ_Fenster_OST_R])   (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen")     (set WZ_J_OST auf)   ELSE     (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu))
attr di_fensterhoch do always
attr di_fensterhoch verbose 5



Beim Fenster habe ich als Reading nun immer
doppelklick offen
stehen.

Habe mit
setreading WZ_Fenster_OST_R doppelklick zu
versucht "zu" zu setzten, aber das geht auch nicht.

Im Log steht dann folgende Meldung:
2014.10.05 17:34:58 2: di_fensterhoch: IF ([WZ_Fenster_OST_R:doppelklick] eq "offen")     (set WZ_J_OST auf)   ELSE     (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu): doppelklick_zu already defined, delete it first
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 17:49:57
Hallo,

das
Zitatdoppelklick_zu already defined, delete it first
ist normal wenn du innerhalb der Zeit das Fenster nochmal öffnest - das at ist zu diesem Zeitpunkt bereits definiert.

Warum aber setreading Fenster doppelklick zu nicht geht kann ich dir nicht sagen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 19:22:39
Zitat von: holzwurm83 am 05 Oktober 2014, 17:39:27
Anbei meine finale Def.:
define di_fensterhoch DOIF ([WZ_Fenster_OST_R])   (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen")     (set WZ_J_OST auf)   ELSE     (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu))
attr di_fensterhoch do always
attr di_fensterhoch verbose 5



Beim Fenster habe ich als Reading nun immer
doppelklick offen
stehen.

Habe mit
setreading WZ_Fenster_OST_R doppelklick zu
versucht "zu" zu setzten, aber das geht auch nicht.

Im Log steht dann folgende Meldung:
2014.10.05 17:34:58 2: di_fensterhoch: IF ([WZ_Fenster_OST_R:doppelklick] eq "offen")     (set WZ_J_OST auf)   ELSE     (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu): doppelklick_zu already defined, delete it first


Vielleicht erzeugt dein Fenster mehr als ein Event pro Öffnen bzw. Schließen (z. B. bei HM). Das kannst im Eventmonitor sehen. Wichtig ist, dass WZ_Fenster_OST_R nur einmal pro Öffnen bzw. Schließen den Zustand wechselt.

Gruß

Damian



Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 19:42:37
Der Eventmonitor Zeigt folgendes:

2014-10-05 19:37:59 dummy WZ_J_OST C8
2014-10-05 19:37:59 DOIF di_fensterhoch cmd_nr: 1
2014-10-05 19:37:59 DOIF di_fensterhoch cmd_event: WZ_Fenster_OST_R
2014-10-05 19:37:59 DOIF di_fensterhoch cmd_1
2014-10-05 19:37:59 DOIF WZ_Fenster_OST_R cmd_nr: 3
2014-10-05 19:37:59 DOIF WZ_Fenster_OST_R cmd_event: HMW_Sen_SC_12_DR_JEQ0545703_06
2014-10-05 19:37:59 DOIF WZ_Fenster_OST_R offen
2014-10-05 19:37:59 HM485 HMW_Sen_SC_12_DR_JEQ0545703_06 sensor: 51200
2014-10-05 19:38:01 HM485_LAN HM485_LAN RAW 0000CBB8 98 00000001 7802C8
2014-10-05 19:38:01 dummy WZ_J_OST C8
2014-10-05 19:38:01 DOIF di_fensterhoch cmd_nr: 1
2014-10-05 19:38:01 DOIF di_fensterhoch cmd_event: WZ_Fenster_OST_R
2014-10-05 19:38:01 DOIF di_fensterhoch cmd_1
2014-10-05 19:38:01 DOIF WZ_Fenster_OST_R cmd_nr: 1
2014-10-05 19:38:01 DOIF WZ_Fenster_OST_R cmd_event: HMW_Sen_SC_12_DR_JEQ0545703_06
2014-10-05 19:38:01 DOIF WZ_Fenster_OST_R zu
2014-10-05 19:38:01 HM485 HMW_Sen_SC_12_DR_JEQ0545703_06 sensor: 0


Also wird nur einmal "offen" erzeugt.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 19:57:39
Zitat von: holzwurm83 am 05 Oktober 2014, 19:42:37
Der Eventmonitor Zeigt folgendes:

2014-10-05 19:37:59 dummy WZ_J_OST C8
2014-10-05 19:37:59 DOIF di_fensterhoch cmd_nr: 1
2014-10-05 19:37:59 DOIF di_fensterhoch cmd_event: WZ_Fenster_OST_R
2014-10-05 19:37:59 DOIF di_fensterhoch cmd_1
2014-10-05 19:37:59 DOIF WZ_Fenster_OST_R cmd_nr: 3
2014-10-05 19:37:59 DOIF WZ_Fenster_OST_R cmd_event: HMW_Sen_SC_12_DR_JEQ0545703_06
2014-10-05 19:37:59 DOIF WZ_Fenster_OST_R offen
2014-10-05 19:37:59 HM485 HMW_Sen_SC_12_DR_JEQ0545703_06 sensor: 51200
2014-10-05 19:38:01 HM485_LAN HM485_LAN RAW 0000CBB8 98 00000001 7802C8
2014-10-05 19:38:01 dummy WZ_J_OST C8
2014-10-05 19:38:01 DOIF di_fensterhoch cmd_nr: 1
2014-10-05 19:38:01 DOIF di_fensterhoch cmd_event: WZ_Fenster_OST_R
2014-10-05 19:38:01 DOIF di_fensterhoch cmd_1
2014-10-05 19:38:01 DOIF WZ_Fenster_OST_R cmd_nr: 1
2014-10-05 19:38:01 DOIF WZ_Fenster_OST_R cmd_event: HMW_Sen_SC_12_DR_JEQ0545703_06
2014-10-05 19:38:01 DOIF WZ_Fenster_OST_R zu
2014-10-05 19:38:01 HM485 HMW_Sen_SC_12_DR_JEQ0545703_06 sensor: 0


Also wird nur einmal "offen" erzeugt.

Vor deinem Test des Doppelklicks, muss das Reading doppelklick  bei WZ_Fenster_OST_R auf "zu" stehen und natürlich kein doppelklick_zu-at existieren.

Beim ersten Klick läuft er in den ELSE-Fall setzt doppelklick auf "offen" und definiert doppelklick_zu-at. Wenn du innerhalb der definierten Zeitspanne noch mal ein Event erzeugst, dann kann er nur in den IF-Fall reinlaufen und den Rollladen hoch stellen.
Wenn du nach der definierten Zeitspanne ein Event erzeugst dann ist doppelklick-reading zu und doppelklick_zu-at existiert nicht mehr und dann kann er nur in den ELSE-Fall reinlaufen und dann fängt die Sache von vorne an. Eigentlich kann hier nicht passieren, dass at noch definiert  ist, wenn es erneut definieren werden soll. Es sei denn die oben beschriebenen Ausgangsvoraussetzungen stimmen bei dir nicht.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 20:07:13
ZitatVor deinem Test des Doppelklicks, muss das Reading doppelklick  bei WZ_Fenster_OST_R auf "zu" stehen und natürlich kein doppelklick_zu-at existieren.

Da liegt wohl auch das Problem!? WZ_Fenster_OST_R steht auf "offen" und ich kann es nicht auf "zu" setzen, da doppelklick_zu-at bereits existiert.
2014.10.05 20:01:41 2: di_fensterhoch: IF ([WZ_Fenster_OST_R:doppelklick] eq "offen") (set WZ_J_OST auf) ELSE (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu): doppelklick_zu already defined, delete it first

Das at finde ich leider nicht um es zu löschen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 20:11:59
Zitat von: holzwurm83 am 05 Oktober 2014, 20:07:13
Da liegt wohl auch das Problem!? WZ_Fenster_OST_R steht auf "offen" und ich kann es nicht auf "zu" setzen, da doppelklick_zu-at bereits existiert.
2014.10.05 20:01:41 2: di_fensterhoch: IF ([WZ_Fenster_OST_R:doppelklick] eq "offen") (set WZ_J_OST auf) ELSE (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu): doppelklick_zu already defined, delete it first

Das at finde ich leider nicht um es zu löschen.

Wie kann denn mit +00:00:02 dein at noch existieren? Der löscht sich selbst nach 2 Sekunden.

Ansonsten reicht doch in der Kommandozeile:

delete doppelklick_zu

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 20:17:55
hm?

Mit
setreading WZ_Fenster_OST_R doppelklick zu
bleibt das reading auf offen stehen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 20:20:45
Zitat von: holzwurm83 am 05 Oktober 2014, 20:17:55
hm?

Mit
setreading WZ_Fenster_OST_R doppelklick zu
bleibt das reading auf offen stehen.

Meinst du auch wirklich das Reading und nicht den Status des Moduls?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 20:31:41
Ich meine eigentlich das Reading. Zur Sicherheit ein Screenshot.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 20:35:47
Zitat von: holzwurm83 am 05 Oktober 2014, 20:31:41
Ich meine eigentlich das Reading. Zur Sicherheit ein Screenshot.

Tja, dann kann ich dir leider nicht weiter helfen. Bei mir funktioniert das Setzen eines Readings mit setreading ... jederzeit (gerade noch mal probiert).

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 20:56:14
Ich glaube ich weiß, wo der Hund begraben liegt.

Durch das Setzen des Readings wird ein Event erzeugt und dein DOIF-Modul fängt an zu arbeiten und setzt das Reading wieder um.

Um das Problem zu lösen, musst du einfach überall setreading ... durch set dummy ... ersetzen, den du vorher definieren  und mit set dummy zu vorbelegen musst.

Gruß

Damian

P. S. Es wird demnächst eine neue DOIF-Version geben, da kannst du so etwas ohne irgendwelche Hilfskonstrukte als Einzeiler lösen.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 20:59:01
Hallo,

sorry Damian aber setreading sollte eben kein Event auslösen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 20:59:40
Da ist wohl irgendwo noch ein Fehler. Sobald ist das angelegte DOIF lösche kann ich das Reading wieder setzten. Finde hier aber den Fehler nicht:
define di_fensterhoch DOIF ([WZ_Fenster_OST_R]) (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen") (set WZ_J_OST auf) ELSE (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu))
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 21:05:35
Zitat von: Puschel74 am 05 Oktober 2014, 20:59:01
Hallo,

sorry Damian aber setreading sollte eben kein Event auslösen.

Grüße

Das tut er aber! Probier mal aus.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 21:11:19
Komme da jetzt nicht mehr mit. Habe das jetzt wie folgt angelegt, aber das habe ich wohl noch nicht richtig verstanden.

define di_fensterhoch DOIF ([WZ_Fenster_OST_R]) (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen") (set WZ_J_OST auf) ELSE (set test_F_R WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 set test_F_R WZ_Fenster_OST_R doppelklick zu))
attr di_fensterhoch do always
attr di_fensterhoch verbose 5
define test_F_R dummy


Der Dummy steht auf "zu"
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 21:17:07
Zitat von: holzwurm83 am 05 Oktober 2014, 20:59:40
Da ist wohl irgendwo noch ein Fehler. Sobald ist das angelegte DOIF lösche kann ich das Reading wieder setzten. Finde hier aber den Fehler nicht:
define di_fensterhoch DOIF ([WZ_Fenster_OST_R]) (IF ([WZ_Fenster_OST_R:doppelklick] eq "offen") (set WZ_J_OST auf) ELSE (setreading WZ_Fenster_OST_R doppelklick offen, define doppelklick_zu at +00:00:02 setreading WZ_Fenster_OST_R doppelklick zu))

Ist klar, siehe mein vorheriger Post.

Deine Lösung sollte sein:

define Doppelklick dummy
set Doppelklick off

define di_fensterhoch DOIF ([WZ_Fenster_OST_R])
(IF ([Doppelklick] eq "on")
   (set WZ_J_OST auf)
ELSE
(set Doppelklick on, define doppelklick_zu at +00:00:02 set Doppelklick off))

attr di_fensterhoch do always


Ich würde es auch bei "on" und "off" belassen, denn die Umbenennung ist verwirrend und entspricht nicht dem echten Zustand. Doppelklick kann von "offen" auf "zu" oder umgekehrt bedeuten.

So langsam sollte die Sache funktionieren  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 21:17:37
Hallo,

Zitat von: Damian am 05 Oktober 2014, 21:05:35
Das tut er aber! Probier mal aus.

Gruß

Damian
Stimmt - laut commandref soll setreading auch ein Event auslösen.
http://fhem.de/commandref_DE.html#setreading (http://fhem.de/commandref_DE.html#setreading)
Evtl. wäre dann setstate besser?

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 21:37:35
Sehr schön! ;D Vielen Dank Damian! Jetzt geht das!

Weist du schon ab du die Version fertig hast, um das Dummy zu sparen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Oktober 2014, 21:51:00
Zitat von: holzwurm83 am 05 Oktober 2014, 21:37:35
Sehr schön! ;D Vielen Dank Damian! Jetzt geht das!

Weist du schon ab du die Version fertig hast, um das Dummy zu sparen?
Noch nicht, mache erst mal Urlaub. Es wird aber ein ganzes Paket voller neuer Features für das Modul geben, die es in sich haben. ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Oktober 2014, 21:51:43
Hallo,

@holzwurm
Kannst du nochmal selbiges versuchen nur anstelle von setreading setstate verwenden?
Danke.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 05 Oktober 2014, 21:57:40
Zitat von: Puschel74 am 05 Oktober 2014, 21:51:43
Hallo,

@holzwurm
Kannst du nochmal selbiges versuchen nur anstelle von setreading setstate verwenden?
Danke.

Grüße

Kann ich gerne noch mal probieren. Teste das morgen Abend noch mal in ruhe.
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 06 Oktober 2014, 20:10:52
Zitat von: Puschel74 am 05 Oktober 2014, 21:51:43
Hallo,

@holzwurm
Kannst du nochmal selbiges versuchen nur anstelle von setreading setstate verwenden?
Danke.

Grüße

Hallo Puschel,

habe das gerade mal soweit umgeschrieben und wollte das jetzt testen. Bin mir aber bei dem IF noch nicht ganz sicher ob das passt?
define di_fensterhoch DOIF ([WZ_Fenster_OST_L]) (IF ([WZ_Fenster_OST_L:doppelklick] eq "offen") (set WZ_J_OST auf) ELSE (setstate WZ_Fenster_OST_L doppelklick offen, define doppelklick_zu at +00:00:02 setstate WZ_Fenster_OST_L doppelklick zu))
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 06 Oktober 2014, 20:15:00
Hallo,

ich meinte eigentlich das DOIF OHNE den Dummy und anstelle von setreading das setstate.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 06 Oktober 2014, 20:21:35
Ja, so hatte ich es auch verstanden. Nur dann stimmt doch auch das If nicht, da dass Reading "Doppelklick" nicht da ist?
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 06 Oktober 2014, 20:26:01
Hallo,

ZitatSobald ist das angelegte DOIF lösche kann ich das Reading wieder setzten.
Ok, das hatte ich übersehen/verdrängt/vergessen  8)

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: krikan am 06 Oktober 2014, 21:17:59
Blöde Zwischenfrage: Was spricht eigentlich dagegen, das Problem mittels simpler "sequence" zu lösen.
Sorry, Damian, DOIF ist trotzdem unersetzlich!
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 06 Oktober 2014, 22:39:31
HAllo.
HAbe erfolgreich einge DOIF mit Dummys verknüpft. Jetzt habe ich eine Frage zu den State`s, wie muss der code aussehen wenn "on" oder "on-till" als wahr erkannt wird?
wäre ([dummy] eq "on" or eq "on-till") richtig?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 07 Oktober 2014, 08:28:41
Zitat von: satprofi am 06 Oktober 2014, 22:39:31
HAbe erfolgreich einge DOIF mit Dummys verknüpft. Jetzt habe ich eine Frage zu den State`s, wie muss der code aussehen wenn "on" oder "on-till" als wahr erkannt wird?
wäre ([dummy] eq "on" or eq "on-till") richtig?
Also wenn, dann ([dummy] eq "on" or [dummy] eq "on-till") oder etwas kürzer ([dummy] =~ "on|on-till")
Aber ich bin mir nicht sicher, was Du genau erreichen willst. Dummys unterstützen von sich aus kein "on-till".
Also Du kannst einen Dummy natürlich auf "on-till 12:00:00" setzen, aber er wird dann bei Erreichen dieses Zeitpunkt nicht von alleine wieder auf "off" wechseln.
Das tun nur bestimmte reale Geräte.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 07 Oktober 2014, 12:01:32
Aha. Danke.

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 07 Oktober 2014, 15:10:01
Hallo,
ich beschäftige mich gerade mit dem neuen DOIF Modul.
Ich möchte damit folgende Funktion realisieren, komme aber noch nicht ganz klar!

Über einen Eingang an einem Enocean Modul wird ein Signal angelegt. Der Eingang sendet bei angelegter Spannung das Signal "pressed" und "released" wenn kein Signal anliegt.

Wird "pressed" gesendet, schaltet ein Aktor ein Licht ein. Sobald das Signal am Eingang erlischt ("released") wird eine Ausschaltverzägerung des Aktors getriggert. Das funktioniert soweit ganz gut!
define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on) DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off)
attr LichtAn cmdState on|off
attr LichtAn room EnOcean
attr LichtAn wait 0:10


Jetzt möchte ich eine Art Zwangsabschaltung dazubauen, die bei längerer Blockade des Eingangs ("pressed"> 600s) das Licht ausschaltet und eine Benachrichtigung per Mail versendet.
Die Funktionalität des Moduls soll aber wieder freigegeben werden, wenn das "pressed"-Signal wieder freigegeben wird.
Hintergrund:
Ein Reed Kontakt wird beim Öffnen der Haustür betätigt, schaltet das Licht direkt ein, wird dann solange nachgetriggert bis das Signal "released" am Kontakt anliegt und nach einer Zeitverzögerung (20s) die Lampe ausschaltet. Steht die Tür aber sehr lange auf, soll das ganze in einen Fehler laufen, den Aktor abschalten und eine Benachrichtung versenden. Ein zweiter Eingang wird über eine Lichtschranke getriggert. Wenn nun jemand die LS für längere Zeit blockiert ("pressed") dann soll auch dies als Fehler erkannt werden und die Zwangsabschaltung greifen, bis die Blockade aufgehoben wurde.

Kann diese Zwangsabschaltung in das DOIF integriert werden, oder baue ich einen watchdog drumherum, der den Aktor abschaltet?

Danke und Gruß,
Spartacus
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 07 Oktober 2014, 15:24:02
Zitat von: Spartacus am 07 Oktober 2014, 15:10:01
Kann diese Zwangsabschaltung in das DOIF integriert werden, oder baue ich einen watchdog drumherum, der den Aktor abschaltet?
Vielleicht hat Damian auch dafür eine Idee, aber ich stelle mir das schwierig vor, weil ja ein und dasselbe DOIF quasi auf dasselbe Ereignis unterschiedlich reagieren soll mit einer Verzögerung von 600s. Aber solange buttons auf "pressed" bleibt wird das DOIF eben nicht wieder getriggert und kann deshalb auch nicht erneut (anders) reagieren.

Eigentlich bietet sich dafür ein zweites DOIF an, das auf dasselbe Ereignis reagiert, aber mit attr ... wait 600 und wieder ausschaltet. Kommt zwischendurch das "released", ändert das zweite DOIF seinen Zustand und geht wieder schlafen. Wenn nicht, schlägt die Zwangsabschaltung zu.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Oktober 2014, 17:37:02
Zitat von: Brockmann am 07 Oktober 2014, 15:24:02
Vielleicht hat Damian auch dafür eine Idee, aber ich stelle mir das schwierig vor, weil ja ein und dasselbe DOIF quasi auf dasselbe Ereignis unterschiedlich reagieren soll mit einer Verzögerung von 600s. Aber solange buttons auf "pressed" bleibt wird das DOIF eben nicht wieder getriggert und kann deshalb auch nicht erneut (anders) reagieren.

Eigentlich bietet sich dafür ein zweites DOIF an, das auf dasselbe Ereignis reagiert, aber mit attr ... wait 600 und wieder ausschaltet. Kommt zwischendurch das "released", ändert das zweite DOIF seinen Zustand und geht wieder schlafen. Wenn nicht, schlägt die Zwangsabschaltung zu.

Z. Zt. brauchst du für deine Anforderungen schon zwei DOIF´s. Später wird man so etwas evtl. auch mit einem DOIF realisieren können.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 07 Oktober 2014, 19:27:50
Hallo,
Vielen Dank. Dann kann man m.E auch den watchdog nehmen, der die Zwangsabschaltung überwacht. Ich hatte angenommen, es geht mit einer Anweisung, aber dann probiere ich es mal mit dem watchdog.

Ich hatte den watchdog schon laufen und parallel eine Anweisung mit on-for-timer gebaut, das Problem dabei war aber, dass der watchdog nicht die Lampe ausschaltet, solange der on-for-timer aktiv ist. Deshalb bin ich auf das DOIF gekommen. Ich hoffe, dass das watchdog Modul die Verzögerung des DOIF abbricht.... teste ich mal.
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 Oktober 2014, 15:33:22
Zitat von: Spartacus am 07 Oktober 2014, 19:27:50
Ich hoffe, dass das watchdog Modul die Verzögerung des DOIF abbricht.... teste ich mal.

Das wird der nicht tun, wie auch.

Allerdings schließt das eine Ereignis das andere aus, daher sollte zum ersten DOIF ein zweites ausreichen, also:


define di_Benachrichtigung DOIF ([EnO_switch_00001010:buttons] eq "pressed") ({email()}, set Lampe off)

attr di_Benachrichtigung wait 600


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 08 Oktober 2014, 20:15:40
Hi Damian,
ja! was soll ich sagen, Du hattest recht! Deine Anweisung funktioniert und löst mein Problem!

Danke und Gruß,
Christian.

Titel: Antw:neues Modul DOIF
Beitrag von: oniT am 12 Oktober 2014, 20:56:02
Hallo Damian,

zunächst einmal muss ich sagen, ich finde das Modul ziemlich gut und versuche mich nach und nach ein wenig ranzutasten. Jetzt habe ich eine Frage dazu und hoffe diese wurde nich schon beantwortet :-) Ich lese zwar in diesem Thread ab und zu mit, weiß jedoch nicht ob diese Frage bereits gestellt wurde.

Und zwar wird jedesmal bei einer Ausführung ein Eintrag in das Logfile des Device erzeugt.

Zum Beispiel:


2014-10-12_20:40:40 opvenval 0
2014-10-12_20:40:37 opvd1val 0
2014-10-12_20:39:43 opzupval 0
2014-10-12_20:39:37 ophupval 1
2014-10-12_20:39:25 doif_push_hp_ophupval disabled
2014-10-12_20:29:37 ophupval 0
2014-10-12_20:27:37 opwupval 0
2014-10-12_20:26:37 opsolval 0
2014-10-12_20:26:37 opflhval 0
2014-10-12_20:19:37 op2weval 0
2014-10-12_20:11:37 opwupval 0
2014-10-12_20:09:40 opzupval 0
2014-10-12_20:09:40 opvenval 0
2014-10-12_20:09:37 opvd1val 0
2014-10-12_19:59:42 doif_push_hp_ophupval cmd_2
2014-10-12_19:59:42 doif_push_hp_ophupval cmd_event: ophupval
2014-10-12_19:59:42 doif_push_hp_ophupval cmd_nr: 2
2014-10-12_19:59:37 ophupval 0
2014-10-12_19:55:38 opsolval 0
2014-10-12_19:55:38 opflhval 0
2014-10-12_19:55:38 opwupval 0
2014-10-12_19:52:44 doif_push_hp_ophupval cmd_1
2014-10-12_19:52:44 doif_push_hp_ophupval cmd_event: ophupval
2014-10-12_19:52:44 doif_push_hp_ophupval cmd_nr: 1
2014-10-12_19:52:37 ophupval 1


Ist das so gewollt und kann man das verhindern? Rein von der Definition her dürfte es ja nicht passieren denke ich.


./log/WP_D-%Y-%m-%d.log opvd1val|opvenval|op2weval|ophupval|opwupval|opzupval|opflhval|opsolval


Danke

Gruß,
Tino
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Oktober 2014, 21:16:57
Zitat von: oniT am 12 Oktober 2014, 20:56:02
Hallo Damian,

zunächst einmal muss ich sagen, ich finde das Modul ziemlich gut und versuche mich nach und nach ein wenig ranzutasten. Jetzt habe ich eine Frage dazu und hoffe diese wurde nich schon beantwortet :-) Ich lese zwar in diesem Thread ab und zu mit, weiß jedoch nicht ob diese Frage bereits gestellt wurde.

Und zwar wird jedesmal bei einer Ausführung ein Eintrag in das Logfile des Device erzeugt.

Zum Beispiel:


2014-10-12_20:40:40 opvenval 0
2014-10-12_20:40:37 opvd1val 0
2014-10-12_20:39:43 opzupval 0
2014-10-12_20:39:37 ophupval 1
2014-10-12_20:39:25 doif_push_hp_ophupval disabled
2014-10-12_20:29:37 ophupval 0
2014-10-12_20:27:37 opwupval 0
2014-10-12_20:26:37 opsolval 0
2014-10-12_20:26:37 opflhval 0
2014-10-12_20:19:37 op2weval 0
2014-10-12_20:11:37 opwupval 0
2014-10-12_20:09:40 opzupval 0
2014-10-12_20:09:40 opvenval 0
2014-10-12_20:09:37 opvd1val 0
2014-10-12_19:59:42 doif_push_hp_ophupval cmd_2
2014-10-12_19:59:42 doif_push_hp_ophupval cmd_event: ophupval
2014-10-12_19:59:42 doif_push_hp_ophupval cmd_nr: 2
2014-10-12_19:59:37 ophupval 0
2014-10-12_19:55:38 opsolval 0
2014-10-12_19:55:38 opflhval 0
2014-10-12_19:55:38 opwupval 0
2014-10-12_19:52:44 doif_push_hp_ophupval cmd_1
2014-10-12_19:52:44 doif_push_hp_ophupval cmd_event: ophupval
2014-10-12_19:52:44 doif_push_hp_ophupval cmd_nr: 1
2014-10-12_19:52:37 ophupval 1


Ist das so gewollt und kann man das verhindern? Rein von der Definition her dürfte es ja nicht passieren denke ich.


./log/WP_D-%Y-%m-%d.log opvd1val|opvenval|op2weval|ophupval|opwupval|opzupval|opflhval|opsolval


Danke

Gruß,
Tino

Dass DOIF Events erzeugt, ist beabsichtigt, um in anderen Modulen darauf reagieren zu können. Was du genau loggen willst oder eben nicht, musst du über regexp (reguläre Ausdrücke) in deiner log-Definition genauer (eindeutiger) spezifizieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: oniT am 12 Oktober 2014, 21:42:46
Hallo,

ok, das DOIF Events erzeugt ist mir klar und macht ja auch nichts. Was ist den in der Regexp beim Eintrag in das Logfile falsch, dass der Eintrag dann erscheint? Das verstehe ich nicht.


./log/WP_D-%Y-%m-%d.log opvd1val|opvenval|op2weval|ophupval|opwupval|opzupval|opflhval|opsolval



([opwupval:state] == 1)(set PushBulletiPhone message An | An | iPhone) DOELSEIF ([opwupval:state] == 0)(set PushBulletiPhone message Aus | Aus | iPhone)


Danke

Gruß,
Tino
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Oktober 2014, 22:06:01
Zitat von: oniT am 12 Oktober 2014, 21:42:46


./log/WP_D-%Y-%m-%d.log opvd1val|opvenval|op2weval|ophupval|opwupval|opzupval|opflhval|opsolval



Eines der Schlüsselwörter kommt offenbar im Namen des DOIF-Moduls vor. Genauere Syntax zu regexp-Angaben beim Filelog siehe:

http://fhem.de/commandref_DE.html#FileLog

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 13 Oktober 2014, 09:19:17
Hallo Zusammen,

ich möchte jetzt in Bezug auf DOIF folgendes umsetzen, eine Lampe/Schalter soll nur alle 14 Tage an den Wochenenden an sein (Ab Freitag 18 Uhr zum Beispiel bis Sonntag 23:59).
Ich habe das jetzt als DOIF so realisiert:

([18:00|5] and $yday % 14 == 0) (set TESTLAMPE on) DOELSEIF ([23:59|0] and $yday % 14 == 0) (set TESTLAMPE off)


Sollte doch funktionieren oder? Wie beeinflusse ich jetzt das auch der 14 Tagesryhtmus genommen wird, den ich brauche? Starten soll es jetzt diesen Freitag, danach alle 2 Wochen.

Gruß
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Oktober 2014, 09:59:10
Zitat von: Jens_B am 13 Oktober 2014, 09:19:17
Hallo Zusammen,

ich möchte jetzt in Bezug auf DOIF folgendes umsetzen, eine Lampe/Schalter soll nur alle 14 Tage an den Wochenenden an sein (Ab Freitag 18 Uhr zum Beispiel bis Sonntag 23:59).
Ich habe das jetzt als DOIF so realisiert:

([18:00|5] and $yday % 14 == 0) (set TESTLAMPE on) DOELSEIF ([23:59|0] and $yday % 14 == 0) (set TESTLAMPE off)


Sollte doch funktionieren oder? Wie beeinflusse ich jetzt das auch der 14 Tagesryhtmus genommen wird, den ich brauche? Starten soll es jetzt diesen Freitag, danach alle 2 Wochen.

Gruß
Jens

Wird so nicht gut funktionieren. Die Wahrscheinlichkeit, dass am Freitag sich der Tag des Jahres durch 14 teilen lässt, ist 1 zu 7, also eher unwahrscheinlich, in diesem Jahr sogar 0 %   ;)

Dann eher:

([18:00|5] and strftime("%W",localtime)%2 == 1)
  (set TESTLAMPE on)
DOELSEIF ([23:59|0] and strftime("%W",localtime)%2 == 1)
  (set TESTLAMPE off)


Damit geht es diese Woche los, da wir diese Woche eine ungerade Wochennummer haben.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 13 Oktober 2014, 10:39:53
ZitatWird so nicht gut funktionieren. Die Wahrscheinlichkeit, dass am Freitag sich der Tag des Jahres durch 14 teilen lässt, ist 1 zu 14, also eher unwahrscheinlich, in diesem Jahr sogar 0 % 

Ja logisch, das war wieder zu "schnell" überlegt ;-)

([18:00|5] and strftime("%W",localtime)%2 == 1)
  (set TESTLAMPE on)
DOELSEIF ([23:59|0] and strftime("%W",localtime)%2 == 1)
  (set TESTLAMPE off)


Hm, also strftime gibt mir die Woche im Jahr aus... Wußte ich noch nicht "%" ist Modulo, bei Rest 1 wäre es ne ungerade Woche... Gut, hab ich verstanden :)

Gruß
Jens
Titel: Antw:neues Modul DOIF
Beitrag von: oniT am 13 Oktober 2014, 22:03:13
Zitat von: Damian am 12 Oktober 2014, 22:06:01
Eines der Schlüsselwörter kommt offenbar im Namen des DOIF-Moduls vor. Genauere Syntax zu regexp-Angaben beim Filelog siehe:

http://fhem.de/commandref_DE.html#FileLog

Gruß

Damian

Hallo Damian,

ok, gelöst. Ja im Namen des DOIF-Moduls war eines der Schlüsselwörter enthalten. Damit habe ich nicht gerechnet, dass der Name doif_push_hp_opwupval ein Event für einen Eintrag im Logfile auslöst nur weil das Wort opwupval vorkommt. Ich hätte angenommen, dass durch den Zusatz doif_push_hp_ dies nicht passiert. Ich habe es umbenannt und schon funktioniert's.

Danke,

Gruß
Tino
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 16 Oktober 2014, 22:54:44
Hallo,
ich habe im Praxistest festgestellt, dass diese Notabschaltung
define di_Benachrichtigung DOIF ([EnO_switch_00001010:buttons] eq "pressed") ({email()}, set Lampe off)

attr di_Benachrichtigung wait 600

in Zusammenhang mit diesem DOIF
define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on) DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off)
attr LichtAn cmdState on|off
attr LichtAn room EnOcean
attr LichtAn wait 0:10


nicht so funktioniert, wie es soll!
Greift di_Benachrichtigung nach 600s, weil die Lichtschranke blockiert ist (pressed), dann schaltet die Lampe korrekter Weise ab und auch die Mail wird gesendet. Gibt man nun den Zustand der Lichtschranke wieder frei (released), kommt trotzdem das Attribut "wait" aus "LichtAn" zum Tragen. Es soll aber erreicht werden, dass der Eingang direkt wieder schaltet, wenn die Blockade behoben wird.

Hier müsste das di-Benachrichtigung das LichtAn quasi zurücksetzten, damit das nächste "pressed" auch das Licht wieder einschaltet.

wie könnte man das realisieren?

Spartacus.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 16 Oktober 2014, 23:43:06
Könnte mit:

define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on) DOELSEIF ([di_Benachrichtigung] eq "cmd_2") DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off)
attr LichtAn wait 0:0:10
attr LichtAn cmdState on|off|off


besser funktionieren. Damit wird ein Zustandswechsel in LichtAn erreicht, nach dem die Lampe beim nächsten "pressed" sofort angehen sollte.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 17 Oktober 2014, 16:03:02
Hi Damian,
irgendwie habe ich es noch nicht verstanden!
Fehlt da nicht bei diesem DOIF noch eine Aktion? zB. set Lampe off?
DOELSEIF ([di_Benachrichtigung] eq "cmd_2")

So oder so!
wenn ich das so teste, wie Du gepostet hast, bleibt der Aktor an.
wenn ich das DOELSEIF ergänze, schaltet der Aktor nur kurz ein, und direkt wieder aus.

Spartacus.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 Oktober 2014, 16:20:38
Zitat von: Spartacus am 17 Oktober 2014, 16:03:02
Hi Damian,
irgendwie habe ich es noch nicht verstanden!
Fehlt da nicht bei diesem DOIF noch eine Aktion? zB. set Lampe off?
DOELSEIF ([di_Benachrichtigung] eq "cmd_2")

So oder so!
wenn ich das so teste, wie Du gepostet hast, bleibt der Aktor an.
wenn ich das DOELSEIF ergänze, schaltet der Aktor nur kurz ein, und direkt wieder aus.

Spartacus.

Dann habe ich dein Problem offenbar noch nicht verstanden. Wenn deine Lichtschranke "hängen bleibt", dann setzt du button auf release. Damit geht di_Benachrichtigung auf cmd_2 und 10 Sekunden später ginge LichtAn auf off in der ursprünglichen Konstellation. Wenn du innerhalb der 10 Sekunden die Lichtschranke wieder auf pressed geht, dann sollte die Lampe brennen bleiben, da sie noch gar nicht ausgegangen ist, bis wieder release kommt und 10 Sekunden später die Lampe ausgeschaltet wird. Es gibt also nach dem manuell ausgelösten "release" nur den Fall Lampe brennt weiter, wenn innerhalb von 10 Sekunden press kommt oder Lampe geht nach 10 Sekunden aus. Ein verzögertes Einschalten kann nicht nachvollziehen.
Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 17 Oktober 2014, 17:47:36
Hallo Damian,
die Wahrscheinlich, dass ich es falsch beschrieben habe,  ist größer :D

Ich versuche es noch einmal:

wenn die Lichtschranke betätigt wird, dann schaltet der Eingang vom FSR14 von  "released" aud "pressed". Der Impuls am Eingang, wenn jemand die LS durchschreitet, sieht so aus:
"released"->"pressed"->"released".

Der Aktor wird geschaltet, wenn der Zustand auf "pressed" geht. Die Abschaltverzögerung wird aber erst gestartet, wenn der Eingang auf "released" zurückgefallen ist. Das hat den Vorteil, das das Licht nachgetriggert wird, wenn  die LS -z.B. beim Ausladen von Einkäufen- immer wieder kurz durchschritten wird. Das ist auch so gewollt!

Die Notabschaltung hat nun folgende Funktion:
Wird die LS blockiert (z.B. durch Schneefall im Winter, absichtliches Zustellen) dann liegt das Signal "pressed" dauerhaft an. Parallel zur oberen Funktion, die das Licht über "pressed" einschaltet, wird ein zweiter Timer gestartet, der den Status "pressed" überwacht und nach Ablauf der Zeit t die Lampe zwangsabschaltet.

Wird der Fehler behoben (Schnee schippen!) und ist der Zustand am Eingang wieder auf "released" zurückgefallen, dann muss das Licht auch wieder direkt einschalten, wenn die LS durchschritten wird.

Mit Deiner ursprünglichen Kombination aus LichtAn und diBenachrichtigung hat das funktioniert. Allerdings blockierte der Aktor nach der Notabschaltung für die Dauer der "wait-Zeit" im Modul LichtAn. Das heißt, erst nach Ablauf des Timers (wait=10s), konnte das Licht erneut eingeschaltet werden, wenn der die LS betätigt wurde.Das ist mir bei den 10s nicht aufgefallen, im Realbetrieb mit einer Verzögerung von 120s habe ich mich gewundert, warum nach Notabschaltung und Behebung des Fehlers, die Lampe nicht einschalteten wollte, wenn ich die LS durchschritt.

Die LS ist nur eines von zwei Devices. Das zweite Device ist ein Reedkontakt, der bei aufstehender Haustür das Signal "pressed" und im geschlossenen Zustand "released" sendet. Analog zur LS soll auch hier das Licht abgeschaltet werden, wenn die Haustür länger als 10min offen steht (man will ja niemanden durch das brennende Licht auf die offen stehende Haustür aufmerksam machen)

Ich hoffe, ich konnte meinen Anwendungsfall verständlich beschreiben.

Spartacus.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 Oktober 2014, 18:38:57
Zitat von: Spartacus am 17 Oktober 2014, 17:47:36
Wird der Fehler behoben (Schnee schippen!) und ist der Zustand am Eingang wieder auf "released" zurückgefallen, dann muss das Licht auch wieder direkt einschalten, wenn die LS durchschritten wird.

Dann hast du mir wahrscheinlich auch jetzt eine Information vorenthalten, nämlich dass du das Licht im Falle eines "Notfalls" manuell abschaltet, denn warum sollte es direkt einschalten, wenn es noch gar nicht aus war. Wenn du das Licht manuell schaltest, dann stimmt natürlich der Zustand der Lampe nicht mit dem Zustand des Moduls. Das hatte ich versucht durch den weiteren DOELSEIF-Fall zu synchronisieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 17 Oktober 2014, 19:11:30
Hi Damian,
ne, falsch verstanden! Hier wird nichts manuell abgeschaltet! Die Abschaltung erfolgt nur durch das "di_Benachrichtigung"!

Nehmen wir an, es schneit! (zum Glück wird es morgen 25 Grad!  8))
Der Schnee blockiert irgendwann die Lichtschranke ("released"->"pressed"), Licht schaltet ein und wird ständig nachgetriggert, da Zustand="pressed". Nach 10min. greift der Timer der Notabschaltung, das Licht geht aus.

Das heißt: Schranke ist blockiert ("pressed"), Licht ist aber aus!

Nun schaufelt der fleißige Hausbesitzer am späten Abend den Schnee weg, der Zustand des Eingangs ändert sich von "pressed" auf "released", das  Licht bleibt aber aus. Soweit alles gut!

Wenn jetzt der Hausbesitzer in sein warmes Haus zurückkehrt, durchschreitet er erneut die LS und das Licht sollte nun wieder einschalten, da nun der ursprüngliche Zustand (LS="released") wieder hergestellt ist. Und genau das passiert nicht!

Nachdem der Schnee weggeräumt wurde ("pressed"->"released") startet die Ausschaltverzögerung des Moduls "LichtAn" (obwohl Lich aus ist) und verhindert für die Dauer der Ausschaltverzögerung das erneute Einschalten durch den Eingang der LS.

Das heißt:
Durchschreitet jemand während dieser 10s die LS erneut, schaltet das Licht nicht ein. Erst nach Ablauf der Verzögerungszeit kann man durch erneutes Durchschreiten der LS den Aktor schalten.

Das mag kleinkariert klingen, ist auch bei 10s nicht tragisch. Bei 2-3min Ausschaltverzögerung aber ungünstig, da sich der Aktor während dieser Zeit nicht einschalten lässt.
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Oktober 2014, 08:11:09
Zitat von: Spartacus am 17 Oktober 2014, 19:11:30
Hi Damian,
ne, falsch verstanden! Hier wird nichts manuell abgeschaltet! Die Abschaltung erfolgt nur durch das "di_Benachrichtigung"!

Nehmen wir an, es schneit! (zum Glück wird es morgen 25 Grad!  8))
Der Schnee blockiert irgendwann die Lichtschranke ("released"->"pressed"), Licht schaltet ein und wird ständig nachgetriggert, da Zustand="pressed". Nach 10min. greift der Timer der Notabschaltung, das Licht geht aus.

Das heißt: Schranke ist blockiert ("pressed"), Licht ist aber aus!

Nun schaufelt der fleißige Hausbesitzer am späten Abend den Schnee weg, der Zustand des Eingangs ändert sich von "pressed" auf "released", das  Licht bleibt aber aus. Soweit alles gut!

Wenn jetzt der Hausbesitzer in sein warmes Haus zurückkehrt, durchschreitet er erneut die LS und das Licht sollte nun wieder einschalten, da nun der ursprüngliche Zustand (LS="released") wieder hergestellt ist. Und genau das passiert nicht!

Nachdem der Schnee weggeräumt wurde ("pressed"->"released") startet die Ausschaltverzögerung des Moduls "LichtAn" (obwohl Lich aus ist) und verhindert für die Dauer der Ausschaltverzögerung das erneute Einschalten durch den Eingang der LS.

Das heißt:
Durchschreitet jemand während dieser 10s die LS erneut, schaltet das Licht nicht ein. Erst nach Ablauf der Verzögerungszeit kann man durch erneutes Durchschreiten der LS den Aktor schalten.

Das mag kleinkariert klingen, ist auch bei 10s nicht tragisch. Bei 2-3min Ausschaltverzögerung aber ungünstig, da sich der Aktor während dieser Zeit nicht einschalten lässt.
Christian.

OK. Ich habe übersehen, dass neben der E-Mail auch das Licht ausgeschaltet wird. ???

define Notaus dummy
define di_Benachrichtigung DOIF ([EnO_switch_00001010:buttons] eq "pressed") ({email()}, set Lampe off, set Notaus on)
define LichtAn DOIF ([EnO_switch_00001010:buttons] eq "pressed")(set Lampe on)  DOELSEIF ([EnO_switch_00001010:buttons] eq "released") (set Lampe off) DOELSEIF ([Notaus] eq "on")
attr LichtAn wait 0:10:0
attr LichtAn cmdState on|off|off



Ich habe nun die beiden DOIF-Module über einen Dummy gekoppelt. Im Falle der Notabschaltung sollte nun durch die zusätzliche DOELSEIF-Abfrage auch der Zustand von LichtAn sofort auf off gehen, ohne etwas zu schalten, denn die Lampe wurde ja bereits ausgeschaltet. Danach sollte die Lampe sofort wieder angehen, denn nun weiß das DOIF-Modul, dass die Lampe aus ist.

Das ist natürlich "durch die Brust ins Auge". Zukünftig wirst du das Problem mit einem einzigen DOIF-Modul lösen können.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 18 Oktober 2014, 08:45:23
Damian,
erst einmal vielen Dank für Deine Antwort. Ich werde das mal  testen.
Wie ich Deinem Post entnehmen kannst, planst Du das DOIF zu erweitern um solche Aufgabenstellungen einfacher zu lösen.
Das finde ich großartig!

Aber heute gibt es vermutlich den letzten Sommertag! Also lieber mal Pause machen und ab in den Garten......

Ich melde mich...
Vielen Dank,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Oktober 2014, 08:53:24
Zitat von: Spartacus am 18 Oktober 2014, 08:45:23
Damian,
erst einmal vielen Dank für Deine Antwort. Ich werde das mal  testen.
Wie ich Deinem Post entnehmen kannst, planst Du das DOIF zu erweitern um solche Aufgabenstellungen einfacher zu lösen.
Das finde ich großartig!

Aber heute gibt es vermutlich den letzten Sommertag! Also lieber mal Pause machen und ab in den Garten......

Ich melde mich...
Vielen Dank,
Christian

Keine Sorge, vor Weihnachten wird es nichts, dafür dann aber richtig - es wird einige mächtige Erweiterungen des Moduls geben  :) . Das Pflichtenheft habe ich schon fertig, ich muss es nur noch umsetzen.  Es gibt aber noch andere Dinge außer FHEM im Leben.  :)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 18 Oktober 2014, 12:14:04
....das meine ich ja!

Alles Guten, und viel Spaß bei dem (hoffentlich auch bei Dir) so tollen Wetter,
Spartacus
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 18 Oktober 2014, 13:24:41
Hallo,
eine Frage noch!
Warum wird Notaus niemals auf Off gesetzt? Es scheint zwar zu funktionieren, aber ich verstehe es nicht!
Manchmal schaltet der Aktor zwar nicht, aber ich fürchte, das liegt an meiner EnOcean Umgebung
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 18 Oktober 2014, 13:31:01
Hallo,

ich hab im obigen Code nichts gefunden mit dem dein Dummy off geschalten werden sollte - oder hab ich was übersehen?

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 18 Oktober 2014, 13:53:14
Hi puschel,
genau die Frage habe ich mir auch gestellt! Das durchblicke ich nicht! Aber es funktioniert!
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Oktober 2014, 13:54:14
Zitat von: Spartacus am 18 Oktober 2014, 13:53:14
Hi puschel,
genau die Frage habe ich mir auch gestellt! Das durchblicke ich nicht! Aber es funktioniert!
Christian.

Bevor ich mich in die Sonne lege:

Durch das Setzen des Dummys auf "on" wird ein Event erzeugt, dadurch wird das LichtAn-Modul getriggert und die dazugehörige Bedingung  DOELSEIF ([Notaus] eq "on") ausgewertet. Das ist auch der einzige Sinn des Dummys. Man könnte auch lediglich DOELSEIF ([Notaus]) auswerten, weil nur der Trigger wichtig ist und der Zustand des Dummys für diese Konstruktion unwesentlich ist. Aber wie gesagt, zukünftig wird man diese Hilfskonstruktion eh nicht brauchen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 18 Oktober 2014, 14:18:18
Hallo,

Zitat von: Spartacus am 18 Oktober 2014, 13:53:14
Hi puschel,
genau die Frage habe ich mir auch gestellt! Das durchblicke ich nicht! Aber es funktioniert!
Christian.

Was "durchblickst" du nicht?
Das ein Device, und wenn es auch nur ein Dummy ist, nur geschalten wird wenn der entsprechende Befehl abgesetzt wird?
Ich dachte immer das sind die elementarsten Grundlagen die man eigentlich schon wissen sollte.

Aber gut - du musst den Befehl set Notaus off noch einbauen - und zwar dort wo es deiner Meinung nach Sinn macht  ;)

Oder besagt dein "aber es funktioniert" jetzt das der Dummy ausgeschalten wird auch wenn der Befehl dazu nicht abgesetzt wird?
Das würde mich nun aber einiges "nicht durchblicken" lassen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 18 Oktober 2014, 15:43:27
Ah!, verstehe!
Danke für die Aufklärung. Das ist genial!
....und jetzt ab in die Sonne....  8) 8) 8)
Christian.
Titel: Logicfrage oder besser: "Ist es richtig so?"
Beitrag von: Wuppi68 am 20 Oktober 2014, 13:42:29
Hallo,

ich habe mir folgendes DOIF eingestellt:
Internals:
   CFGFN
   DEF        (([harmony.hub.1:currentActivity] eq "BLUE RAY" or [harmony.hub.1:currentActivity] eq "DVD") and [dummy.rollade.1:state] eq "on") (set hm.rollade.2 pct 65, set hm.rollade.1 pct 65)
DOELSEIF ([dummy.rollade.1:state] eq "off") (set hm.rollade.2. off, IF ([hm.sec.1:state] eq "closed") set hm.rollade.1 off)
DOELSE (set hm.rollade.2 on, set hm.rollade.1 on)
   NAME       doif.media.film
   NR         1049
   NTFY_ORDER 50-doif.media.film
   STATE      cmd_3
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Mydblog:
           TIME       1413804423.30252
           VALUE      harmony.hub.1
       Cmd_nr:
         Mydblog:
           TIME       1413804423.30252
           VALUE      3
       State:
         Mydblog:
           TIME       1413804423.30252
           VALUE      cmd_3
   Readings:
     2014-10-20 13:27:03   cmd_event       harmony.hub.1
     2014-10-20 13:27:03   cmd_nr          3
     2014-10-20 13:27:06   e_harmony.hub.1_currentActivity NETZWERKPLAYER
     2014-10-20 13:27:03   state           cmd_3
   Condition:
     0          (ReadingValDoIf('harmony.hub.1','currentActivity','') eq "BLUE RAY" or ReadingValDoIf('harmony.hub.1','currentActivity','') eq "DVD") and ReadingValDoIf('dummy.rollade.1','state','') eq "on"
     1          ReadingValDoIf('dummy.rollade.1','state','') eq "off"
   Devices:
     0           harmony.hub.1 dummy.rollade.1
     1           dummy.rollade.1
     all         harmony.hub.1 dummy.rollade.1
   Do:
     0          set hm.rollade.2 pct 65, set hm.rollade.1 pct 65
     1          set hm.rollade.2. off, IF ([hm.sec.1:state] eq "closed") set hm.rollade.1 off
     2          set hm.rollade.2 on, set hm.rollade.1 on
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
   Readings:
     0           harmony.hub.1:currentActivity dummy.rollade.1:state
     1           dummy.rollade.1:state
     all         harmony.hub.1:currentActivity dummy.rollade.1:state
   State:
   Timerfunc:
Attributes:
   room       Media,Wohnzimmer


Folgendes ist gegeben:
hm.rollade.1 = Terassentür mit Sonderbehandlung
hm.rollade.1 = normales Fenster
dummy.rollade.1 "Sollzustand der Rollade (On = Offen, Off = geschlossen)

das Device hm.rollade.1 geht auf und nicht zu, wenn der Fensterkontakt (hm.sec.1) "open" ist


jetzt möchte ich folgendes:
Schaue ich einen Film (BLUE RAY oder DVD) Sollen die Rolladen  auf 65% fahren wenn die Rolladen NICHT geschlossen sind (das funktioniert perfekt in der ersten Bedingung :-) )
Film ist vorbei --> soll hm.rollade.2 wie im dummy.rollade.1 gesetzt ist (On oder Off) UND hm.rollade.1 soll genauso sein, wenn hm.sec.1 nicht open ist :-)

Habe ich es richtig gemacht?

Wirklich fragend

Ralf

hier noch einmal der DEF Teil aus der GUI zum leichter lesen

(([harmony.hub.1:currentActivity] eq "BLUE RAY" or [harmony.hub.1:currentActivity] eq "DVD") and [dummy.rollade.1:state] eq "on") (set hm.rollade.2 pct 65, set hm.rollade.1 pct 65)
DOELSEIF ([dummy.rollade.1:state] eq "off") (set hm.rollade.2. off, IF ([hm.sec.1:state] eq "closed") set hm.rollade.1 off)
DOELSE (set hm.rollade.2 on, set hm.rollade.1 on)
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 20 Oktober 2014, 15:38:23
Hallo,

ZitatHabe ich es richtig gemacht?
Funktioniert es den so wie du es möchtest?

Wenn ja hast du wohl alles richtig gemacht  ;)

Grüße
Titel: Antw:Logicfrage oder besser: "Ist es richtig so?"
Beitrag von: Damian am 20 Oktober 2014, 16:06:08
Zitat von: Wuppi68 am 20 Oktober 2014, 13:42:29

Habe ich es richtig gemacht?

Ob es richtig funktioniert oder nicht, kannst nur du beurteilen. Grundsätzlich ist nichts falsch, was deinen Anforderungen entspricht. Bei IF musst du allerdings den Befehl ebenfalls in Klammen setzen, also:

IF ([hm.sec.1:state] eq "closed") (set hm.rollade.1 off)

Gruß

Damian
Titel: Antw:Logicfrage oder besser: "Ist es richtig so?"
Beitrag von: Wuppi68 am 20 Oktober 2014, 19:50:04
Zitat von: Damian am 20 Oktober 2014, 16:06:08
Ob es richtig funktioniert oder nicht, kannst nur du beurteilen. Grundsätzlich ist nichts falsch, was deinen Anforderungen entspricht. Bei IF musst du allerdings den Befehl ebenfalls in Klammen setzen, also:

IF ([hm.sec.1:state] eq "closed") (set hm.rollade.1 off)

Gruß

Damian

Danke Damian,

es klappt noch nicht ganz :-( Werde aber jetzt noch einmal alle Zustände durchgehen ...

für das IF hätte ich wahrscheinlich etwas länger gebraucht - noch einmal Danke

cu

Ralf
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Oktober 2014, 14:09:33
Hallo,
ich bin es noch mal! Habe nun ein anderes Problem mit dem DOIF:

define Heizung DOIF([DS18B20_Gartenhaus:temperature] >1.5) (set EnO_FSR14_GH_D off)
DOELSEIF ([DS18B20_Gartenhaus:temperature] <0.5 and {(!$isdst)}) (set EnO_FSR14_GH_D on)


Der Frostwächter soll nur einschalten, wenn die Sommerzeit beendet ist. $isdst steht momentan auf "1" . Somit sollte die "und"-Verknüpfung nicht erfüllt sein und die Heizung ausbleiben. Allerdings schaltet die Heizung trotzdem!

Wo habe ich jetzt den Fehler in meinem DOIF?

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Oktober 2014, 20:58:17
Zitat von: Spartacus am 21 Oktober 2014, 14:09:33
Hallo,
ich bin es noch mal! Habe nun ein anderes Problem mit dem DOIF:

define Heizung DOIF([DS18B20_Gartenhaus:temperature] >1.5) (set EnO_FSR14_GH_D off)
DOELSEIF ([DS18B20_Gartenhaus:temperature] <0.5 and {(!$isdst)}) (set EnO_FSR14_GH_D on)


Der Frostwächter soll nur einschalten, wenn die Sommerzeit beendet ist. $isdst steht momentan auf "1" . Somit sollte die "und"-Verknüpfung nicht erfüllt sein und die Heizung ausbleiben. Allerdings schaltet die Heizung trotzdem!

Wo habe ich jetzt den Fehler in meinem DOIF?

Christian

In der Bedingung gilt die normale Perlsyntax, außer "Sachen" in eckigen Klammern, also:
... ([DS18B20_Gartenhaus:temperature] <0.5 and !$isdst)...

Gruß

Damian
Titel: Antw:Logicfrage oder besser: "Ist es richtig so?"
Beitrag von: Wuppi68 am 21 Oktober 2014, 21:15:29
Zitat von: Wuppi68 am 20 Oktober 2014, 19:50:04
Danke Damian,

es klappt noch nicht ganz :-( Werde aber jetzt noch einmal alle Zustände durchgehen ...

für das IF hätte ich wahrscheinlich etwas länger gebraucht - noch einmal Danke

cu

Ralf

Wollte noch "meine" Lösung des Problemes einstellen ...

hier der Teil aus dem GUI mit dem DEF

([harmony.hub.1:currentActivity] eq "BLUE RAY" or [harmony.hub.1:currentActivity] eq "DVD")
  (
    IF ([dummy.rollade.1:state] eq "on")
       (set hm.rollade.2 pct 65, set hm.rollade.1 pct 65)
    ELSE
       (set hm.rollade.2 off, IF ([hm.sec.1:state] eq "closed") (set hm.rollade.1 off) )
  )
DOELSE
  (
    IF ([dummy.rollade.1:state] eq "on")
      (set hm.rollade.2 on, set hm.rollade.1 on)
    ELSE
       (set hm.rollade.2 off, IF ([hm.sec.1:state] eq "closed") (set hm.rollade.1 off)
  )
)
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Oktober 2014, 21:45:25
Zitat von: Damian am 21 Oktober 2014, 20:58:17
In der Bedingung gilt die normale Perlsyntax, außer "Sachen" in eckigen Klammern, also:
... ([DS18B20_Gartenhaus:temperature] <0.5 and !$isdst)...

Gruß

Damian
Hallo Damian,
danke für den Hinweis! Scheint zu funzen. Jetzt aber noch eine Frage:

Wenn man den Code in der DOIF ändert, dann ändert sich der State auf "initialized". Es dauert eine ganze Zeit, bis sich ein Status (cmd1, cmd2) einstellt. Was passiert da im Hintergrund, und kann man einen definierten State einfach setzten?

Spartacus
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Oktober 2014, 21:50:12
Zitat von: Spartacus am 21 Oktober 2014, 21:45:25
Hallo Damian,
danke für den Hinweis! Scheint zu funzen. Jetzt aber noch eine Frage:

Wenn man den Code in der DOIF ändert, dann ändert sich der State auf "initialized". Es dauert eine ganze Zeit, bis sich ein Status (cmd1, cmd2) einstellt. Was passiert da im Hintergrund, und kann man einen definierten State einfach setzten?

Spartacus

Der Status kann sich nur ändern, wenn ein Event kommt oder ein Timer zuschlägt. Solange bei dir dein Temperatursensor nichts sendet, wird auch nichts passieren. Status kann man nicht explizit setzen.
Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 22 Oktober 2014, 07:18:59
Hallo,
Denke Damian.
Gruss, Christian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 25 Oktober 2014, 18:54:56
Hallo.
Habe problem mit folgenden DOIF

([Fenster_WZ] eq "Open" and [Heizungsmode] eq "auto") (set HZ_Wohnzimmer_Clima controlManu 16)
DOELSE ([Fenster_WZ] eq "Closed" and [Heizungsmode] eq "auto") (set HZ_Wohnzimmer_Clima controlMode auto)


last_error
   
Closed eq "Closed"; and auto eq "auto": Unknown command Closed, try help. Unknown command and, try help.

Was ist damit gemeint?
Fenster_WZ ist eine structure

gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Oktober 2014, 18:59:00
Zitat von: satprofi am 25 Oktober 2014, 18:54:56
Hallo.
Habe problem mit folgenden DOIF

([Fenster_WZ] eq "Open" and [Heizungsmode] eq "auto") (set HZ_Wohnzimmer_Clima controlManu 16)
DOELSE ([Fenster_WZ] eq "Open" and [Heizungsmode] eq "auto") (set HZ_Wohnzimmer_Clima controlMode auto)


last_error
   
Closed eq "Closed"; and auto eq "auto": Unknown command Closed, try help. Unknown command and, try help.

Was ist damit gemeint?
Fenster_WZ ist eine structure

gruss

Wahrscheinlich meinst du DOELSEIF statt DOELSE.  DOELSE hat keine Bedingung.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 25 Oktober 2014, 19:04:06
sorry,
zeile lautet

DOELSE ([Fenster_WZ] eq "Closed" and [Heizungsmode] eq "auto") (set HZ_Wohnzimmer_Clima controlMode auto)
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 25 Oktober 2014, 19:07:33
Hallo,

Ändert aber an Daminas Erklärung nichts.
ZitatWahrscheinlich meinst du DOELSEIF statt DOELSE.  DOELSE hat keine Bedingung.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 25 Oktober 2014, 19:20:21
Alles klar, kapiert.

Thx u. lg
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 26 Oktober 2014, 17:40:32
Hallo, ich versuche mir ansagen zu lassen, wenn ein Fenster auf ist, wenn ich das Haus verlasse:

(([MK_Haustuer] eq "auf") and ([MK_Bad1] eq "auf" or [MK_Gast] eq "auf" or [MK_Bad2] eq "auf" or [MK_Heizung] eq "auf" or [MK_Kueche] eq "auf" or [MK_Terrasse] eq "auf" or [MK_Schlafzimmer] eq "auf")) (set Tablet ttsSay "@ ist auf") DOELSE (set Tablet ttsSay "Alles zu, tschüss, bis bald"))

dieser Versuch ist allerdings misslungen, wenn alles zu ist, passt es, wenn etwas auf ist möchte ich hören was auf ist, haut aber nicht hin...

Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Oktober 2014, 17:45:30
Zitat von: knochenmuehle am 26 Oktober 2014, 17:40:32
Hallo, ich versuche mir ansagen zu lassen, wenn ein Fenster auf ist, wenn ich das Haus verlasse:

(([MK_Haustuer] eq "auf") and ([MK_Bad1] eq "auf" or [MK_Gast] eq "auf" or [MK_Bad2] eq "auf" or [MK_Heizung] eq "auf" or [MK_Kueche] eq "auf" or [MK_Terrasse] eq "auf" or [MK_Schlafzimmer] eq "auf")) (set Tablet ttsSay "@ ist auf") DOELSE (set Tablet ttsSay "Alles zu, tschüss, bis bald"))

dieser Versuch ist allerdings misslungen, wenn alles zu ist, passt es, wenn etwas auf ist möchte ich hören was auf ist, haut aber nicht hin...

Andreas

@ gibt es bei DOIF nicht. Es ist eine Eigenschaft von notify.

Du kannst aber deine Fenster in eine Structure packen, diese in DOIF abfragen (dann wird die Abfrage auch wesentlich einfacher) und bei set  Tablet ttsSay  [<deine Structure>:LastDevice] angeben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 26 Oktober 2014, 18:03:39
Zitat von: Damian am 26 Oktober 2014, 17:45:30
Du kannst aber deine Fenster in eine Structure packen, diese in DOIF abfragen (dann wird die Abfrage auch wesentlich einfacher) und bei set  Tablet ttsSay  [<deine Structure>:LastDevice] angeben.
Ich weiß nicht, ob das in diesem Fall hinhaut. Wenn ich zwei Fenster offen habe, eines schließe und dann rausgehe, dann ist das geschlossene das LastDevice und nicht das offene, oder?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Oktober 2014, 19:12:49
Zitat von: Brockmann am 26 Oktober 2014, 18:03:39
Ich weiß nicht, ob das in diesem Fall hinhaut. Wenn ich zwei Fenster offen habe, eines schließe und dann rausgehe, dann ist das geschlossene das LastDevice und nicht das offene, oder?

Stimmt. An den Fall habe ich nicht gedacht. Dann bleibt wohl nur der notify übrig oder mehrere DOELSEIF-Fälle.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 26 Oktober 2014, 19:37:55
Zitat von: Damian am 26 Oktober 2014, 19:12:49
Stimmt. An den Fall habe ich nicht gedacht. Dann bleibt wohl nur der notify übrig oder mehrere DOELSEIF-Fälle.
Man könnte sich eine eigene Perl-Funktion bauen, die alle Fensterobjekte durchgeht und die zurückliefert, die "open" sind.
Eigentlich schade, denn im Prinzip "weiß" DOIF ja, wer die Bedingung erfüllt hat. Wären in solche Szenarien praktisch, wenn man das verwenden könnte.
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 26 Oktober 2014, 19:53:17
Hallo Andreas,

vor dem gleichen Problem stand ich auch.
Hier die Lösung, die hervorragend funktioniert, es werden genau die offenen Fenster angesagt:

http://forum.fhem.de/index.php/topic,10628.msg162593.html#msg162593
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Oktober 2014, 19:53:45
Zitat von: Brockmann am 26 Oktober 2014, 19:37:55
Man könnte sich eine eigene Perl-Funktion bauen, die alle Fensterobjekte durchgeht und die zurückliefert, die "open" sind.
Eigentlich schade, denn im Prinzip "weiß" DOIF ja, wer die Bedingung erfüllt hat. Wären in solche Szenarien praktisch, wenn man das verwenden könnte.

ja, der Reading cmd_event im DOIF-Modul mit dem Namen des letzten Devices wird erst beim Setzen des Status geschrieben, daher leider paar Millisekunden zu spät. Ich denke, da kann ich sicherlich zukünftig noch etwas in DOIF einbauen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 26 Oktober 2014, 20:05:04
Zitat von: Damian am 26 Oktober 2014, 19:53:45
ja, der Reading cmd_event im DOIF-Modul mit dem Namen des letzten Devices wird erst beim Setzen des Status geschrieben, daher leider paar Millisekunden zu spät. Ich denke, da kann ich sicherlich zukünftig noch etwas in DOIF einbauen.
Daran hatte ich auch zuerst gedacht, aber das wäre - zumindest ist diesem Fall - auch keine Lösung. Denn in der Regel ist hier ja das Öffnen der Haustür der Trigger und nicht das Öffnen eines Fensters. Demzufolge würde im cmd_event die Haustür stehen...
Eine spontane Idee (ggf. für die sehr erweiterte ToDo-Liste): Wenn DOIF irgendwie die Werte der getroffenen Bedingung als Liste von Name:Wert-Paare zugänglich machen würde, also z. B.
"MK_Haustuer:auf;MK_Bad1:zu;MK_Gast:auf;MK_Bad2:zu;MK_Heizung:zu;MK_Kueche:zu;MK_Terrasse:zu;MK_Schlafzimmer:zu"
Dann könnte man sich daraus mit einer Regex relativ flexibel die Informationen rausziehen, die man benötigt.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Oktober 2014, 20:14:16
Zitat von: Brockmann am 26 Oktober 2014, 20:05:04
Daran hatte ich auch zuerst gedacht, aber das wäre - zumindest ist diesem Fall - auch keine Lösung. Denn in der Regel ist hier ja das Öffnen der Haustür der Trigger und nicht das Öffnen eines Fensters. Demzufolge würde im cmd_event die Haustür stehen...
Eine spontane Idee (ggf. für die sehr erweiterte ToDo-Liste): Wenn DOIF irgendwie die Werte der getroffenen Bedingung als Liste von Name:Wert-Paare zugänglich machen würde, also z. B.
"MK_Haustuer:auf;MK_Bad1:zu;MK_Gast:auf;MK_Bad2:zu;MK_Heizung:zu;MK_Kueche:zu;MK_Terrasse:zu;MK_Schlafzimmer:zu"
Dann könnte man sich daraus mit einer Regex relativ flexibel die Informationen rausziehen, die man benötigt.
ja, allerdings kümmere ich mich nicht selbst um die Zustände, sondern überlasse es Perl über die zuvor abgelegte Bedingungen mit entsprechenden Funktionen siehe conditions im DOIF-Modul mit list-Ausgabe.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 27 Oktober 2014, 07:39:15
Zitat von: MaJu am 26 Oktober 2014, 19:53:17
Hallo Andreas,

vor dem gleichen Problem stand ich auch.
Hier die Lösung, die hervorragend funktioniert, es werden genau die offenen Fenster angesagt:

http://forum.fhem.de/index.php/topic,10628.msg162593.html#msg162593

Danke MaJu, das ist die Lösung!

Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 27 Oktober 2014, 14:34:07
@Andreas,

ich habe das Spiel noch ein wenig weiter getrieben:
Mit der genannten Lösung würde bei jedem Tür-öffnen eine Information über offene Fenster kommen. Auch, wenn ich nur mal den Müll runter bringe. Und auch, wenn ich wieder reinkomme.

Fazit: FHEM muss wissen, wann wirklich die Wohnung endgültig verlassen wird.
Dazu habe ich in den Fenstersensor, der die Tür-Öffnung realisiert, einen kleinen Drucktaster eingebaut und mit dem "Sabotage-Kontakt" (der erkennt, wenn man den Sender von der Platte nimmt) verbunden.
Ziel: Das drücken der Taste bedeutet "wir gehen jetzt". Wird die Taste gedrückt, wird ein Abwesenheitsdummy von "anwesend" auf "gehen" gesetzt, der nach 2 Minuten "abwesend" bekommt.
Wird die Tür im Dummy-Status "anwesend" geöffnet, dann kommt zur Erinnerung die Ansage "Taste gedrückt?". Wird die Tür im Status "gehen" gedrückt, dann kommt die Fenster-offen-Ansage, das Wand-Display wird ausgeschaltet und alle Lampen werden ausgemacht.
Wird die Tür im Status "abwesend" geöffnet wird das Licht im Flur eingschaltet, es erfolgt keine Ansage, der Abwesenheitsdummy wird auf "anwesend" gesetzt.

Ein bisschen viel für das Thema hier, ich versuche es mal anderweitig nachvollziehbar niederzuschreiben.

Was hat das mit DOIF zu tun?

Ich habe ein DOIF mit der folgenden Definition laufen, um zu erkennen, wenn auch bei bereits geöffneter Tür noch die gehen-Taste gedrückt wird. Denn das Licht sollte erst ausgeschalten, wenn die Tür geöffnet wird, aber auch, wenn die Tür schon offen ist wenn der Taster gedrückt wird.
([Wohnungstuer] eq "open" and [Abwesenheit] eq "gehen") (set Licht.* aus)
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 28 Oktober 2014, 10:32:36
@ MaJu
ich werde das vermutlich mit einem HM-PB-2-WM55 lösen, den ich in eine vorhandene Schalterleiste integriere und beim verlassen einmal drücke und damit die Sprachausgabe auslöse. Hier einen Automatismus zu schaffen, der alle Fälle abdeckt ist unmöglich.

Andreas



Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 31 Oktober 2014, 13:36:52
Hallo.
Heute bemerkt, weil keine Benachrichtigung



([myCalendar] modeStarted.*cq5k8hl2bfcvcb2mllkugu573ogooglecom) (set Restmuell on) DOELSE (set Restmuell off)


folgende Fehlermeldung



perl error in condition: InternalDoIf('myCalendar','STATE','') modeStarted.*cq5k8hl2bfcvcb2mllkugu573ogooglecom: syntax error at (eval 688998) line 1, near ") modeStarted"



hatte aber schon einmal funktioniert, aber einige updates schon dazwischen. liegts an dem?

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 31 Oktober 2014, 14:11:56
Zitat von: satprofi am 31 Oktober 2014, 13:36:52
([myCalendar] modeStarted.*cq5k8hl2bfcvcb2mllkugu573ogooglecom) (set Restmuell on) DOELSE (set Restmuell off)

hatte aber schon einmal funktioniert, aber einige updates schon dazwischen. liegts an dem?

Das soll SO schon mal funktioniert haben? Da fehlt doch zumindest ein Vergleichsoperator.

Aber ich würde es auch eher so probieren (ungetestet):
([myCalendar:modeStarted] =~ "cq5k8hl2bfcvcb2mllkugu573ogooglecom") (set Restmuell on) DOELSE (set Restmuell off)
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 31 Oktober 2014, 17:53:02
Zitat von: Brockmann am 31 Oktober 2014, 14:11:56

Aber ich würde es auch eher so probieren (ungetestet):
([myCalendar:modeStarted] =~ "cq5k8hl2bfcvcb2mllkugu573ogooglecom") (set Restmuell on) DOELSE (set Restmuell off)

bei DOIF benötigt man das doch nicht.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 31 Oktober 2014, 19:01:44
Zitat von: satprofi am 31 Oktober 2014, 17:53:02
bei DOIF benötigt man das doch nicht.

Wenn man auf etwas nicht genau prüfen möchte, sondern nur auf ein Vorkommen eines Teilstrings, dann muss man statt eq  =~ angeben.

Beispiel:

wenn z. B. im Status von Device steht: "Heute Abend ist Halloween",

dann ist ([Device] eq "Halloween") nicht wahr,

dagegen ist ([Device] =~ "Halloween") wahr, weil das Wort "Halloween" im obigen Satz vorkommt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 01 November 2014, 09:20:53
Hallo.
Danke, der fehler dürfte wegenb Übernahme aus notify entstanden sein.
Habe aber jetzt neues Problem, warum auch immer.
Leider wird um 8:01 die Led nicht angesteuert, erst nach Statuswechsel. Dies funktioniert nur sporadisch.


define led15rg DOIF ([Batterielader_aus] eq "off" and [08:00-22:00]) (set LED_15 led green) \
DOELSEIF ([Batterielader_aus] eq "on" and [08:00-22:00]) ( set LED_15 led red) \
DOELSE (set LED_15 led off)
attr led15rg do always
attr led15rg room DOIF


last_cmd_event timer_1 08:01h
state cmd_3
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 November 2014, 10:23:08
Zitat von: satprofi am 01 November 2014, 09:20:53
Hallo.
Danke, der fehler dürfte wegenb Übernahme aus notify entstanden sein.
Habe aber jetzt neues Problem, warum auch immer.
Leider wird um 8:01 die Led nicht angesteuert, erst nach Statuswechsel. Dies funktioniert nur sporadisch.


define led15rg DOIF ([Batterielader_aus] eq "off" and [08:00-22:00]) (set LED_15 led green) \
DOELSEIF ([Batterielader_aus] eq "on" and [08:00-22:00]) ( set LED_15 led red) \
DOELSE (set LED_15 led off)
attr led15rg do always
attr led15rg room DOIF


last_cmd_event timer_1 08:01h
state cmd_3

hier passt was nicht: es kann lt. Definition keinen event_timer um 08:01 geben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 01 November 2014, 11:41:30
sorry, falsche zeile kopiert


define led14rg DOIF ([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red) \
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green) \
DOELSE (set LED_14 led off)
attr led14rg do always
attr led14rg room DOIF
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 November 2014, 12:03:19
Zitat von: satprofi am 01 November 2014, 11:41:30
sorry, falsche zeile kopiert


define led14rg DOIF ([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red) \
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green) \
DOELSE (set LED_14 led off)
attr led14rg do always
attr led14rg room DOIF


Nun stellt sich die Frage, was im Status von Netz_Schuetz_aus um 08:01 Uhr stand. Was für ein Device ist Netz_Schuetz_aus?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 01 November 2014, 12:13:12
Device Homematic.
Status wie um 22:00, aus. Zwischenzeitlich, 02:00-04:00, wurde aber der Status auf on geändert.
Titel: Antw:neues Modul DOIF
Beitrag von: Steffen am 01 November 2014, 12:16:56
Hallo!

Wollte einen timer setzten der alle 10 minuten ein befehl ausführt, geht das auch mit DOIF?

Mfg Steffen
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 01 November 2014, 12:18:22
Hallo, bei welcher bedingung sollte der timer starten? klappen würde es, hab ich auch bei lampen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 November 2014, 12:20:48
Zitat von: Steffen am 01 November 2014, 12:16:56
Hallo!

Wollte einen timer setzten der alle 10 minuten ein befehl ausführt, geht das auch mit DOIF?

Mfg Steffen

Das geht erst mit der nächsten Version von DOIF. Z. Zt. musst du at benutzen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Steffen am 01 November 2014, 12:23:32
Zitat von: Damian am 01 November 2014, 12:20:48
Das geht erst mit der nächsten Version von DOIF. Z. Zt. musst du at benutzen.

Gruß

Damian

Ok danke....
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 November 2014, 12:50:20
Zitat von: satprofi am 01 November 2014, 12:13:12
Device Homematic.
Status wie um 22:00, aus. Zwischenzeitlich, 02:00-04:00, wurde aber der Status auf on geändert.

Vielleicht hast du auch mit dem Timing-Problem zu kämpfen, siehe hier:

http://forum.fhem.de/index.php/topic,27292.msg204727.html#msg204727

Du kannst mit der dort angehängten Version das Problem testen.

Ich habe diese Version nun auch eingecheckt, gibt´s dann morgen per Update.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 November 2014, 08:37:26
Hallo. Danke .dürfte jetzt klappen

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 November 2014, 08:40:17
Danke. Klappt zumimdest heute

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 November 2014, 10:52:32
Zitat von: satprofi am 02 November 2014, 08:40:17
Danke. Klappt zumimdest heute

Gesendet von meinem GT-I9300
Dann sollte es jetzt immer funktionieren. Der Bug-Fix ist übrigens ab heute per FHEM-Update verfügbar und ist für alle zu empfehlen, die mit Zeitintervallen arbeiten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 02 November 2014, 11:26:34
Hallo, versuche gerade eine Lampe (Wohnzimmer_Kugel) die mit einer Elro Steckdose geschaltet wird über eine FS20 S8 Fernbedienung (FS20_S8_B)zu schalten.
define Kugel_Wohn DOIF ([FS20_S8_B] eq "on") (set Wohnzimmer_Kugel on) DOELSEIF ([FS20_S8_B] eq "off") (set Wohnzimmer_Kugel off)
attr Kugel_Wohn do always
Mit diesem code läßt sich die Lampe über die Fernbedienung ein aber nicht mehr ausschalten. Der Zustand des Schalters wird in fhem korrekt angezeigt (on;off).
Hat vielleicht jemand einen Tipp für mich ?

Edit: Über 2 notify´s funktioniert es problemlos.

Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 November 2014, 12:07:42
Arbeitest du mit Dummy´s ? Wenn nicht schalte einen Dummy, dann klappts sicher.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 02 November 2014, 12:15:30
Hallo,

ZitatArbeitest du mit Dummy´s ? Wenn nicht schalte einen Dummy,
Also wenn er NICHT mit einem Dummy arbeitet soll er einen schalten  :o
Das macht durchaus Sinn  ::)

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 November 2014, 12:22:19
Zitat von: The-Holgi am 02 November 2014, 11:26:34
Hallo, versuche gerade eine Lampe (Wohnzimmer_Kugel) die mit einer Elro Steckdose geschaltet wird über eine FS20 S8 Fernbedienung (FS20_S8_B)zu schalten.
define Kugel_Wohn DOIF ([FS20_S8_B] eq "on") (set Wohnzimmer_Kugel on) DOELSEIF ([FS20_S8_B] eq "off") (set Wohnzimmer_Kugel off)
attr Kugel_Wohn do always
Mit diesem code läßt sich die Lampe über die Fernbedienung ein aber nicht mehr ausschalten. Der Zustand des Schalters wird in fhem korrekt angezeigt (on;off).
Hat vielleicht jemand einen Tipp für mich ?

Edit: Über 2 notify´s funktioniert es problemlos.

Gruß Holgi

Dann schalte mal auf "off" und poste hier Ausgabe von list Kugel_Wohn.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 02 November 2014, 12:25:09
Hm, nein arbeite nicht mit einem Dummy. Das heißt ich soll einen Dummy-Schalter anlegen?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 02 November 2014, 12:25:33
Zitat von: The-Holgi am 02 November 2014, 11:26:34
Hat vielleicht jemand einen Tipp für mich ?
Das sollte so eigentlich funktionieren. Allerdings kenne ich die Eigenheiten dieser Fernbedienung nicht. Kann es sein, dass die nur ganz kurz den Status "off" annimmt? Dann könnte es sein, dass sie in dem Moment wo das DOIF den Status auswertet eben schon nicht mehr "off" ist. Wäre eine Erklärung.
Aber generell: Meiner Meinung nach ist das DOIFELSE und auch das do always in diesem Fall nicht unbedingt nötig.
Einfach nur
define Kugel_Wohn DOIF ([FS20_S8_B] eq "on") (set Wohnzimmer_Kugel on) DOELSE(set Wohnzimmer_Kugel off)
sollte eigentlich ausreichen. Und das könnte auch das Problem lösen.
Nachtrag: Wobei, wenn die Fernbedienung eben nicht dauerhaft "on" oder "off" ist, dann würde bei dieser Variante das Licht immer wieder ausgehen...
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 02 November 2014, 12:30:39
Hallo,

im "Normalbetrieb" senden die FS20-FB auf einer Kanaltaste on und auf der zweiten Kanaltaste off.
Im "Doppelbetrieb" kommt nur ein Toogle.
Soweit meine Kenntnisse noch von FS20-Fernbedienungen.

d.h. FS20_S8_B dürfte eigentlich nur on oder nur toogle senden.
FS20_S8_A - so es das so definiert gibt - müsste die zugehörige "andere" Kanaltaste sein und das off senden.
Kann man schön im EventMonitor anschauen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 02 November 2014, 12:37:29
Zitat von: Brockmann am 02 November 2014, 12:25:33

Einfach nur
define Kugel_Wohn DOIF ([FS20_S8_B] eq "on") (set Wohnzimmer_Kugel on) DOELSE(set Wohnzimmer_Kugel off)
sollte eigentlich ausreichen. Und das könnte auch das Problem lösen.
Nachtrag: Wobei, wenn die Fernbedienung eben nicht dauerhaft "on" oder "off" ist, dann würde bei dieser Variante das Licht immer wieder ausgehen...
Das funktioniert, die Lampe bleibt auch so lange an bis man die 2. Taste (off) betätigt. Die Fernbedienung ist auf 4 Kanal- Betrieb eingestellt.
Also jeweils eine Taste für on und eine für off.

Danke euch für die schnelle Hilfe.

Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 November 2014, 13:06:02
Zitat von: The-Holgi am 02 November 2014, 12:37:29
Das funktioniert, die Lampe bleibt auch so lange an bis man die 2. Taste (off) betätigt. Die Fernbedienung ist auf 4 Kanal- Betrieb eingestellt.
Also jeweils eine Taste für on und eine für off.

Danke euch für die schnelle Hilfe.

Gruß Holgi

Deine erste Definition wird auch funktionieren.

Das Problem wird sein, dass du auf deiner Fernbedienung manchmal paar Millisekunden länger drauf hältst. Dann kommt bei FS20 nicht "on" bzw. "off" sondern "dimup" bzw. "dimdown" (habe es gerade selbst bei mir festgestellt).

Das kannst du mit:

define Kugel_Wohn DOIF ([FS20_S8_B] eq "on" or [FS20_S8_B] eq "dimup") (set Wohnzimmer_Kugel on) DOELSE(set Wohnzimmer_Kugel off)

abfangen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 November 2014, 13:26:36
interessant. mir wurde gertaen mit dummys zu arbeiten. werde das jetzt testen, und die notifys u. dummys deleten
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 November 2014, 14:21:49
Frage, was bringt dir eigentlich das? Warum schaltest du nicht das Licht gleich mit FB ein?
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 02 November 2014, 14:54:01
@Damian, Danke für den Tipp.
@satprofi, weil es sich um 433mhz Elro Zwischenstecker handelt. Die kann ich nicht direkt über die FS20 Fernbedienung schalten.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 02 November 2014, 14:56:35
stimmt, übersehen. ich mache das mit notify

define switch1on notify FS20_701002:on set ELRO_11111_E on

Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 02 November 2014, 15:43:26
Hallo,

Es hat ja auch niemand gesagt das es mit notify nicht geht.
Aber es geht eben auch mit DOIF - und damit noch eleganter als mit notify.
Und auserdem hast du vermutlich noch ein zweites zum abschalten  ::)
Das braucht Holgi nicht da er alles in einem DOIF hat - was aber auch wieder in einem notify geht aber nichtmehr so elegant aussieht.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 02 November 2014, 16:42:07
Zitat von: Puschel74 am 02 November 2014, 15:43:26

Aber es geht eben auch mit DOIF - und damit noch eleganter als mit notify.
Und auserdem hast du vermutlich noch ein zweites zum abschalten  ::)
Das braucht Holgi nicht da er alles in einem DOIF hat - was aber auch wieder in einem notify geht aber nichtmehr so elegant aussieht.


Genau darum ging es mir, hatte es vorher auch mit 2 notify´s laufen.

Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: cotecmania am 02 November 2014, 20:44:44
Hallo,

Bin auch DOIF-Neuling und wollte eine Ansage mit WebViewControl realisieren, wenn ich nach Hause komme.
Das soll aber nur tagsüber passieren.

define DI_AnwesenheitJo DOIF ([08:00-22:00] and [Handy_JoS3] eq "present") (set WandTablet ttsSay Hallo Tschoooo.)

Ging ein paar Tage gut, aber als ich mal nach 22:00 Uhr nach Hause kam hörte ich nichts, was ja ok war.
Nur leider wurde ich dann am nächtsen Morgen um 8:00 Uhr mit dem Spruch geweckt.

Hat die Reihenfolge auch was zu sagen ? Muss ich zuerst "present" abfragen und dann mit der Zeit "verunden"?
Oder was mache ich falsch ?

Gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 November 2014, 22:18:16
Zitat von: cotecmania am 02 November 2014, 20:44:44
Hallo,

Bin auch DOIF-Neuling und wollte eine Ansage mit WebViewControl realisieren, wenn ich nach Hause komme.
Das soll aber nur tagsüber passieren.

define DI_AnwesenheitJo DOIF ([08:00-22:00] and [Handy_JoS3] eq "present") (set WandTablet ttsSay Hallo Tschoooo.)

Ging ein paar Tage gut, aber als ich mal nach 22:00 Uhr nach Hause kam hörte ich nichts, was ja ok war.
Nur leider wurde ich dann am nächtsen Morgen um 8:00 Uhr mit dem Spruch geweckt.

Hat die Reihenfolge auch was zu sagen ? Muss ich zuerst "present" abfragen und dann mit der Zeit "verunden"?
Oder was mache ich falsch ?

Gruss

Bei Zeitintervallen wird am Anfang und am Ende getriggert, bei dir also um 8:00 und 22:00 Uhr. Das ist in den meisten Fällen auch so erwünscht. Wenn du keine Zeit-Triggerung wünschst, dann musst du die $hms-Variable benutzen, hier also:


define DI_AnwesenheitJo DOIF ($hms gt "08:00" and $hms lt "22:00" and [Handy_JoS3] eq "present") (set WandTablet ttsSay Hallo Tschoooo.)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 November 2014, 08:36:51
Hallo Damian,

Zitat von: DamianBei Zeitintervallen wird am Anfang und am Ende getriggert, bei dir also um 8:00 und 22:00 Uhr. Das ist in den meisten Fällen auch so erwünscht. Wenn du keine Zeit-Triggerung wünschst, dann musst du die $hms-Variable benutzen, hier also:

kann sogar sein, dass ich das schonmal vorgeschlagen habe:
Man könnte solche Szenarien (und die kommen gar nicht sooo selten vor, ich habe jedenfalls auch sowas) in DOIF recht elegant erschlagen, wenn es eine Möglichkeit gäbe, Bedingungen als non-trigger zu definieren. Nur mal als Idee:

define DI_AnwesenheitJo DOIF (![08:00-22:00] and [Handy_JoS3] eq "present") (set WandTablet ttsSay Hallo Tschoooo.)

Das ! vor dem [ würde DOIF so interpretieren, dass diese Bedingung zwar geprüft wird, wenn dieser Zweig getriggert wird, aber dass eben keine eigenen Trigger für den Zeitintervall definiert werden.
Dann hätte man genau das gewünschte Verhalten, ohne die intuitive DOIF-Ebene verlassen zu müssen. Funktionell wäre es dasselbe, aber wesentlich benutzerfreundlicher, oder?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 November 2014, 09:39:53
Zitat von: Brockmann am 03 November 2014, 08:36:51
Hallo Damian,

kann sogar sein, dass ich das schonmal vorgeschlagen habe:
Man könnte solche Szenarien (und die kommen gar nicht sooo selten vor, ich habe jedenfalls auch sowas) in DOIF recht elegant erschlagen, wenn es eine Möglichkeit gäbe, Bedingungen als non-trigger zu definieren. Nur mal als Idee:

define DI_AnwesenheitJo DOIF (![08:00-22:00] and [Handy_JoS3] eq "present") (set WandTablet ttsSay Hallo Tschoooo.)

Das ! vor dem [ würde DOIF so interpretieren, dass diese Bedingung zwar geprüft wird, wenn dieser Zweig getriggert wird, aber dass eben keine eigenen Trigger für den Zeitintervall definiert werden.
Dann hätte man genau das gewünschte Verhalten, ohne die intuitive DOIF-Ebene verlassen zu müssen. Funktionell wäre es dasselbe, aber wesentlich benutzerfreundlicher, oder?

Gut dass wir auf das Thema kommen. In meiner Todo-Liste habe ich bereits "kein Trigger" für Readings vor längerer Zeit aufgenommen. Meine erste Idee war auch das Ausrufungszeichen gewesen. Allerdings würde das bei Programmierern "das Gegenteil von" bedeuten und das ist es nicht.
Daher habe ich nach anderen Zeichen gesucht, das sind meine letzten Aufzeichnungen:

-Readings ohne Trigger [NoTrigger:...] oder [#...] oder ['...] oder [^...]

So etwas würde man dann auf Zeiten übertragen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 November 2014, 10:14:10
Zitat von: Damian am 03 November 2014, 09:39:53
-Readings ohne Trigger [NoTrigger:...] oder [#...] oder ['...] oder [^...]
Ja, das Symbol dafür will gut überlegt sein. Das ! war auch nur eine spontane Idee.
Bleibt sonst aber auch nicht viel übrig, was man auf deutschen wie englischen Tastaturen ohne weiteres tippen kann.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 November 2014, 11:25:38
Zitat von: Brockmann am 03 November 2014, 10:14:10
Ja, das Symbol dafür will gut überlegt sein. Das ! war auch nur eine spontane Idee.

  • [#...] wäre wohl auch suboptimal, weil es in der fhem.cfg Kommentare einleitet.
  • ['...] könnte bei Editoren mit Syntaxhighlighting unangenehme Nebenwirkungen haben, oder?
  • [^...] Dagegen spricht wohl nichts, wobei ich dieses Zeichen wegen der Eingabe immer etwas nervig finde (es erscheint ja erst beim nächste Zeichen mit).
Bleibt sonst aber auch nicht viel übrig, was man auf deutschen wie englischen Tastaturen ohne weiteres tippen kann.

Ja, das sehe ich auch so. Das Dach kann bei regulären Ausdrücken auch eine Verneinung sein, deshalb kam ich drauf, es ist aber ungünstig zum Eingeben. Vielleicht hat jemand noch eine Eingebung. Es will gut überlegt sein, wenn es einmal steht, wird man das ganze "FHEM"-Leben damit konfrontiert.

Gruß

Damian

Titel: neues Modul DOIF
Beitrag von: The-Holgi am 04 November 2014, 06:26:37
Zitat von: Damian am 02 November 2014, 13:06:02


define Kugel_Wohn DOIF ([FS20_S8_B] eq "on" or [FS20_S8_B] eq "dimup") (set Wohnzimmer_Kugel on) DOELSE(set Wohnzimmer_Kugel off)

Hm, einen Schönheitsfehler gibt es noch.
Ich lasse die Lampe bei Sonnenuntergang anschalten, wenn ich dann versuche über die Fernbedienung auszuschalten muß man zuerst den on Taster betätigen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 November 2014, 07:49:29
Zitat von: The-Holgi am 04 November 2014, 06:26:37
Hm, einen Schönheitsfehler gibt es noch.
Ich lasse die Lampe bei Sonnenuntergang anschalten, wenn ich dann versuche über die Fernbedienung auszuschalten muß man zuerst den on Taster betätigen.

Dann musst du:

attr Kugel_Wohn do always

setzen.

Die Erklärung kannst du im ersten Beispiel in der Commandref von DOIF nachlesen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 04 November 2014, 07:51:37
Ach ja, natürlich. Danke für den Tipp.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 November 2014, 10:24:25
Hallo. Wieviel DOIF verträgt fhem? Ich habe ca 20 und fhem friert jetzt öfters ein. Heisst , pausiert ca. 10-15 min. Auch über webif nicht erreichbar.

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 November 2014, 10:39:48
Zitat von: satprofi am 04 November 2014, 10:24:25
Hallo. Wieviel DOIF verträgt fhem? Ich habe ca 20 und fhem friert jetzt öfters ein. Heisst , pausiert ca. 10-15 min. Auch über webif nicht erreichbar.

Gesendet von meinem GT-I9300

Beliebig. Das Stichwort ist sleep. Ich habe dir schon mal etwas zu diesem Problem geschrieben siehe:

http://forum.fhem.de/index.php/topic,27848.msg207674.html#msg207674

Hast du es auch befolgt?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 November 2014, 12:51:06
:schäm: nein. Habs übersehen. Aber denn tipp hab ich von hier.ist ja kein perl-sleep

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 November 2014, 12:52:26
Wobei mein sleep nur vormittags läuft.die freezer aber den ganzen tag

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 November 2014, 14:00:02
Zitat von: satprofi am 04 November 2014, 12:52:26
Wobei mein sleep nur vormittags läuft.die freezer aber den ganzen tag

Gesendet von meinem GT-I9300

Ich würde die sleeps bei DOIF zunächst alle rausnehmen und ggf. gegen at ersetzen. Was du sonst alles im System definiert hast, kann ich natürlich nicht sagen. Es wird in der nächsten Version von DOIF ein wait geben, welches man statt sleep zwischen den Kommandos einsetzen kann.

Die Sache mit dem sleep-Problem habe ich auch erst später bemerkt, wahrscheinlich liegt es daran, dass ich die FHEM-Kommandos intern einzeln per  fhem ("...") aufrufe, das war in den Anfängen von DOIF mal anders gewesen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 November 2014, 14:10:39
Alles klar. Werds ausbessern. Habe anderen thread gefunden wo selbiges problem auftritt aber HCS Modul verdächtigt wird

Gesendet von meinem GT-I9300

Titel: Kamerasteuerung per DOIF
Beitrag von: Simon74 am 04 November 2014, 14:22:39
Kann ich DOIF für meine Kamerasteuerung sinnvoll nutzen ?
Also Positionen anfahren und Motion-Detect On/Off, alles in einem DOIF anstatt notifys..

Wäre mein Code so richtig ?
Was er machen soll, Logik:
1. Wenn Kamera eingeschaltet
2. Wenn Personen abwesend: Set Kameraposition + Motion-Detect ON
3. Wenn TV und LED aus: Set Kameraposition + Motion-Detect ON (Nachtalarm)
4. Wenn 2+3 nicht zutrifft: Kameraposition + Motion-Detect OFF

cam.alarm_on.off
([t5.ping.cam1] eq "present") ()
DOELSEIF ([Personen:state] eq "absent")
  (set t5.cam1 cmd 6,set t5.cam1 cmd 15,{Log 1, "Kamera-Alarm: Ein (Abwesend)"})
DOELSEIF ([!isday()] and [t5.ku.sd2_Sw] eq "off" and [t5.wz.sd1_Sw] eq "off")
  (set t5.cam1 cmd 6,set t5.cam1 cmd 15,{Log 1, "Kamera-Alarm: Ein (Nacht)"})
DOELSE 
  (set t5.cam1 cmd 9,set t5.cam1 cmd 14,{Log 1, "Kamera-Alarm: Aus"})


Titel: Antw:Kamerasteuerung per DOIF
Beitrag von: Damian am 04 November 2014, 15:39:11
Zitat von: Simon74 am 04 November 2014, 14:22:39
Kann ich DOIF für meine Kamerasteuerung sinnvoll nutzen ?
Also Positionen anfahren und Motion-Detect On/Off, alles in einem DOIF anstatt notifys..

Wäre mein Code so richtig ?
Was er machen soll, Logik:
1. Wenn Kamera eingeschaltet
2. Wenn Personen abwesend: Set Kameraposition + Motion-Detect ON
3. Wenn TV und LED aus: Set Kameraposition + Motion-Detect ON (Nachtalarm)
4. Wenn 2+3 nicht zutrifft: Kameraposition + Motion-Detect OFF

cam.alarm_on.off
([t5.ping.cam1] eq "present") ()
DOELSEIF ([Personen:state] eq "absent")
  (set t5.cam1 cmd 6,set t5.cam1 cmd 15,{Log 1, "Kamera-Alarm: Ein (Abwesend)"})
DOELSEIF ([!isday()] and [t5.ku.sd2_Sw] eq "off" and [t5.wz.sd1_Sw] eq "off")
  (set t5.cam1 cmd 6,set t5.cam1 cmd 15,{Log 1, "Kamera-Alarm: Ein (Nacht)"})
DOELSE 
  (set t5.cam1 cmd 9,set t5.cam1 cmd 14,{Log 1, "Kamera-Alarm: Aus"})



cam.alarm_on.off ist keine Bedingung
([t5.ping.cam1] eq "present") ()  was soll hier passieren.

Bitte noch mal genau in der Commandref nach der Syntax schauen.

Vielleicht meinst du so etwas:

define di_kamera DOIF ([t5.ping.cam1] eq "present" and [Personen:state] eq "absent")
  (set t5.cam1 cmd 6,set t5.cam1 cmd 15,{Log 1, "Kamera-Alarm: Ein (Abwesend)"})
DOELSEIF ..


Sonst die Beispiel in der Commanref noch mal studieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Simon74 am 04 November 2014, 16:43:21
Achso sorry, die erste Codezeile sollte nur den Namen der Definition darstellen.
Commandref habe ich schon gelesen: Von links nach rechts und,
"Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist"

Also muss ich immer ALLE Bedinungen bei mehreren DOIFELSE schreiben, richtig ?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 November 2014, 16:51:10
Zitat von: Simon74 am 04 November 2014, 16:43:21
Achso sorry, die erste Codezeile sollte nur den Namen der Definition darstellen.
Commandref habe ich schon gelesen: Von links nach rechts und,
"Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist"

Also muss ich immer ALLE Bedinungen bei mehreren DOIFELSE schreiben, richtig ?

ja, und in die jeweilige Bedingung muss alles rein, was für die Ausführung wichtig ist - mit and bzw. or verknüpft.

Der letzte DOELSE-Fall ohne Bedingung ist bei mehreren Bedingung mit Vorsicht zu genießen. Da kann es schnell passieren, dass man eine Konstellation übersehen hat, die dann zu diesem "sonst"-Fall führt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Simon74 am 04 November 2014, 22:30:05
Ich habe noch ein Beispiel das ich nicht gelöst bekomme.
Ich möchte wenn Helligkeit > 35 und Anwesend die Leds einschalten.
Ausschalten erst wieder wenn PC und Receiver ausgeschaltet werden.

([bewemelder:brightness] < 35 and [!isday()] and [Personen:state] ne "absent" and ([pc:state] eq "on" or [receiver:state] eq "on"))
(set t5.wz.bs1.b on,{Log 1, "bm.fl_wz.led.brightness: LED Ein"})
  DOELSE
  (set t5.wz.bs1.b off,{Log 1, "bm.fl_wz.led.brightness: LED Aus"})


Die Probleme dabei:
   1. Wenn ich zwischendurch das Licht einschalte, schalten (Bewegungsmelderhelligkeit) die Leds wieder aus, möchte ich nicht
   2. Wenn ich dazwischen abwesend war gehen die Leds nicht mehr an (Leds werden vom Abwesenheitstrigger mit ausgeschaltet)
   3. Einschalten sollte es immer wenn Anwesend und Helligkeit> (ohne den Status der Geräte)
   
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 November 2014, 22:50:49
Zitat von: Simon74 am 04 November 2014, 22:30:05
Ich habe noch ein Beispiel das ich nicht gelöst bekomme.
Ich möchte wenn Helligkeit > 35 und Anwesend die Leds einschalten.
Ausschalten erst wieder wenn PC und Receiver ausgeschaltet werden.

([bewemelder:brightness] < 35 and [!isday()] and [Personen:state] ne "absent" and ([pc:state] eq "on" or [receiver:state] eq "on"))
(set t5.wz.bs1.b on,{Log 1, "bm.fl_wz.led.brightness: LED Ein"})
  DOELSE
  (set t5.wz.bs1.b off,{Log 1, "bm.fl_wz.led.brightness: LED Aus"})


Die Probleme dabei:
   1. Wenn ich zwischendurch das Licht einschalte, schalten (Bewegungsmelderhelligkeit) die Leds wieder aus, möchte ich nicht
   2. Wenn ich dazwischen abwesend war gehen die Leds nicht mehr an (Leds werden vom Abwesenheitstrigger mit ausgeschaltet)
   3. Einschalten sollte es immer wenn Anwesend und Helligkeit> (ohne den Status der Geräte)

[!isday()] kann nicht gut funktionieren.

vielleicht kannst du darauf aufbauen:

([bewemelder:brightness] > 35 and !isday() and [Personen:state] ne "absent" )
    (set t5.wz.bs1.b on,{Log 1, "bm.fl_wz.led.brightness: LED Ein"})
DOELSEIF ([pc:state] eq "off" and [receiver:state] eq "off" or [Personen:state] eq "absent")
    (set t5.wz.bs1.b off,{Log 1, "bm.fl_wz.led.brightness: LED Aus"})


Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: hansgans am 05 November 2014, 19:08:42
ich hab da irgendwo nen fehler  kann mir da wer helfen ?

define waschen DOIF ([sw_kueche_oben_01] eq "Long.1.*" and [sw_wasch_Sw] eq "off" ) (set sw_wasch_Sw on) DOELSEIF ([sw_kueche_oben_01] eq "Long.1.*" and [sw_wasch_Sw] eq "on" ) (set sw_wasch_Sw off)

sw_kueche_oben_01 ist ein HM-PB-2-WM55 und sw_wasch_Sw ne HM-ES-PMSw1-Pl und ich will auf long ne schaltung von der HM-ES-PMSw1-Pl

weil auf short schon was anderes drauf läuft





Titel: Antw:neues Modul DOIF
Beitrag von: Simon74 am 05 November 2014, 19:15:08
Vielen Dank Damian für den richtigen Ansatz, ich komme nun weiter.. :-)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 November 2014, 19:21:00
Zitat von: hansgans am 05 November 2014, 19:08:42
ich hab da irgendwo nen fehler  kann mir da wer helfen ?

define waschen DOIF ([sw_kueche_oben_01] eq "Long.1.*" and [sw_wasch_Sw] eq "off" ) (set sw_wasch_Sw on) DOELSEIF ([sw_kueche_oben_01] eq "Long.1.*" and [sw_wasch_Sw] eq "on" ) (set sw_wasch_Sw off)

sw_kueche_oben_01 ist ein HM-PB-2-WM55 und sw_wasch_Sw ne HM-ES-PMSw1-Pl und ich will auf long ne schaltung von der HM-ES-PMSw1-Pl

weil auf short schon was anderes drauf läuft

Triggern auf etwas in der Bedingung hier: sw_wash_Sw , was man im Modul setzt, führt zu einer Rekursion - das ist schlecht, daher

eher so:

define waschen DOIF ([sw_kueche_oben_01] =~ "Long.1.")
(   IF ([sw_wasch_Sw] eq "off")
      (set sw_wasch_Sw on)
    ELSE
      (set sw_wasch_Sw off)
)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 November 2014, 22:59:11
Nach 44 Seiten noch immer nicht alle Fälle abgedeckt - DOIF scheint ja wohl ziemlich mächtig zu sein (oder die wenigsten haben Lust die commandref oder den Beitrag zu lesen  8) ).
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 November 2014, 08:30:29
Zitat von: Puschel74 am 05 November 2014, 22:59:11
Nach 44 Seiten noch immer nicht alle Fälle abgedeckt - DOIF scheint ja wohl ziemlich mächtig zu sein (oder die wenigsten haben Lust die commandref oder den Beitrag zu lesen  8) ).

Naja, es werden auch noch weitere 44 Seiten dazukommen ;) . Spätestens wenn die nächste Version erscheint, die noch mehr interessante Fälle abdecken wird.

Das ist aber nicht schlimm. Zumindest weiß irgendwann jeder, wo er zum Thema DOIF fragen kann. Auch wenn vieles durch lesen der umfangreichen Commandref zum DOIF-Modul selbsterklärend sein sollte.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 06 November 2014, 09:43:24
DOIF ist für ONUs ideal

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 06 November 2014, 14:14:21
Hallo Damian und sonstige mitleser...

Ich bin damit beschäftigt ein DOIF zu entwickeln, drehe mich aber ein bisschen im Kreis.
Es geht mir um meinen Sonos Play3 der im Bad steht, dieser wird über eine PhilipsHue Steckdose geschaltet ( pl_soBad )
Nun passiert etwa 1 von 4 mal das der player sich nicht richtig im Sonos Netz anmeldet.
Obwohl er über die Fritzbox und seine Mac Adresse die IP 192.168.178.53 zugewiesen bekommt meldet er sich bei den anderen Sonos Teilnehmern und dem Sonos Modul mit der IP 192.168.0.57

Auf Sonos Seite versuche ich schon sehr lange diesen Fehler zu verhindern - es gelingt mir aber nicht.

Ich habe nun also ein Presence Device ( pr_soBad ) auf die richtige IP gesetzt und wünsche mir das:
Wenn ich die Steckdose anschalte und der Player diese IP bezieht - das Presence Device und ein Timer disabled wird.
Wenn ich die Steckdose anschalte und der Player die falsche IP benutzt - ein Timer nach zwei Minuten die Steckdose für 10sek ausschaltet und ein neuer Versuch gestartet wird.
Das ganze Spiel soll solange stattfinden bis der player sich korrekt angemeldet hat.

Der Player brauch nach anschalten bis zu 2 Minuten um sich überhaupt anzumelden, deswegen würde ich den Timer starten wenn ich die Steckdose einschalte. Zur zeit sieht das so aus:
ZitatInternals:
   DEF        ([pl_soBad] eq "on") (attr pr_soBad disable 0,attr at_soBad disable 0)
DOELSEIF ([pl_soBad] eq "off") (attr pr_soBad disable 1,attr at_soBad disable 1)
DOELSEIF ([pr_soBad] eq "present") (attr at_soBad disable 1,set Events add Bad Player erkannt)
DOELSEIF ([pr_soBad] eq "disabled") (set Events add Presence Bad disable)
DOELSEIF ([pr_soBad] eq "absent") (set Events add scane nach Player Bad)
DOELSE (set Events add Else Fall do_soBad)
   NAME       do_soBad

Problem ist das der Timer ( at_soBad ) sich nach auslösen löscht.

Ich vermute ein Watchdog würde mir helfen, weiss aber nicht so recht wie und wo ich ansetzen müsste.

Vielleicht kannst Du Damian - oder ein anderer mitleser mir helfen.

1000 Dank!


Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 November 2014, 15:08:58
Zitat von: der-Lolo am 06 November 2014, 14:14:21
Hallo Damian und sonstige mitleser...

Ich bin damit beschäftigt ein DOIF zu entwickeln, drehe mich aber ein bisschen im Kreis.
Es geht mir um meinen Sonos Play3 der im Bad steht, dieser wird über eine PhilipsHue Steckdose geschaltet ( pl_soBad )
Nun passiert etwa 1 von 4 mal das der player sich nicht richtig im Sonos Netz anmeldet.
Obwohl er über die Fritzbox und seine Mac Adresse die IP 192.168.178.53 zugewiesen bekommt meldet er sich bei den anderen Sonos Teilnehmern und dem Sonos Modul mit der IP 192.168.0.57

Auf Sonos Seite versuche ich schon sehr lange diesen Fehler zu verhindern - es gelingt mir aber nicht.

Ich habe nun also ein Presence Device ( pr_soBad ) auf die richtige IP gesetzt und wünsche mir das:
Wenn ich die Steckdose anschalte und der Player diese IP bezieht - das Presence Device und ein Timer disabled wird.
Wenn ich die Steckdose anschalte und der Player die falsche IP benutzt - ein Timer nach zwei Minuten die Steckdose für 10sek ausschaltet und ein neuer Versuch gestartet wird.
Das ganze Spiel soll solange stattfinden bis der player sich korrekt angemeldet hat.

Der Player brauch nach anschalten bis zu 2 Minuten um sich überhaupt anzumelden, deswegen würde ich den Timer starten wenn ich die Steckdose einschalte. Zur zeit sieht das so aus:
Problem ist das der Timer ( at_soBad ) sich nach auslösen löscht.

Ich vermute ein Watchdog würde mir helfen, weiss aber nicht so recht wie und wo ich ansetzen müsste.

Vielleicht kannst Du Damian - oder ein anderer mitleser mir helfen.

1000 Dank!

Könnte ohne zusätzliche Timer so funktionieren :

define di_sono DOIF ([pl_soBad] eq "on")
(
IF ([pr_soBad] eq "present")
   (set Events add Bad Player erkannt)
ELSE
   (set pl_soBad off, define at_pl_soBad at +00:00:10 set pl_soBad on)
)
attr di_sono wait 120
attr di_sono do always


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: chris1284 am 06 November 2014, 21:09:27
Moin, kann das Modul grundsätzlich mit solch einem Code abreiten?

DEF
([.*._hz_Clima:measured-temp] < 30) (set %DEVICE controlManu 16)


leider triggert es bei mir so nicht.
Ich möchte ein doif für alle Thermostate mit ähnlichem Namen ([**]_hz_Clima) verwenden und entsprechend im "do" teil das device steuern.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 November 2014, 21:21:13
Zitat von: chris1284 am 06 November 2014, 21:09:27
Moin, kann das Modul grundsätzlich mit solch einem Code abreiten?

DEF
([.*._hz_Clima:measured-temp] < 30) (set %DEVICE controlManu 16)


leider triggert es bei mir so nicht.
Ich möchte ein doif für alle Thermostate mit ähnlichem Namen ([**]_hz_Clima) verwenden und entsprechend im "do" teil das device steuern.

Reguläre Ausdrücke stellvertretend für den Namen eines Devices gibt es bei DOIF nicht, ebenso gibt es kein %DEVICE. Beides wird es bei DOIF voraussichtlich auch nie geben, da es intern eine direkte Abbildung auf Perl-Syntax ist. In Perl kann man genauso wenig z. B. a* < 30 abfragen.

So etwas lässt sich aber über eine structure in Verbindung mit DOIF realisieren. Zumindest bei on/off-Abfragen. Bei größer/kleiner-Vergleichen, dann eher nicht.


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 06 November 2014, 23:47:20
Zitat von: Damian am 06 November 2014, 15:08:58
Könnte ohne zusätzliche Timer so funktionieren :

define di_sono DOIF ([pl_soBad] eq "on")
(
IF ([pr_soBad] eq "present")
   (set Events add Bad Player erkannt)
ELSE
   (set pl_soBad off, define at_pl_soBad at +00:00:10 set pl_soBad on)
)
attr di_sono wait 120
attr di_sono do always


Gruß

Damian

Danke Dir Damian, das funktioniert wie erwartet.
Ich habe nun noch ein zusätzliches DOIF hinzugefügt um dem Presence Device zum richtigen Zeitpunkt ein disable 0 oder 1 geben zu können.

ZitatInternals:
   DEF        ([pl_soBad] eq "on") (
IF ([pr_soBad] eq "present")
   (set Events add Bad Player erkannt,attr pr_soBad disable 1)
ELSE
   (set pl_soBad off,set Events add Versuche den Player neu zu starten.., define at_pl_soBad at +00:00:05 set pl_soBad on)
)
   NAME       do_soBad

Internals:
   DEF        ([pl_soBad] eq "on") (set Events add Sonos Lautsprecher im Bad angeschaltet...,attr pr_soBad disable 0)
DOELSEIF ([pl_soBad] eq "off") (set Events add Sonos Bad ausgeschaltet...,attr pr_soBad disable 1)
   NAME       do_pl_soBad

Falls Du eine bessere Idee hast, geb bescheid.

DANKE!
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 November 2014, 07:53:21
Zitat von: der-Lolo am 06 November 2014, 23:47:20
Danke Dir Damian, das funktioniert wie erwartet.
Ich habe nun noch ein zusätzliches DOIF hinzugefügt um dem Presence Device zum richtigen Zeitpunkt ein disable 0 oder 1 geben zu können.

Falls Du eine bessere Idee hast, geb bescheid.

DANKE!

Kannst du so lassen. Mit der nächsten Version von DOIF wirst du das mit einem DOIF-Modul realisieren können.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 07 November 2014, 08:33:29
Guten morgen,
Ich habe immer noch ein Problem mit der Logik von DOIF.

Folgendes ist implementiert:
define GartenBeleuchtung DOIF (\
([17:00-22:30|56] or\
[17:00-22:30] and  [Feiertag:tomorrow] ne "none" or\
[17:00-21:00|01234] and [Feiertag:tomorrow] eq "none" or\
[17:00-02:00] and [Feiertag:state] eq "Silverster" \
) and [myTwilight:twilight_weather] <30) (set EnO_switch_FF94C082 on) DOELSE (set EnO_switch_FF94C082 off)
attr GartenBeleuchtung cmdState on|off
attr GartenBeleuchtung room Gartenlicht
attr GartenBeleuchtung wait 900:900


Fhem stürzt von Zeit zu Zeit einfach ab, bzw. ist ais irgendwelchen Gründen so start ausgelastet, dass nur noch ein Kill -9 hilft um es zu beenden (das liegt m.E. an der Verwendung vom Sonos Modul, das muss irgendwann mal auf einen separaten rpi).

Normalerweise geht das Gartenlicht irgendwann zwischen 17:00 und twilight_weather an. Wenn ich nun merke, dass sich hier nichts tut, ist fhem mal wieder abgestürzt. Wenn ich fhem nun neu starte, sollte eigentlich das DOIF greifen und die Gartenbeleuchtung direkt einschalten wenn die Bedingungen (ist nach 17:00 und twilight weather) erfüllt sind. Das passiert aber nicht! Anders ist es, wenn ich ein normales define at *17:00 nehme. Dann wird nach dem Neustart direkt geschaltet, wenn die Zeit von 17:00 erreicht ist.

Ist das "normal" mit dem DOIF oder kann man das abfangen?

Gruß,
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 November 2014, 08:58:10
Zitat von: Spartacus am 07 November 2014, 08:33:29
Guten morgen,
Ich habe immer noch ein Problem mit der Logik von DOIF.

Folgendes ist implementiert:
define GartenBeleuchtung DOIF (\
([17:00-22:30|56] or\
[17:00-22:30] and  [Feiertag:tomorrow] ne "none" or\
[17:00-21:00|01234] and [Feiertag:tomorrow] eq "none" or\
[17:00-02:00] and [Feiertag:state] eq "Silverster" \
) and [myTwilight:twilight_weather] <30) (set EnO_switch_FF94C082 on) DOELSE (set EnO_switch_FF94C082 off)
attr GartenBeleuchtung cmdState on|off
attr GartenBeleuchtung room Gartenlicht
attr GartenBeleuchtung wait 900:900


Fhem stürzt von Zeit zu Zeit einfach ab, bzw. ist ais irgendwelchen Gründen so start ausgelastet, dass nur noch ein Kill -9 hilft um es zu beenden (das liegt m.E. an der Verwendung vom Sonos Modul, das muss irgendwann mal auf einen separaten rpi).

Normalerweise geht das Gartenlicht irgendwann zwischen 17:00 und twilight_weather an. Wenn ich nun merke, dass sich hier nichts tut, ist fhem mal wieder abgestürzt. Wenn ich fhem nun neu starte, sollte eigentlich das DOIF greifen und die Gartenbeleuchtung direkt einschalten wenn die Bedingungen (ist nach 17:00 und twilight weather) erfüllt sind. Das passiert aber nicht! Anders ist es, wenn ich ein normales define at *17:00 nehme. Dann wird nach dem Neustart direkt geschaltet, wenn die Zeit von 17:00 erreicht ist.

Ist das "normal" mit dem DOIF oder kann man das abfangen?

Gruß,
Christian.
Ja. In der ersten Version von DOIF wurde nach dem Neustart immer geschaltet - der letzte Zustand war egal. Das hatte den Nachteil, dass immer etwas ausgeführt wurde, obwohl es vor Herunterfahren des System bereits geschaltet wurde. Z. B. bei "Waschmaschine fertig" - das kann man hier im Thread irgendwo nachlesen. Nun wird der letzte Zustand des Moduls ausgewertet. Wenn das System abstürzt, dann wurde nichts gespeichert und damit stimmt der tatsächliche Zustand mit dem zuletzt gesetzten nicht überein. Das ist mir auch als negativ schon aufgefallen. Ich werde in der nächsten Version ein Attribut einführen, mit dem man festlegen kann, ob das Modul nach dem Neustart neu initialisiert werden soll - so wie in der ersten Version.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 07 November 2014, 09:01:47

([17:00-22:30|56] or\
[17:00-22:30] and  [Feiertag:tomorrow] ne "none" or\
[17:00-21:00|01234] and [Feiertag:tomorrow] eq "none" or\
[17:00-02:00] and [Feiertag:state] eq "Silverster" \
)

da fehlen ganz bestimmt ein paar klammern, sonst passiert das ganze nie, da auf Silvester Neujahr folgt und nach Silvester aber kein Feiertag sein darf.
Überleg doch noch mal wann du genau schalten möchtest 5 ist Freitag 6 ist Samstag 0 ist Sonntag.

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 November 2014, 09:34:31
Zitat von: igami am 07 November 2014, 09:01:47

([17:00-22:30|56] or\
[17:00-22:30] and  [Feiertag:tomorrow] ne "none" or\
[17:00-21:00|01234] and [Feiertag:tomorrow] eq "none" or\
[17:00-02:00] and [Feiertag:state] eq "Silverster" \
)

da fehlen ganz bestimmt ein paar klammern, sonst passiert das ganze nie, da auf Silvester Neujahr folgt und nach Silvester aber kein Feiertag sein darf.
Überleg doch noch mal wann du genau schalten möchtest 5 ist Freitag 6 ist Samstag 0 ist Sonntag.

Grüße
Igami
Ich sehe keine Fehler, auch keine fehlenden Klammern. Man sollte natürlich die Reihenfolge der Operatoren kennen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 07 November 2014, 10:02:38
Wieder was gelernt, ich dachte bisher immer, dass ich sowas klammern muss wenn ich
(Bedingung1 or (Bedingung 2 and Bedingung3))
abfragen will.

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: dancatt am 07 November 2014, 10:10:40
and kommt vor or. wie punkt vor strich.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 07 November 2014, 14:21:15
HAllo.
Ich klink mich kurz ein, wie fragt man mit DOIF mytwilight:ss ab?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 November 2014, 17:10:35
Zitat von: satprofi am 07 November 2014, 14:21:15
HAllo.
Ich klink mich kurz ein, wie fragt man mit DOIF mytwilight:ss ab?


kommt drauf an was du vorhast:

hier z. B. als Timer:

... DOIF ([{ReadingsVal("mytwilight","ss","")}])(set ...)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 07 November 2014, 18:13:53
einfach schalten bei ereignis. mit notify klappts ja, wollte es mit DOIF mal austesten.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 07 November 2014, 18:22:15
Und ein Beispiel aus der commandref anpassen ist zu schwer  ???
Ach so, hab ich doch galtt vergessen - seinen Wunsch hier posten und Damian wird dann schon den passenden Code dazu liefern.
Dann kannst du nur hoffen das Damian immer erreichbar ist.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 07 November 2014, 19:06:32
Hallo.
Leider finde ich in der Commandref von DOIF kein Beispiel darüber.
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 07 November 2014, 19:09:39
Schon klar - mitdenken und eines der vielen vorhandenen Beispiele abwandeln ist wohl nicht.
Was machst du nur wenn das Forum mal 2 Wochen down ist oder Damian mal 2 Wochen auf Urlaub  8)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 November 2014, 19:36:55
Zitat von: Puschel74 am 07 November 2014, 19:09:39
Schon klar - mitdenken und eines der vielen vorhandenen Beispiele abwandeln ist wohl nicht.
Was machst du nur wenn das Forum mal 2 Wochen down ist oder Damian mal 2 Wochen auf Urlaub  8)

Das ist schon ok, dass er hier danach fragt. Die Sache mit dem Reading als Timertrigger ist schon was besonders und funktioniert, obwohl ich mir bei der Programmierung von DOIF keine Gedanken zu solch einem Fall gemacht habe.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 07 November 2014, 19:42:05
Natürlich ist es ok, aber ist wohl nicht zu viel verlangt das man erstmal selbst seine grauen Zellen bemüht und wenn man dann nicht weiter kommt mal eben fragt.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 08 November 2014, 11:06:14
Hallo Damian,
ich habe doch noch einmal eine Frage zum DOIF:

Folgender Code:
define GartenBeleuchtung DOIF (\
([17:00-22:30|56] or\
[17:00-22:30] and  [Feiertag:tomorrow] ne "none" or\
[17:00-21:00|01234] and [Feiertag:tomorrow] eq "none" or\
[17:00-02:00] and [Feiertag:state] eq "Silverster" \
) and [myTwilight:twilight_weather] <30) (set EnO_switch_FF94C082 on) DOELSE (set EnO_switch_FF94C082 off)
attr GartenBeleuchtung cmdState on|off
attr GartenBeleuchtung room Gartenlicht
attr GartenBeleuchtung wait 900:900


Das Listing sieht dann so aus:
NR         446
   NTFY_ORDER 50-GartenBeleuchtung
   STATE      off
   TYPE       DOIF
   Readings:
     2014-11-07 22:30:00   cmd_event       timer_2
     2014-11-07 22:30:00   cmd_nr          2
     2014-11-08 00:00:02   e_Feiertag_state none
     2014-11-08 00:00:02   e_Feiertag_tomorrow none
     2014-11-08 10:47:43   e_myTwilight_twilight_weather 100
     2014-11-07 22:30:00   state           off
     2014-11-07 18:16:48   timer_1_c1      08.11.2014 17:00:00|56
     2014-11-07 22:30:00   timer_2_c1      08.11.2014 22:30:00|56
     2014-11-07 18:16:48   timer_3_c1      08.11.2014 17:00:00
     2014-11-07 22:30:00   timer_4_c1      08.11.2014 22:30:00
     2014-11-07 18:16:48   timer_5_c1      08.11.2014 17:00:00|01234
     2014-11-07 21:00:00   timer_6_c1      08.11.2014 21:00:00|01234
     2014-11-07 18:16:48   timer_7_c1      08.11.2014 17:00:00
     2014-11-08 02:00:00   timer_8_c1      09.11.2014 02:00:00
     2014-11-08 10:44:32   wait_timer      no timer
   Condition:
     0          (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"56") or DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and  ReadingValDoIf('Feiertag','tomorrow','') ne "none" or DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"01234") and ReadingValDoIf('Feiertag','tomorrow','') eq "none" or DOIF_time($hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"") and ReadingValDoIf('Feiertag','state','') eq "Silverster" ) and ReadingValDoIf('myTwilight','twilight_weather','') <30
   Days:
     0          56
     1          56
     4          01234
     5          01234
   Devices:
     0           Feiertag myTwilight
     all         Feiertag myTwilight
   Do:
     0          set EnO_switch_FF94C082 on
     1          set EnO_switch_FF94C082 off
   Helper:
     last_timer 8
     sleeptimer -1
   Internals:
   Readings:
     0           Feiertag:tomorrow Feiertag:state myTwilight:twilight_weather
     all         Feiertag:tomorrow Feiertag:state myTwilight:twilight_weather
   Realtime:
     0          17:00:00
     1          22:30:00
     2          17:00:00
     3          22:30:00
     4          17:00:00
     5          21:00:00
     6          17:00:00
     7          02:00:00
   State:
   Time:
     0          17:00:00
     1          22:30:00
     2          17:00:00
     3          22:30:00
     4          17:00:00
     5          21:00:00
     6          17:00:00
     7          02:00:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timerfunc:
   Timers:
     0           0  1  2  3  4  5  6  7
Attributes:
   cmdState   on|off
   room       Gartenlicht
   wait       600:600


Mir ist nicht ganz klar, wie das zu lesen ist, bzw. Wie kann ich erkennen, welche Aktion als Nächste ansteht.
Der Hintergrund ist, ich möchte in einer Visualisierung die nächste geplante und tatsächliche Einschalt- und  Ausschaltzeit anzeigen. Ich weiß, bei "twilight_weather" geht das mit der geplanten Zeit nicht da würde ich dann auf "ss_weather" wechseln, da es für twilight_weather ja keine Uhrzeit gibt. Wie kann ich erkennen, welcher der 8 Timer als nächstes relevant wird!

z.B.
Heute ist Samstag: Hier sollte dann 17:00-22:30 als geplante Zeit angezeigt werden, die tatsächle Schaltzeit leite ich dann wie ab? Kann man das über "cmd_nr" und "cmd_event" irgendwie ermitteln?

Ich hoffe es ist einigermaßen klar, was ich hier erreichen möchte!
Danke und Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 November 2014, 15:05:52
Das ist nicht so einfach. Alle Timer die du siehst triggern und zwar genau um die Zeit, die da steht. Welche Auswirkung das für das Schalten hat, das hängt von der dazugehörigen Bedingung (c1, c2, ...) ab, ob sie zum Zeitpunkt der Triggerung wahr ist oder eben nicht. Z. B. triggert die erste Bedingung immer um 17:00 und 22:30 Uhr, wahr ist sie aber nur am Freitag und Samstag zwischen 17:00 und 22:30 Uhr.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 November 2014, 10:12:48
Zitat von: Spartacus am 08 November 2014, 11:06:14
Ich weiß, bei "twilight_weather" geht das mit der geplanten Zeit nicht da würde ich dann auf "ss_weather" wechseln, da es für twilight_weather ja keine Uhrzeit gibt. Wie kann ich erkennen, welcher der 8 Timer als nächstes relevant wird!
Nur als Hinweis:
Ich weiß nicht, warum Du von twilight_weather auf ss_weather wechseln willst, aber eines solltest Du dabei beachten. DOIF stellt seine Timer immer zu einem bestimmten Zeitpunkt x mit den dann aktuellen Werten ein (wie und wann genau, weiß ich nicht mehr, steht hier irgendwo in diesem mittlerweile recht länglichen Thread). Der Witz bei ss_weather ist ja aber, dass das im Laufe des Tages mehrfach aktualisiert wird, wenn sich die Wetterbedingungen ändern. Davon bekommt das DOIF dann aber nichts mehr mit und passt den Schaltzeitpunkt nicht an. Deshalb würde ich bei der Lösung bleiben, direkt den Twilight_weather-Wert abzufragen oder eben auf das Event ss_weather zu triggern.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 09 November 2014, 10:52:51
Hallo,
ok! Danke für die Antworten. Dann muss ich mir zwecks Übersicht eine statische Tabelle bauen und dann die geplanten und die tatsächlichen Werte anzeigen.

Gruß
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 November 2014, 11:18:53
Zitat von: Brockmann am 09 November 2014, 10:12:48
DOIF stellt seine Timer immer zu einem bestimmten Zeitpunkt x mit den dann aktuellen Werten ein (wie und wann genau, weiß ich nicht mehr, steht hier irgendwo in diesem mittlerweile recht länglichen Thread).

Zum ersten mal bei der Definition des Moduls und dann erst, wenn der gesetzte Timer getriggert hat, zwischendurch wird der Timer nicht aktualisiert, insbesondere nicht wenn ein Reading mit [{ReadingsVal... zum Timer gemacht wurde, auch nicht wenn sich dieser ändert. Mit anderen Worten, einmal gesetzter Timer bleibt solange bestehen, bis er triggert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 09 November 2014, 13:04:06
Hallo Christian,

versuch es mal mit etwas in der folgenden Art:

define ntfy_redefine_GartenBeleuchtung notify myTwilight:twilight_weather {my $DEF=InternalVal('GartenBeleuchtung','DEF','DEF error');;fhem("modify GartenBeleuchtung $DEF")}

soetwas in der Art nutze ich bei uns in der Firma auch um Schaltzeiten komfortabel via DropDown zu ändern.
Dadurch wird das DOIF einfach neu initialisiert und auch die Werte neu ausgelesen.

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 November 2014, 15:05:27
Zitat von: igami am 09 November 2014, 13:04:06
Hallo Christian,

versuch es mal mit etwas in der folgenden Art:

define ntfy_redefine_GartenBeleuchtung notify myTwilight:twilight_weather {my $DEF=InternalVal('GartenBeleuchtung','DEF','DEF error');;fhem("modify GartenBeleuchtung $DEF")}

soetwas in der Art nutze ich bei uns in der Firma auch um Schaltzeiten komfortabel via DropDown zu ändern.
Dadurch wird das DOIF einfach neu initialisiert und auch die Werte neu ausgelesen.

Grüße
Igami

ja, mit modify kann man natürlich das Modul immer neu initialisieren, allerdings wird dadurch die Zustandsverwaltung des Moduls zunichtegemacht. Wenn nur Timer definiert sind, ist es sicherlich nicht so kritisch.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: det. am 09 November 2014, 19:09:08
Hallo Damian,
komme mit der Lichtsteuerung meines Hausflures beim Öffnen der Haustür nicht weiter (soll nach Ausschalten nicht sofort beim nächsten Türöffnen wieder angehen oder wenn man vor dem Verlassen bereits ausgeschaltet hat). Es gab da mal einen Wiki Artikel, habe das mit Deinem Modul umgesetzt, u.a. weil das genial nur numerische Werte aus meinem 1-wire Helligkeitsmodul rausfiltert. Läuft, nur die Sache mit der Zeitsteuerung geht offenbar nicht, weil die time() kein Device ist. Habe jetzt recht lange ohne Erfolg probiert und bin guter Hoffnung, dass Du mit einer Lösung helfen kannst.
define flurlichtsteuerung DOIF (([OWX_26_0A9116000000:light:d]<10) and ([SCHb_Haustuer] eq "off") and [opentime()<time()]) (set Flur on-for-timer 320)
define storeLastOff notify Flur:off { $data{lastOffTime} = opentime() }
sub
opentime()
{
  my $startzeit= time()+180;
   return $startzeit;
}

Flur ist ein HM Schalter; Schb_Haustür eine alte 2 Kanal FS20 Sünde...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 November 2014, 19:57:37
Zitat von: det. am 09 November 2014, 19:09:08
Hallo Damian,
komme mit der Lichtsteuerung meines Hausflures beim Öffnen der Haustür nicht weiter (soll nach Ausschalten nicht sofort beim nächsten Türöffnen wieder angehen oder wenn man vor dem Verlassen bereits ausgeschaltet hat). Es gab da mal einen Wiki Artikel, habe das mit Deinem Modul umgesetzt, u.a. weil das genial nur numerische Werte aus meinem 1-wire Helligkeitsmodul rausfiltert. Läuft, nur die Sache mit der Zeitsteuerung geht offenbar nicht, weil die time() kein Device ist. Habe jetzt recht lange ohne Erfolg probiert und bin guter Hoffnung, dass Du mit einer Lösung helfen kannst.
define flurlichtsteuerung DOIF (([OWX_26_0A9116000000:light:d]<10) and ([SCHb_Haustuer] eq "off") and [opentime()<time()]) (set Flur on-for-timer 320)
define storeLastOff notify Flur:off { $data{lastOffTime} = opentime() }
sub
opentime()
{
  my $startzeit= time()+180;
   return $startzeit;
}

Flur ist ein HM Schalter; Schb_Haustür eine alte 2 Kanal FS20 Sünde...

dann eher so, ohne notify und ohne subroutine  ;) :

define flurlichtsteuerung DOIF ([Flur] eq "off")
  ({$data{lastOffTime}=time()+180})
DOELSEIF ([OWX_26_0A9116000000:light:d]<10 and [SCHb_Haustuer] eq "off" and $data{lastOffTime} < time())
  (set Flur on-for-timer 320)

attr flurlichtsteuerung do always


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: det. am 09 November 2014, 20:53:19
Hallo Damian,
perfekt, vielen Dank!!!  :)  Funktioniert genau wie ich mir es vorgestellt hatte. Das Brett vor dem Kopf resultierte aus dem Tausch das FS20 UP Aktors heute gegen einen HM Aktor und der irrigen Vorstellung, den Code nur leicht anpassen zu müssen. Da die Frage zu der Problematik hier schon mehrmals kam, haben sicher einige User Verwendung für Deine Lösung.
Titel: Habe Problem mit Wochentagssteuerung
Beitrag von: kumue am 11 November 2014, 11:30:45
Hallo zusammen,

mein DOIF soll nur am Sonntag zu einer bestimment Zeit ausgeführt werden. Also habe ich ([18:30-23:00|0]) definiert.
Aber es wird auch an den anderen Wochentagen ausgeführt.
Vermute, es liegt am Pipe-Zeichen. Änderungen mache ich in der GUI über DEF.
Habe Pipe
- aus der commandreferenz kopiert
- normal über die Tastatur eingegeben
- über den ASCII Code U+007C  (VERTICAL LINE)
Half alles nix.
Bei den Updates bin ich auf dem neusten Stand.
Vielleicht hat jemand einen Tipp....

Danke im voraus.
Gruß Kai
Titel: Antw:Habe Problem mit Wochentagssteuerung
Beitrag von: Damian am 11 November 2014, 13:50:02
Zitat von: kumue am 11 November 2014, 11:30:45
Hallo zusammen,

mein DOIF soll nur am Sonntag zu einer bestimment Zeit ausgeführt werden. Also habe ich ([18:30-23:00|0]) definiert.
Aber es wird auch an den anderen Wochentagen ausgeführt.
Vermute, es liegt am Pipe-Zeichen. Änderungen mache ich in der GUI über DEF.
Habe Pipe
- aus der commandreferenz kopiert
- normal über die Tastatur eingegeben
- über den ASCII Code U+007C  (VERTICAL LINE)
Half alles nix.
Bei den Updates bin ich auf dem neusten Stand.
Vielleicht hat jemand einen Tipp....

Danke im voraus.
Gruß Kai

Die Syntax ist korrekt. Mache bitte list <dein doif-modul> in der commandozeile und poste hier den Output.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: kumue am 11 November 2014, 14:04:36
Hallo Damian,
anbei der list-output
Der Dummy DU_Temp.... liefert die gewünschte Temp. Sonntags, wenn die gewünschte Temp. kleiner als die vom Sensor ist, dann mach den Strahler an und ab 23′C wieder aus.
Funktioniert soweit, nur eben auch an allen Wochentagen.

Internals:
   DEF        ([18:30-20:00|0] and [SE_TH_Bad:temperature] < [DU_Temp_Bad]) (set SW_Strahler_Bad on) DOELSEIF ([18:30-20:00|0] and [SE_TH_Bad:temperature] > 23) (set SW_Strahler_Bad off)
   NAME       DO_TH_Bad
   NR         258
   NTFY_ORDER 50-DO_TH_Bad
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-11-10 18:47:19   cmd_event       SE_TH_Bad
     2014-11-10 18:47:19   cmd_nr          2
     2014-11-07 13:52:14   e_DU_Temp_Bad_STATE 21
     2014-11-11 13:56:48   e_SE_TH_Bad_temperature 21.2
     2014-11-10 18:47:19   state           cmd_2
     2014-11-11 09:29:39   timer_1_c1      11.11.2014 18:30:00
     2014-11-11 09:29:39   timer_2_c1      11.11.2014 20:00:00
     2014-11-11 09:29:39   timer_3_c2      11.11.2014 18:30:00
     2014-11-11 09:29:39   timer_4_c2      11.11.2014 20:00:00
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf('SE_TH_Bad','temperature','') < InternalDoIf('DU_Temp_Bad','STATE','')
     1          DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf('SE_TH_Bad','temperature','') > 23
   Days:
   Devices:
     0           SE_TH_Bad DU_Temp_Bad
     1           SE_TH_Bad
     all         SE_TH_Bad DU_Temp_Bad
   Do:
     0          set SW_Strahler_Bad on
     1          set SW_Strahler_Bad off
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           DU_Temp_Bad:STATE
     all         DU_Temp_Bad:STATE
   Readings:
     0           SE_TH_Bad:temperature
     1           SE_TH_Bad:temperature
     all         SE_TH_Bad:temperature
   Realtime:
     0          18:30:00
     1          20:00:00
     2          18:30:00
     3          20:00:00
   State:
   Time:
     0          18:30:00
     1          20:00:00
     2          18:30:00
     3          20:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   do         always
   group      Services
   icon       celsius
   room       Bad


Gruß Kai

##################
Edit:
Habe gerade ein Test-DOIF angelegt,,,
Mit ([18:00-20:00|0]) wurde geschaltet, mit ([18:02-20:00|06]) nicht...
Steht die 0, der Sonntag also allein da, gibts bei mir Probleme...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 November 2014, 18:25:14
Zitat von: kumue am 11 November 2014, 14:04:36

Habe gerade ein Test-DOIF angelegt,,,
Mit ([18:00-20:00|0]) wurde geschaltet, mit ([18:02-20:00|06]) nicht...
Steht die 0, der Sonntag also allein da, gibts bei mir Probleme...

ja, its not a feature it´s a bug  :(
Korrektur morgen per Update  :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 18 November 2014, 12:06:18
@Damian

ich habe da mal eine Frage zu deinem DOIF Modul. Ich habe vor eine Beleuchtungssteuerung für mein Aussenlicht zu erstellen, so nach dem Muster "Aus, Dämmerungsschaltung und Zufall".. wobei hier für mich interessant ist die sogenannte Zufallsschaltung z.B. bei nicht Anwesenheit.
Kann ich dieses mit dem DOIF Modul erstellen, dass wenn ich in einer Setlist auf Zufall schalte das die Beleuchtung z.B sich immer mal zu vollkommen unbestimmten Zeiten ein-/ausschaltet für eine gewisse Zeit mal 1 Std. oder auch 30min. usw. wobei auch die Ein und Ausschaltzeiten variieren sollten und diese auch nur ab und bis zu einer Zeit, also eben abends ab Dämmerung bis morgens Dämmerung.

Ich habe in der commandref schon so einiges gelesen über dein Modul, aber ob dieses was ich möchte so zu bewerkstelligen ist habe ich nicht raus finden können. Evtl. sagst du ja sofort ja das geht oder mit Einschränkung oder eben nicht.

Vielen Dank für deine Hilfestellung vorab
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 November 2014, 14:27:44
Zitat von: moonsorrox am 18 November 2014, 12:06:18
@Damian

ich habe da mal eine Frage zu deinem DOIF Modul. Ich habe vor eine Beleuchtungssteuerung für mein Aussenlicht zu erstellen, so nach dem Muster "Aus, Dämmerungsschaltung und Zufall".. wobei hier für mich interessant ist die sogenannte Zufallsschaltung z.B. bei nicht Anwesenheit.
Kann ich dieses mit dem DOIF Modul erstellen, dass wenn ich in einer Setlist auf Zufall schalte das die Beleuchtung z.B sich immer mal zu vollkommen unbestimmten Zeiten ein-/ausschaltet für eine gewisse Zeit mal 1 Std. oder auch 30min. usw. wobei auch die Ein und Ausschaltzeiten variieren sollten und diese auch nur ab und bis zu einer Zeit, also eben abends ab Dämmerung bis morgens Dämmerung.

Ich habe in der commandref schon so einiges gelesen über dein Modul, aber ob dieses was ich möchte so zu bewerkstelligen ist habe ich nicht raus finden können. Evtl. sagst du ja sofort ja das geht oder mit Einschränkung oder eben nicht.

Vielen Dank für deine Hilfestellung vorab

Das sollte kein Problem sein. Den Zufall müsstest du aber dir selbst in myUtils als Routine programmieren.
Deine Funktion muss dann immer nur die errechnete Zeit der Form "SS:MM" liefern. Dann kannst du definieren:

define di_schalten_mit_Zufall DOIF ([{einschaltfunktion()}-{ausschaltfunktion()}])(set ...)

Hier hat jemand schon etwas mit rand() als Zufallsfunktion programmiert: http://forum.fhem.de/index.php/topic,28856.msg217251.html#msg217251

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 18 November 2014, 16:51:31
Ich werde mal schauen was ich hier so finde, dachte aber es geht ohne die Programmierung in der 99_myUtils, denn das wird mir nicht gelingen.
Werde dann dazu einen Beitrag unter Beleuchtung anfangen zu schreiben denn da passt es besser hin...
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 18 November 2014, 17:16:02
Zitat von: moonsorrox am 18 November 2014, 16:51:31
Ich werde mal schauen was ich hier so finde, dachte aber es geht ohne die Programmierung in der 99_myUtils, denn das wird mir nicht gelingen.
Werde dann dazu einen Beitrag unter Beleuchtung anfangen zu schreiben denn da passt es besser hin...
Schau Dir mal das Modul RandomTimer (http://fhem.de/commandref.html#RandomTimer) an. Das macht im Prinzip das, was Du suchst, denke ich.
Ich kenne es auch nur von da, habe also selbst keine praktische Erfahrung damit. Das Feintuning des switchmode (also quasi die Definition der "Zufälligkeit") klingt etwas komplex bzw. man muss da vielleicht etwas probieren, bis man die optimalen Werte findet. Ist aber vielleicht einen Versuch wert.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 18 November 2014, 21:05:27
@Damian
vllt kannst du mal in diesem Posting (http://forum.fhem.de/index.php?topic=29323.new#new) schauen ob ich das richtig verstanden habe

@Brockmann
das schaue ich mir dann einmal an, betrifft jetzt die Konditionen für das define welches ich jetzt erst mal mit Zeiten gemacht habe.
Das DEF werde ich dann später mit den Zufallszeiten befüllen wenn es mir gelingt
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 19 November 2014, 16:07:54
Hallo,
tolles Modul, vielen Dank hierfür !!
Ich versuche mich gerade daran (Testweise an einem Dummy). Inspiriert durch den WiKi-Eintrag
Rollläden sollen an Arbeitstagen nach 6:25 Uhr hochfahren, wenn es hell wird, am Wochenende erst um 9:00 Uhr, herunter sollen sie wieder, wenn es dunkel wird:

define di_shutters DOIF ([sensor:brightness]>100 and [06:25-09:00|8] or [09:00|7]) (set shutters up) DOELSEIF ([sensor:brightness]<50) (set shutters down)


will ich jetzt versuchen meine komplizierte Jalosiensteuerung von x-at-Befehlen auf wenige DOIFs umzustellen.
Ich muss dabei zwischen speziellen Wochentagen (Mo und Di) sowie !$we abfragen. Dh Mo+Di nur wenn = !$we
geht das mit [14:00|128] oder [14:00|12] and !$we ?
Die die übrigen Wochentage (Mi-Fr) kann man doch noch mit weiteren geschachtelten and/or-bedingungen mit separatem Timer in die eine DOIF-Bedingung einfügen ,oder  ?  Also "Mo+Di um 14:00 Uhr", "Mi-Fr Twilight_weather>30" und am Wochenende ($we) nicht vor 8:30 ?

so zum Beispiel: (RolloDOIF ist mein Testdummy, Rollo_Master ein Dummy zum deaktivieren des Timers)

define RolloHinten DOIF (([14:00|12] and (!$we)) or ([myT:twilight_weather]>30 and [06:25-09:00|345] or [08:30-09:00|7]) and [Rollo_Master:state] eq "on") (set RolloDOIF on) DOELSEIF ([myT:twilight_weather]<30 and [Rollo_Master:state] eq "on") (set RolloDOIF off)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 November 2014, 16:24:31
Zitat[14:00|128]
8 steht für Arbeitstage und wird mit anderen Zahlen mit or verknüpft und nicht mit and, daher musst du auf  [14:00|12] and !$we ausweichen.

ZitatDie die übrigen Wochentage (Mi-Fr) kann man doch noch mit weiteren geschachtelten and/or-bedingungen mit separatem Timer in die eine DOIF-Bedingung einfügen ,oder  ?  Also "Mo+Di um 14:00 Uhr", "Mi-Fr Twilight_weather>30" und am Wochenende ($we) nicht vor 8:30?
Je nach dem, wie du es definierst, kannst du das in weitere DOELSEIF-Fälle packen. Wenn es der gleiche Ausführungscode ist, kannst du es evtl. sogar in die gleiche Bedingung mit or verknüpft einbauen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 19 November 2014, 16:29:34
Hi Damian,


Danke für die schnelle Antwort. Ich hatte meinen Beitrag zwischenzeitlich editiert, und mal einen Testcode eingesetzt. Hoffe die Klammern sind richtig. Hans auch zum testen in meine FHEM.cfg gepackt. Bin mal gespannt  :)


Lg
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 November 2014, 16:35:48
Zitat von: Bartimaus am 19 November 2014, 16:29:34
Hi Damian,


Danke für die schnelle Antwort. Ich hatte meinen Beitrag zwischenzeitlich editiert, und mal einen Testcode eingesetzt. Hoffe die Klammern sind richtig. Hans auch zum testen in meine FHEM.cfg gepackt. Bin mal gespannt  :)


Lg

ich habe meinen Beitrag auch gerade noch angepasst.

define RolloHinten DOIF (([14:00|12] and (!$we)) or ([myT:twilight_weather]>30 and [06:25-09:00|345] or [08:30-09:00|7]) and [Rollo_Master:state] eq "on") (set RolloDOIF on) DOELSEIF ([myT:twilight_weather]<30 and [Rollo_Master:state] eq "on") (set RolloDOIF off)

sollte funktionieren, allerdings hast du deine twilight-Abfrage nur mit Tagen 345 über and verbunden nicht mit Wochenende, wahrscheinlich meinst du aber:

define RolloHinten DOIF (([14:00|12] and (!$we)) or ([myT:twilight_weather]>30 and ([06:25-09:00|345] or [08:30-09:00|7])) and [Rollo_Master:state] eq "on") (set RolloDOIF on) DOELSEIF ([myT:twilight_weather]<30 and [Rollo_Master:state] eq "on") (set RolloDOIF off)

and bindet stärker als or (nicht nur in Perl, sondern in allen Programmiersprachen)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 19 November 2014, 17:43:58
@Damian

ich habe bisher die Zeiten in einer RSS Übersicht dargestellt mit diesem Code

text x y { InternalVal('WegLampe1_Ein','STATE','') }
text x y { InternalVal('WegLampe1_Aus','STATE','') }


jetzt habe ich ja wie im anderen Beitrag schon geschrieben die Steuerung der Außenbeleuchtung (noch nicht komplett, brauche noch etwas Hilfe) mit deinem DOIF Modul gemacht, wie kann ich jetzt die Zeiten/Timer darstellen. Habe schon einige Definitionen probiert bisher kein Erfolg. Ich sehe die ganzen Zeiten ja in den Readings, aber ich möchte sie alle in einer Übersicht haben.
Getestet habe ich schon cmd_1, cmd_2, timer_1_c1,timer_2_c1 usw. mit Readingsval und auch "state" schon probiert aber ich bekomme keine Zeitanzeige hin.. :-\
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 19 November 2014, 18:06:10
@Damian,


vielen lieben Dank. Deine Hilfsbereitschaft ist wie immer vorbildlich.  :-*
Jetzt kann ich aus 9 '*at' 2 DOIF machen. Und das nur für meine beiden Jalousien. Für Pool und Aussenlampe kann ich jetzt auch was abspecken  :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 08:40:51
Zitat von: moonsorrox am 19 November 2014, 17:43:58
@Damian

ich habe bisher die Zeiten in einer RSS Übersicht dargestellt mit diesem Code

text x y { InternalVal('WegLampe1_Ein','STATE','') }
text x y { InternalVal('WegLampe1_Aus','STATE','') }


jetzt habe ich ja wie im anderen Beitrag schon geschrieben die Steuerung der Außenbeleuchtung (noch nicht komplett, brauche noch etwas Hilfe) mit deinem DOIF Modul gemacht, wie kann ich jetzt die Zeiten/Timer darstellen. Habe schon einige Definitionen probiert bisher kein Erfolg. Ich sehe die ganzen Zeiten ja in den Readings, aber ich möchte sie alle in einer Übersicht haben.
Getestet habe ich schon cmd_1, cmd_2, timer_1_c1,timer_2_c1 usw. mit Readingsval und auch "state" schon probiert aber ich bekomme keine Zeitanzeige hin.. :-\

Wenn du irgendwo den Wert eines Timers anzeigen willst, z. B. timer_1_c1, dann musst du das nur korrekt angeben, hier also:

{ReadingsVal("dein DOIF-Modul Name","timer_1_c1","")}

das hat aber nichts mit DOIF zu tun, sondern mit Funktionen, wie ReadingsVal die der Anwender in FHEM nutzen kann.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 09:43:55
Zitat von: Bartimaus am 19 November 2014, 18:06:10
@Damian,


vielen lieben Dank. Deine Hilfsbereitschaft ist wie immer vorbildlich.  :-*
Jetzt kann ich aus 9 '*at' 2 DOIF machen. Und das nur für meine beiden Jalousien. Für Pool und Aussenlampe kann ich jetzt auch was abspecken  :)

Das war auch meine Intention bei diesem Modul. Wie ich schon in der Commandref geschrieben habe: "Wer die Lampe an macht, soll sie auch wieder aus machen", alles Andere ist vergleichbar mit dem Spagetticode, den man vor 30 Jahren mit gotos produziert hatte, und man selbst nachher nicht mehr wusste, wie alles zusammenhängt und jede Änderung zu unvorhergesehenen Nebeneffekten an ganz anderer Stelle führte.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 20 November 2014, 12:52:49
mit dem Thema DOIF hast du natürlich vollkommen Recht  :-\
Trotzdem hast du mir geholfen  ;)
Vielen Dank
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 20 November 2014, 13:14:52
Sodele, hier mein Beispiel für meine vorderen Jalousien. Das DOIF soll 5*at ersetzen:
Massgabe:
Masterschalter = on
An Schultagen helligkeitsgesteuert "hochfahren", jedoch nicht vor 06:25 Uhr
Am Wochenende oder in den Schulferien "hochfahren" um 09:15 Uhr
In den Ferien oder Freitags/Samstags helligkeitsgesteuert runterfahren
An Schultagen oder Sonntags helligkeitsgesteuert runterfahren, spätestens jedoch um 21:15Uhr.
define RolloVorne DOIF (([myT:twilight_weather]>40 and [06:25|8] and fhem("get Schulferien today") eq "none") or ([09:15|7] or (fhem("get Schulferien today") ne "none")) and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<30 and fhem("get Schulferien tomorrow") ne "none") or ([22:30|56]) or ([21:15|0] and fhem("get Schulferien tomorrow") eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)

Ich hoffe die Syntax mit Klammersetzung passt.....

Edit: Hm, irgendwas stimmt nicht, der RolloVo-Dummy hat sich gerade auf  "off" gestellt...

state cmd_2 2014-11-20 13:11:10
timer_1_c1 21.11.2014 06:25:00|8 2014-11-20 13:12:00
timer_2_c121.11.2014 09:15:00|72014-11-20 13:12:00
timer_3_c220.11.2014 22:30:00|562014-11-20 13:12:00
timer_4_c220.11.2014 21:15:002014-11-20 13:12:00


Edith2:
Habe das "or ([22:30|56])" durch "and  ([22:30|56])" ersetzt. Jetzt ist der State:initialized  ;)   
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 18:06:35
Du kannst auch statt:

fhem("get Schulferien today") eq "none"

eleganter:

[Schulferien:today] eq "none"

angeben.

Das gleiche gilt für tomorrow.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 20 November 2014, 18:45:02
Super, danke.
Leider hat mir heute irgendein Fehler das Logfile zugemüllt. Ich suche noch.
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 20 November 2014, 18:55:37
Hm, wenn ich (([myT:twilight_weather]>40 and [06:25|8] and fhem("get Schulferien today") eq "none") or ([09:15|7] or (fhem("get Schulferien today") ne "none")) and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<10 and fhem("get Schulferien tomorrow") ne "none") and ([22:30|56]) or ([21:15|0] and fhem("get Schulferien tomorrow") eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)

durch



(([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or ([09:15|7] or [Schulferien:today] ne "none")) and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or ([21:15|0] and [Schulferien:tomorrow] eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)


via DEF ersetze, erhalte ich:


RolloVorne DOIF: expected DOELSEIF or DOELSE: and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or ([21:15|0] and [Schulferien:tomorrow] eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)

Und natürlich erhalte ich bei jedem Reading von Twilight einen Logeintrag mit fhem get ...today...: none...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 19:04:19
Ich würde dir empfehlen bei komplexeren Definitionen mit Zeilenumbrüchen im DEF-Editor zu arbeiten:

Ich habe deinen fehlerhaften Ausdruck eingerückt:

(
  ([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or
  ([09:15|7] or [Schulferien:today] ne "none")
) and ([RolloVorne_Master:state] eq "on")
)
  (set RolloVoDOIF on)
DOELSEIF
(
( ([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or
   ([21:15|0] and [Schulferien:tomorrow] eq "none")
) and ([Rollo_Master:state] eq "on")
)
(set RolloVoDOIF off)


Es sollte dir jetzt auffallen, dass eine Klammer zu viel ist.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 20 November 2014, 19:18:00
Zitat von: Damian am 20 November 2014, 19:04:19
Ich würde dir empfehlen bei komplexeren Definitionen mit Zeilenumbrüchen im DEF-Editor zu arbeiten:

Ich habe deinen fehlerhaften Ausdruck eingerückt:

(
  ([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or
  ([09:15|7] or [Schulferien:today] ne "none")
) and ([RolloVorne_Master:state] eq "on")
->)<- Zuviel
  (set RolloVoDOIF on)
DOELSEIF
(
( ([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or
   ([21:15|0] and [Schulferien:tomorrow] eq "none")
) and ([Rollo_Master:state] eq "on")
)
(set RolloVoDOIF off)


Es sollte dir jetzt auffallen, dass eine Klammer zu viel ist.

Gruß

Damian


Ja, die markierte Klammer ist zuviel, habe ich auch in Notepad++ geprüft, aber wenn ich diese entferne (egal ob via DEF oder fhem.cfg) erhalte ich die nächste Fehlermeldung beim speichern: Define RolloVorne first  :-[


Ich suche weiter...
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 19:21:33
Zitat von: Bartimaus am 20 November 2014, 19:18:00

Ja, die markierte Klammer ist zuviel, habe ich auch in Notepad++ geprüft, aber wenn ich diese entferne (egal ob via DEF oder fhem.cfg) erhalte ich die nächste Fehlermeldung beim speichern: Define RolloVorne first  :-[


Ich suche weiter...
Das ist falsch:

(
  ([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or
  ([09:15|7] or [Schulferien:today] ne "none")
)<- hiermit hast du deine Bedingung bereits abgeschlossen      and ([RolloVorne_Master:state] eq "on")
)
  (set RolloVoDOIF on)
DOELSEIF
(
( ([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or
   ([21:15|0] and [Schulferien:tomorrow] eq "none")
) and ([Rollo_Master:state] eq "on")
)
(set RolloVoDOIF off)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 20 November 2014, 19:47:19
 :-[ ::) :-*


bei [Schulferien:today] eq "none"


erhalte ich im Log diese Meldung: 2014.11.20 18:51:58 2: RolloVorne: reading does not exist: [Schulferien:today]

Bug oder Feature ?

der alte "fhem{get....." Befehl liefert ein korrektes "none" zurück....
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 20:01:46
Zitat von: Bartimaus am 20 November 2014, 19:47:19
:-[ ::) :-*


bei [Schulferien:today] eq "none"


erhalte ich im Log diese Meldung: 2014.11.20 18:51:58 2: RolloVorne: reading does not exist: [Schulferien:today]

Bug oder Feature ?

der alte "fhem{get....." Befehl liefert ein korrektes "none" zurück....

ok. Dann probier einfach mal:

([myT:twilight_weather]>40 and ([06:25|8] or  [09:15|7]) and [RolloVorne_Master:state] eq "on")
  (set RolloVoDOIF on)
DOELSEIF
...


Ich habe alles rausgeschmissen, was bei dir in der ersten Bedingung falsch bzw. bedeutungslos und damit überflüssig war.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 20 November 2014, 20:07:52
Hi,


Schulferien.holiday ist NICHT mit $WE verheiratet, deswegen muss ich die separat abfragen.
Feiertag.holiday ist bei mir mit $WE verheiratet, da ich dort MEINE Urlaubstage eingetragen habe. D.h. morgen habe ich frei, meine Jungs aber nicht. Darum sollen deren Rollos mit Helligkeitssteuerung hochgehen, meine Rollos jedoch erst um 8:30....
Titel: Antw:neues Modul DOIF
Beitrag von: Inputsammler am 20 November 2014, 20:40:14
Hallo zusammen,

Also dein Modul ist echt einfach und universell.
Das hat bei mir schon einige notify und at Befehle ersetzt.

Leider bin ich jetzt an einen Punkt angekommen wo ich nicht mehr weiter weis.

Frage 1:
Ich habe mir die Funktion (def) angelegt
([FBDECT_17:power]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)

Dieser soll bewirken wenn die Leistung an der Steckdose unter 25 Watt fällt er die 2 Homatic ausschaltet.

Leider habe ich im LOG immer stehen
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5055) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5057) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<).....


Aber das ist mir nun auch zu erklären weil der AVM Steckdose als Reading das zurück liefert
e_FBDECT_17_power         16.37 W            2014-11-20 20:28:19

Jetzt meine Frage gibt es da ein Lösung wie ich den Werk konvertiere oder so.

Frage 2:
Diese Funktion arbeitet sehr gut
([22:00-00:00|5]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 on, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on)
jetzt meine Frage warum geht das nicht wenn ich es vereinfache wie in der WIKI und in der Referenz gezeigt wird nicht
nur mit einen on befehl und mit Komma getrennt.
([22:00-00:00|5]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on)


Frage 3:
Und noch eine kleine Frage das Modul von dir auf der ersten Seite ist immer das aktuelle?
Denn im Modul steht immer noch die alte Version und das alte Datum?

Danke

Gruß Gerd
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 20 November 2014, 21:01:24
Zitat von: Inputsammler am 20 November 2014, 20:40:14
Jetzt meine Frage gibt es da ein Lösung wie ich den Werk konvertiere oder so.
Zitat von: commandref
http://fhem.de/commandref_DE.html#DOIF (http://fhem.de/commandref_DE.html#DOIF)]
Mögliche Formatangaben für <format> sind:

'd' zum Filtern von positiven und negativen Dezimalzahlen.

[<device>:<reading>:d] entspricht [<device>:<reading>:[(-?\d+(\.\d+)?)]]

Zitat von: Inputsammler am 20 November 2014, 20:40:14
jetzt meine Frage warum geht das nicht wenn ich es vereinfache wie in der WIKI und in der Referenz gezeigt wird nicht
nur mit einen on befehl und mit Komma getrennt.
hinter dem Komma steht noch ein set, das gehört da nicht hin, es sei denn du hast ein Device mit dem Namen set und möchtest beiden den Zustand 'CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off' geben

Zitat von: Inputsammler am 20 November 2014, 20:40:14
Und noch eine kleine Frage das Modul von dir auf der ersten Seite ist immer das aktuelle?
Denn im Modul steht immer noch die alte Version und das alte Datum?
das Modul ist doch mittlerweile ofiziell eingecheckt und wird per update verteilt, ich denke nicht, dass das im ersten Beitrag noch aktuell ist, aber da kann nur Damian was zu sagen ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 21:27:38
Zitat von: Inputsammler am 20 November 2014, 20:40:14

2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5055) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5057) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<).....


Aber das ist mir nun auch zu erklären weil der AVM Steckdose als Reading das zurück liefert
e_FBDECT_17_power         16.37 W            2014-11-20 20:28:19

Im Reading ist W als Einheit daher filtern nach Zahlen einsetzen, siehe commandref von DOIF

also

([FBDECT_17:power:d]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)

Zitatjetzt meine Frage warum geht das nicht wenn ich es vereinfache wie in der WIKI und in der Referenz gezeigt wird nicht
nur mit einen on befehl und mit Komma getrennt.
([22:00-00:00|5]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on)

kann man so mit einem set lösen:

([22:00-00:00|5]) ((set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on))


Warum das so ist steht ebenfalls in der Commandref von DOIF.


ZitatUnd noch eine kleine Frage das Modul von dir auf der ersten Seite ist immer das aktuelle?
Denn im Modul steht immer noch die alte Version und das alte Datum?

Das Modul ist eingecheckt (steht im ersten Post) und ist immer aktuell per FHEM-Update.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 November 2014, 21:37:29
Zitat von: Bartimaus am 20 November 2014, 20:07:52
Hi,


Schulferien.holiday ist NICHT mit $WE verheiratet, deswegen muss ich die separat abfragen.
Feiertag.holiday ist bei mir mit $WE verheiratet, da ich dort MEINE Urlaubstage eingetragen habe. D.h. morgen habe ich frei, meine Jungs aber nicht. Darum sollen deren Rollos mit Helligkeitssteuerung hochgehen, meine Rollos jedoch erst um 8:30....
ok, na dann:
(
   [myT:twilight_weather]>40 and
   ([06:25|8] and [Schulferien:today] eq "none" or  [09:15|7] or [Schulferien:today] ne "none") and
   [RolloVorne_Master:state] eq "on"
)
  (set RolloVoDOIF on)
DOIF
....


sollte zumindest syntaktisch korrekt sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 21 November 2014, 13:18:13
Zitat von: Damian am 03 November 2014, 09:39:53
Gut dass wir auf das Thema kommen. In meiner Todo-Liste habe ich bereits "kein Trigger" für Readings vor längerer Zeit aufgenommen. Meine erste Idee war auch das Ausrufungszeichen gewesen. Allerdings würde das bei Programmierern "das Gegenteil von" bedeuten und das ist es nicht.
Daher habe ich nach anderen Zeichen gesucht, das sind meine letzten Aufzeichnungen:

-Readings ohne Trigger [NoTrigger:...] oder [#...] oder ['...] oder [^...]

So etwas würde man dann auf Zeiten übertragen.

Gruß

Damian

Das könnte ich nun wirklich gut gebrauchen. Bist du schon weiter gekommen? Es würde sich vielleicht auch ein [?...] anbieten, oder ist das schon anderweitig verplant wie in readingsGroup für Attribute?
Ansonsten noch als Vorschlag [*...], aber mit [noTrigger:...] kommt man bestimmt auch klar.
Werde mir solange mit ReadingsVal behelfen.

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 November 2014, 13:24:03
Zitat von: igami am 21 November 2014, 13:18:13
Das könnte ich nun wirklich gut gebrauchen. Bist du schon weiter gekommen? Es würde sich vielleicht auch ein [?...] anbieten, oder ist das schon anderweitig verplant wie in readingsGroup für Attribute?
Ansonsten noch als Vorschlag [*...], aber mit [noTrigger:...] kommt man bestimmt auch klar.
Werde mir solange mit ReadingsVal behelfen.

Grüße
Igami

Bin z. Zt. beruflich etwas eingespannt, um zu programmieren. Werde versuchen die Sachen in den Ferien zu programmieren. Vorschläge sind natürlich willkommen. Ein Fragezeichen ist auch keine schlechte Idee.
Solange kann man sich, wie du schon sagst, mit ReadingsVal oder Value behelfen.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: locodriver am 21 November 2014, 17:26:15
Ich hätte auch noch eine Anregung ;):

Das Attribut "do" in "doalways" ändern und wie bei "disable" mit 0 und 1 aus- bzw. einschalten. Ich denke, dann kann man bei Bedarf das Attribut ein- oder ausschalten und muss es nicht "deleten" wenn es mal nicht (mehr) gebraucht wird.
Die DOIF-Nutzer müssten natürlich das Attribut händisch ändern, aber das wäre ja nur einmalig.

Uwe
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 November 2014, 17:33:38
Zitat von: locodriver am 21 November 2014, 17:26:15
Ich hätte auch noch eine Anregung ;):

Das Attribut "do" in "doalways" ändern und wie bei "disable" mit 0 und 1 aus- bzw. einschalten. Ich denke, dann kann man bei Bedarf das Attribut ein- oder ausschalten und muss es nicht "deleten" wenn es mal nicht (mehr) gebraucht wird.
Die DOIF-Nutzer müssten natürlich das Attribut händisch ändern, aber das wäre ja nur einmalig.

Uwe

Warum sollte sich die Definition von do always plötzlich ändern. Ich habe es bei mir noch nie gebraucht. Entweder ist diese Einstellung erforderlich oder nicht. Das do attribut bekommt übrigens bei der nächsten Version weitere Einstellungsmöglichkeiten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 21 November 2014, 18:04:59
Zitat von: locodriver am 21 November 2014, 17:26:15
Das Attribut "do" in "doalways" ändern und wie bei "disable" mit 0 und 1 aus- bzw. einschalten. Ich denke, dann kann man bei Bedarf das Attribut ein- oder ausschalten und muss es nicht "deleten" wenn es mal nicht (mehr) gebraucht wird.
Die DOIF-Nutzer müssten natürlich das Attribut händisch ändern, aber das wäre ja nur einmalig.
Dann doch bitte lieber wie bei wait für jedes cmd separat
Titel: Antw:neues Modul DOIF
Beitrag von: locodriver am 21 November 2014, 18:28:07
@Damian: momentan habe zumindest ich keine Anwendung bei mir, aber wenn du schon weiter planst, dann lasse ich mich überraschen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 November 2014, 18:59:49
Zitat von: locodriver am 21 November 2014, 18:28:07
@Damian: momentan habe zumindest ich keine Anwendung bei mir, aber wenn du schon weiter planst, dann lasse ich mich überraschen.

Auch wenn ich z. Zt. was anders zu tun habe, hier schon mal meine todo-liste als Vorgeschmack für die nächste Version:

- Readings und Zeitangaben ohne Trigger [?...]
- relative Zeitangaben: [+HH:SS]
- nur einmal ein Timer für die gleiche Zeit (Intern)
- Mehrere Bedingungen, die zum gleichen Kommando, damit zum gleichen Zustand, führen, können angegeben werden (es wird nur die jeweilige Bedingung, zu der ein Ereignis eintritt, überprüft)

define di_test DOIF (<Bedingung1>)|(<Bedingung2)|(<Bedingung3>) (<Kommando1>)

- Mehrere Kommandos, die zu einer Bedingung gehören (interessant mit neuem wait):

define di_test DOIF (<Bedingung>)(<Kommando1>)(<Kommando2>)

- neue Attribute:

eventpause, waitnext, repeatsame, waitsame, do resetwait

Attribut eventpause

eventpause 300 Zwangspause, das nächste Event erst nach 300 Sekunden annehmen

Attribut waitnext

waitnext 300:400:200 Wartezeit für das gleiche Kommando nach dem ersten Schalten (nur in Verbindung mit do always sinnvoll)

Attribut repeatsame

repeatsame 4:5:3  Maximale Wiederholungsanzahl für die Wiederholung des gleichen Kommando (sinnvoll ohne do always)

Attribut waitsame

waitsame 2:1:3 Wartet maximal X-Sekunden auf das Eintreten des gleichen Kommandos.

Beispiele:

on-for-timer

define di_motion DOIF ([motion])
  (set light on)
  (set light off)

attr di_motion wait 0:500
attr di_motion do always|resetwait

nur ein Zustand cmd1
set light on wird nicht nochmal ausgeführt, solange timer läuft (intern cmd1_wait)

Alternative:

define di_motion DOIF ([motion])
         (set light on)
wait 500 (set light off)
attr di_motion do always|resetwait


set light on wird nicht nochmal ausgeführt, solange timer läuft (intern cmd1_wait)


Pushmeldung beim Ausbleiben eines Events:
define di_push DOIF ([Device])
  (set pushmeldung "kein Event")

attr di_push wait 600
attr di_push do always|resetwait


Waschmaschine fertig maximal 3-Mal im Abstand von mind. 10 Minuten
define di_fertig DOIF ([Watt]<2)
(set pushmeldung "Waschmaschine fertig)

attr di_fertig repeatsame 3
attr di_fertig evenpause 600


Rollladen hoch, wenn innerhalb einer Zeitspanne von 2 Sekunden ein Taster betätigt wird
define di_fensterhoch DOIF ([Fenster])(set Rollladen hoch)
attr di_fensterhoch waitsame 2
attr di_fenseterhoch do always


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: locodriver am 21 November 2014, 19:10:26
Du übertriffst dich wieder selbst...
Titel: Antw:neues Modul DOIF
Beitrag von: Sany am 22 November 2014, 18:03:54
Hallo DOIF-Fans,

kann ich mit DOIF auf Readings triggern, die bei verschiedenen Modulen den gleichen Namen haben? Etwas ausfühlicher:

ausgehend vom Wiki Batteriestatus http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung (http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung) wollte ich das per DOIF lösen. Problem beim notify: der meldende Sensor meldet ja immer wieder (z.B. ein FHT alle ca 15min), also gibts jede Menge Meldungen, bis die Batterie gewechselt ist. Per DOIF wäre das schön zu lösen. Ich bin oft nicht da, wo die Sender sind, ausserdem ist die Baatterie ja nie völlig leer, d.h. die Sender laufen ja noch eine Weile weiter, der Batteriewechsel muss nicht sofort sein, es reicht 1 Meldung.

das notify sieht so aus (DEF-Part):
.*:[Bb]attery.* { if ($EVENT !~ m/ok/) {fhem("set pushmessage message ".$NAME.": ".$EVENT." um ".TimeNow());Log 3, "$NAME : Batteriewarnung $EVENT"}}
und funktioniert.

per DOIF habe ich folgendes probiert:
([.*:battery.*] eq "low")({fhem("set pushmessage message ".$NAME.": ".$EVENT." um ".TimeNow())." <doif>"},{Log 3, "$NAME : Batteriewarnung $EVENT"})

das DOIF bleibt aber auf initialized, es wird also nie getriggert (ja, ein FHT meldet gerade batters low, deshalb kann ich es schön testen).

Abgesehen vom DO-Part, der so wohl nicht funktioniert ($EVENT und $NAME gibts bei DOIF so wohl nicht??) wollte ich gerne wissen, ob der IF-Part so überhaupt möglich ist, oder ob nur ein "namentlich" bekanntes Modul triggern kann?

ein list sieht so aus (wobei ich da noch nicht alles verstenden habe....)
Internals:
   CFGFN
   DEF        ([.*:battery.*] eq "low")({fhem("set pushmessage message ".$NAME.": ".$EVENT." um ".TimeNow())." <doif>"},{Log 3, "$NAME : Batteriewarnung $EVENT"})
   NAME       BattChecker
   NR         7219
   NTFY_ORDER 50-BattChecker
   STATE      initialized
   TYPE       DOIF
   Readings:
     2014-11-22 17:28:26   state           initialized
   Condition:
     0          ReadingValDoIf('.*','battery.*','') eq "low"
   Devices:
     0           .*
     all         .*
   Do:
     0          {fhem("set pushmessage message ".$NAME.": ".$EVENT." um ".TimeNow())." <doif>"},{Log 3, "$NAME : Batteriewarnung $EVENT"}
   Helper:
     last_timer 0
     sleeptimer -1
   Readings:
     0           .*:battery.*
     all         .*:battery.*
   State:
   Timerfunc:
Attributes:
   room       System


'eq "low"' ist nur testhalber, vorher stand 'ne "ok"'  (ohne ' )

Vielen Dank für jegliche Hilfe :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 22 November 2014, 22:11:13
Zitatkann ich mit DOIF auf Readings triggern, die bei verschiedenen Modulen den gleichen Namen haben?

nein, wird es auch nicht können, denn die Auswertung der Bedingung wird in Perl durchgeführt und da kann man den Bezeichner, wie in jeder anderen Programmiersprache auch, nicht einfach als regulären Ausdruck angeben, wie z. B.

if (a* > 50) ...

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Sany am 23 November 2014, 11:16:12
Alles klar. Vielen Dank für die schnelle Antwort.

Gelöst habe ich es nun mit event-on-change/update (wird im verlinkten Wiki auch ganz kurz erwähnt)
Das war mal wieder der Klassiker mit Wald und Bäumen.....
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 23 November 2014, 12:39:32
@Damian
vllt hast du ja trotz deiner knappen Zeit mal ein Moment und schaust mal auf meinen Code im DOIF Modul, ich habe nach einigen Versuchen es nicht hin bekommen.

Ich habe das Problem das die 2.Lampe in der Nacht also gestern ausschaltet und sofort wieder einschaltet, ich dachte erst es liegt an der Definition Wochenende weil er ja von Freitag auf Samstag wechselt und habe dieses deshalb mit den Tagesbezeichnungen ([01:15|56]) gemacht aber er hat auch gestern Nacht wieder eingeschaltet.
Evtl. kannst du mal drauf schauen und siehst den Fehler sofort..?

Dämmerung steht oben drin weil ich noch einen Punkt über ein Dummy verwenden möchte der dann Zufall heißt und hier möchte ich dann in das DOIF einen RandomTimer rein bringen, aber das nur zur Information das kommt dann später, wenn ich es gebacken bekomme.

Hier mal der Code zum DOIF aus dem DEF
( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}-{sunset("CIVIL",9000,"19:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}- {sunset("CIVIL",9000,"19:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)

DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)
DOELSE
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 23 November 2014, 13:07:00
Hallo,

Zitatvllt hast du ja trotz deiner knappen Zeit mal ein Moment und schaust mal auf meinen Code im DOIF Modul, ich habe nach einigen Versuchen es nicht hin bekommen.
Ich sag jetzt mal nix dazu  :P

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Inputsammler am 23 November 2014, 14:04:35
Zitat von: Damian am 20 November 2014, 21:27:38
Im Reading ist W als Einheit daher filtern nach Zahlen einsetzen, siehe commandref von DOIF

also

([FBDECT_17:power:d]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)
Danke Danke das habe ich wirklich vollkommen überlesen .....
und ich habe mir deswegen den kopf zerbrochen danke


Zitat
([22:00-00:00|5]) ((set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on))
Warum das so ist steht ebenfalls in der Commandref von DOIF.
Da habe ich ein kleines Problem damit, den das funktioniert leider nicht so.

So funktioniert es ohne Probleme:
([13:49-15:00|7]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_01 on, set CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_02 on)

Aber mit der Verkürzung nicht
([13:56-15:00|7]) ((set CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_01, CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_02 on))

im log steht
2014.11.23 13:56:00 2: PM_NAS_OFF_TEST: set CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_01, CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_02 on: Unknown argument CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_02, choose one of clear:readings,trigger,register,rssi,msgEvents,all getConfig getRegRaw inhibit:on,off off on on-for-timer on-till peerBulk peerIODev press regBulk regSet sign:on,off statusRequest toggle


Zitat
Das Modul ist eingecheckt (steht im ersten Post) und ist immer aktuell per FHEM-Update.
Ja mich hat es gewundert das es nicht mit deinen Namen (Damian) angezeigt wird bei dem FHEM Befehl "Version" deswegen ist es mir nicht aufgefallen

danke nochmals für das gute Umfangreiche Modul.
Dadurch habe ich jetzt fast alle at und notify ersetzt..
Gruß Gerd


Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 November 2014, 14:10:37
Zitat von: moonsorrox am 23 November 2014, 12:39:32

Hier mal der Code zum DOIF aus dem DEF
( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}-{sunset("CIVIL",9000,"19:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}- {sunset("CIVIL",9000,"19:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)

DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)
DOELSE
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)


Der DOELSE-Fall ist hier wahrscheinlich das Problem: Um 00:15 ist der zweite Fall wahr, deswegen wird die Lampe ausgeschaltet. Beim nächsten senden von Zeitsteuerung ist der zweite Fall nicht mehr Wahr und dann schlägt der letzte Fall zu.

Als Empfehlung: Versuche den DOELSE-Fall durch einen DOELSEIF-Fall zu ersetzen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 November 2014, 14:13:57
Zitat von: Inputsammler am 23 November 2014, 14:04:35

Aber mit der Verkürzung nicht
([13:56-15:00|7]) ((set CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_01, CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_02 on))


DOIF kann mit Leerzeichen umgehen, der set-Befehl offenbar nicht, daher:


([13:56-15:00|7]) ((set CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_01,CUL_HM_HM_LC_SW4_BA_PCB_529FE4_Sw_02 on))

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 23 November 2014, 20:32:28
Hat jemand einen Tipp, warum die Lampen bei folgendem DOIF um 0:00 Uhr ausgehen?


Internals:
   CFGFN      ./FHEM/zwischenstecker.cfg
   DEF        (
(
      [15:00-02:00|56] or
      [15:00-02:00] and [nrw_feiertag:tomorrow] ne "none" or
      [15:00-23:00|01234] and [nrw_feiertag:tomorrow] eq "none"
      ) and [twilight:twilight_weather] <50
)
(
set switch_fb_1 on,set switch_powerMeter_1 on
) DOELSE (
set switch_fb_1 off,set switch_powerMeter_1 off
)
   NAME       di_innenbeleuchtung
   NR         128
   NTFY_ORDER 50-di_innenbeleuchtung
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2014-11-23 16:56:25   cmd_event       twilight
     2014-11-23 16:56:25   cmd_nr          1
     2014-11-23 00:00:02   e_nrw_feiertag_tomorrow none
     2014-11-23 20:26:27   e_twilight_twilight_weather 0
     2014-11-23 16:56:25   state           cmd_1
     2014-11-23 15:00:00   timer_1_c1      24.11.2014 15:00:00|56
     2014-11-23 02:00:00   timer_2_c1      24.11.2014 02:00:00|56
     2014-11-23 15:00:00   timer_3_c1      24.11.2014 15:00:00
     2014-11-23 02:00:00   timer_4_c1      24.11.2014 02:00:00
     2014-11-23 15:00:00   timer_5_c1      24.11.2014 15:00:00|01234
     2014-11-22 23:10:21   timer_6_c1      23.11.2014 23:00:00|01234
     2014-11-23 16:56:25   wait_timer      no timer
   Condition:
     0          (      DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"56") or      DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf('nrw_feiertag','tomorrow','') ne "none" or      DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"01234") and ReadingValDoIf('nrw_feiertag','tomorrow','') eq "none"      ) and ReadingValDoIf('twilight','twilight_weather','') <50
   Days:
     0          56
     1          56
     4          01234
     5          01234
   Devices:
     0           nrw_feiertag twilight
     all         nrw_feiertag twilight
   Do:
     0          set switch_fb_1 on,set switch_powerMeter_1 on
     1          set switch_fb_1 off,set switch_powerMeter_1 off
   Helper:
     last_timer 6
     sleepdevice twilight
     sleeptimer -1
   Internals:
   Readings:
     0           nrw_feiertag:tomorrow twilight:twilight_weather
     all         nrw_feiertag:tomorrow twilight:twilight_weather
   Realtime:
     0          15:00:00
     1          02:00:00
     2          15:00:00
     3          02:00:00
     4          15:00:00
     5          23:00:00
   State:
   Time:
     0          15:00:00
     1          02:00:00
     2          15:00:00
     3          02:00:00
     4          15:00:00
     5          23:00:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1  2  3  4  5
Attributes:
   alias      Automatik Zwischenstecker
   group      Automation
   room       Server
   sortby     90
   wait       900


Merkwürdigerweise hatte ich es vor einiger Zeit auch schon, dass beide Lampen zu unterschiedlichen Zeiten geschaltet wurde. Dem bin ich aber nie nachgegangen. Wahrscheinlich auch nur ein Typo im Set-Aufruf.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 November 2014, 22:19:53
Zitat von: Funk.Odyssey am 23 November 2014, 20:32:28
Hat jemand einen Tipp, warum die Lampen bei folgendem DOIF um 0:00 Uhr ausgehen?


Internals:
   CFGFN      ./FHEM/zwischenstecker.cfg
   DEF        (
(
      [15:00-02:00|56] or
      [15:00-02:00] and [nrw_feiertag:tomorrow] ne "none" or
      [15:00-23:00|01234] and [nrw_feiertag:tomorrow] eq "none"
      ) and [twilight:twilight_weather] <50
)
(
set switch_fb_1 on,set switch_powerMeter_1 on
) DOELSE (
set switch_fb_1 off,set switch_powerMeter_1 off
)


Merkwürdigerweise hatte ich es vor einiger Zeit auch schon, dass beide Lampen zu unterschiedlichen Zeiten geschaltet wurde. Dem bin ich aber nie nachgegangen. Wahrscheinlich auch nur ein Typo im Set-Aufruf.

Wenn [nrw_feiertag:tomorrow] um Mitternach gesetzt wird und "none" ist, dann ist deine Bedingung nicht wahr und DOELSE-Fall schlägt zu. Wenn nrw_feiertag nicht triggern soll, dann kannst du auch mit ReadingsVal("nrw_feiertag","tomorrow","") statt [nrw_feiertag:tomorrow] arbeiten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 23 November 2014, 22:48:44
Oh. Cool. Danke für die Erklärung. Ich werde mir das die Tage mal näher anschauen.

Kann man eigentlich innerhalb eines DOIF mehrere Perl-Befehle ausführen? Ich hatte das mal ausprobiert und eine ganze Latte an ReadingsVal an Variabeln zugewiesen. Diese wollte ich im Condition-Part abfragen. Aber irgendwie ging das nicht. Nun habe ich alles in die MyUtil.pm ausgelagert.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 24 November 2014, 00:01:06
Zitat von: Damian am 23 November 2014, 14:10:37
Als Empfehlung: Versuche den DOELSE-Fall durch einen DOELSEIF-Fall zu ersetzen.

also ich sollte das DOELSE im Code durch DOELSEIF ersetzen..! das hatte ich nämlich auch schon probiert

Dann bekomme ich diesen Fehler:
di_Aussenlampe DOIF: no state, reading or time in condition: set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 November 2014, 08:13:36
Zitat von: moonsorrox am 24 November 2014, 00:01:06
also ich sollte das DOELSE im Code durch DOELSEIF ersetzen..! das hatte ich nämlich auch schon probiert

Dann bekomme ich diesen Fehler:
di_Aussenlampe DOIF: no state, reading or time in condition: set WegLampe_Sw_01 off,set WegLampe_Sw_02 on

Natürlich musst du dir vorher die passende Bedingung zu diesem DOELSEIF-Fall überlegen. DOELSEIF ohne Bedingung kann ja nicht funktionieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 November 2014, 08:22:00
Zitat von: Funk.Odyssey am 23 November 2014, 22:48:44
Oh. Cool. Danke für die Erklärung. Ich werde mir das die Tage mal näher anschauen.

Kann man eigentlich innerhalb eines DOIF mehrere Perl-Befehle ausführen? Ich hatte das mal ausprobiert und eine ganze Latte an ReadingsVal an Variabeln zugewiesen. Diese wollte ich im Condition-Part abfragen. Aber irgendwie ging das nicht. Nun habe ich alles in die MyUtil.pm ausgelagert.

In der Bedingung von DOIF kannst du alles angeben, was du auch in einer Perl-if-Bedingung angeben kannst, denn es wird ja von Perl ausgewertet. Getriggert wird allerdings nur auf Angaben in eckigen Klammern.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 November 2014, 08:27:05
Zitat von: moonsorrox am 24 November 2014, 00:01:06
also ich sollte das DOELSE im Code durch DOELSEIF ersetzen..! das hatte ich nämlich auch schon probiert
Du sollst das DOELSE durch ein DOELSEIF ersetzen, aber das DOELSEIF benötigt eine Bedingung, während beim DOELSE nur die Aktion steht.
Genau darum geht es ja. Wenn Du ein DOELSE verwendest, kannst Du Seiteneffekte bekommen, die manchmal schwer zu kontrollieren sind. Weil das DOELSE eben immer gezogen wird, wenn eine der Bedingungen getriggert wird, aber nicht wahr ist.

Zitat( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}-{sunset("CIVIL",9000,"19:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}- {sunset("CIVIL",9000,"19:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)

DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)
DOELSE
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)

Vorschlag: Komm doch mal von dem Intervall weg und verwende statt dessen Anfangs- und Endzeit direkt, etwa so (ungeprüft):

( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)

DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|12345] or [{sunset("CIVIL",9000,"19:00","22:20")}|06]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)

DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)


Sollte genau dasselbe bewirken, nur dass Du ohne DOELSE auskommst.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 24 November 2014, 12:48:49
Hallo.
Ich habe eine frage zum set befehl. Bei fs20 actoren wird mit set on-till der befehl zum actor gesendet der dann selbst abschaltet. Gestern entdeckte ich per zufall das DOIF ein at generiert der den actor zur gesetzten zeit abschaltet. Ust das eine doif eigenheit oder von fhem. Klappt das on-till nur mit Fs20 sender?

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 November 2014, 13:17:19
Zitat von: satprofi am 24 November 2014, 12:48:49
Hallo.
Ich habe eine frage zum set befehl. Bei fs20 actoren wird mit set on-till der befehl zum actor gesendet der dann selbst abschaltet. Gestern entdeckte ich per zufall das DOIF ein at generiert der den actor zur gesetzten zeit abschaltet. Ust das eine doif eigenheit oder von fhem. Klappt das on-till nur mit Fs20 sender?

Gesendet von meinem GT-I9300

on-till ist keine Eigenschaft von DOIF, sondern des set Befehls bzw. der Hardwarekomponente.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 24 November 2014, 13:55:22
Zitat von: Brockmann am 24 November 2014, 08:27:05
Vorschlag: Komm doch mal von dem Intervall weg und verwende statt dessen Anfangs- und Endzeit direkt, etwa so (ungeprüft):
...
Sollte genau dasselbe bewirken, nur dass Du ohne DOELSE auskommst.

Jepp. Ich hatte ähnliche Probleme wie moonsorrox und habe mein DOIF vor einigen Tagen auch umgestellt. Dadurch wurde es (für mich) viel einfacher.


([{getJalTime("workdayOpenSoft")}|8] or [{getJalTime("weekendOpenSoft")}|7])
(
  IF ([auto_jal_open_mit_tueren] eq "ja")
  (set alle_jalousien_mit_tueren:FILTER=STATE!=on 10)
  ELSE
  (set alle_jalousien_ohne_tueren:FILTER=STATE!=on 10)
)
DOELSEIF
([{getJalTime("workdayOpen")}|8] or [{getJalTime("weekendOpen")}|7])
(
  IF ([auto_jal_open_mit_tueren] eq "ja")
  (set alle_jalousien_mit_tueren on)
  ELSE
  (set alle_jalousien_ohne_tueren on)
)
DOELSEIF
([{getJalTime("closeRealSoft")}])
(
  IF ([auto_jal_close_mit_tueren] eq "ja")
  (set alle_jalousien_mit_tueren:FILTER=STATE!=off 50)
  ELSE
  (set alle_jalousien_ohne_tueren:FILTER=STATE!=off 50)
)
DOELSEIF
([{getJalTime("closeReal")}])
(
  IF ([auto_jal_close_mit_tueren] eq "ja")
  (set alle_jalousien_mit_tueren off)
  ELSE
  (set alle_jalousien_ohne_tueren off)
)
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 24 November 2014, 14:08:47
Zitat von: Damian am 24 November 2014, 08:22:00
In der Bedingung von DOIF kannst du alles angeben, was du auch in einer Perl-if-Bedingung angeben kannst, denn es wird ja von Perl ausgewertet. Getriggert wird allerdings nur auf Angaben in eckigen Klammern.

Könntest du mir dann bitte einen Tipp geben, wie ich z.B. - innerhalb eines DOIF - oft verwendete ReadingsVal vorziehe und einer Variable zuweise? Beziehungsweise: Ob der folgende Ansatz in die richtig Richtung geht? Ich möchte den Code halt schlank und lesbar gestalten.

Ich habe es mal quick&dirty anhand des Beispiels mit der Aussenbeleuchtung ausprobiert.


(
{my $feiertag = ReadingsVal("nrw_feiertag","tomorrow","")}
(
      [16:30-23:00|56] or
      [16:30-23:00] and $feiertag ne "none" or
      [16:30-22:00|01234] and $feiertag eq "none"
      ) and [twilight:twilight_weather] <25
)
(
set ku_aussenlampe on,set hwr_aussenlampe on
) DOELSE (
set ku_aussenlampe off,set hwr_aussenlampe off
)


In diesem DOIF wurden die Timer sogar angelegt. Damit hatte ich nicht gerechnet, denn in vorherigen Versuchen bin ich gescheitert.

Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 24 November 2014, 14:17:54
Zitat von: Brockmann am 24 November 2014, 08:27:05
Sollte genau dasselbe bewirken, nur dass Du ohne DOELSE auskommst.
Ok heute Abend/Nacht weiß ich mehr, ich werde mir dieses mal genau anschauen... mal schauen ob das so funktioniert
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 November 2014, 14:46:01
Zitat von: Funk.Odyssey am 24 November 2014, 14:08:47
Könntest du mir dann bitte einen Tipp geben, wie ich z.B. - innerhalb eines DOIF - oft verwendete ReadingsVal vorziehe und einer Variable zuweise? Beziehungsweise: Ob der folgende Ansatz in die richtig Richtung geht? Ich möchte den Code halt schlank und lesbar gestalten.

Ich habe es mal quick&dirty anhand des Beispiels mit der Aussenbeleuchtung ausprobiert.


(
{my $feiertag = ReadingsVal("nrw_feiertag","tomorrow","")}
(
      [16:30-23:00|56] or
      [16:30-23:00] and $feiertag ne "none" or
      [16:30-22:00|01234] and $feiertag eq "none"
      ) and [twilight:twilight_weather] <25
)
(
set ku_aussenlampe on,set hwr_aussenlampe on
) DOELSE (
set ku_aussenlampe off,set hwr_aussenlampe off
)


In diesem DOIF wurden die Timer sogar angelegt. Damit hatte ich nicht gerechnet, denn in vorherigen Versuchen bin ich gescheitert.

Das geht so nicht. In einer Bedingung kannst du keinen ausführenden Code einstellen. Das würde auch bei Perl-if nicht funktionieren. Wenn du es möglichst kurz und einfach machen willst, dann musst du dich noch auf die nächste Version gedulden, da habe ich [?Device:Reading] eingeplant für eine Abfrage eines Readings ohne Triggerung.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 24 November 2014, 14:48:38
Danke für die Klarstellung.
Titel: Antw:neues Modul DOIF
Beitrag von: netbus am 24 November 2014, 16:14:03
Hallo Damian,
wie kann ich mit DOIF mehrere Befehle mit dem selben state gleichzeitig schalten. Steht leider nichts in der Commandref und Wiki.

define di.test DOIF ([test] eq "on") (set lampe1,lampe2,lampe3 on)
geht leider nicht
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 24 November 2014, 16:18:03
Zitat von: netbus am 24 November 2014, 16:14:03
Steht leider nichts in der Commandref und Wiki.

Zitat von: Commandref
http://fhem.de/commandref_DE.html#DOIF (http://fhem.de/commandref_DE.html#DOIF)
Falls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden:

define di_light DOIF ([08:00]) ((set lamp1,lamp2 on),set switch on)

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 24 November 2014, 21:17:12
Zitat von: netbus am 24 November 2014, 16:14:03
Hallo Damian,
wie kann ich mit DOIF mehrere Befehle mit dem selben state gleichzeitig schalten. Steht leider nichts in der Commandref und Wiki.

define di.test DOIF ([test] eq "on") (set lampe1,lampe2,lampe3 on)
geht leider nicht

Hallo, selbiges hatte ich folgend gelöst:

set Lampe1 on, set Lampe2 on-till 23:00,set Lampe3 on, etc.
Titel: Antw:neues Modul DOIF
Beitrag von: ojb am 24 November 2014, 22:17:40
Hallo,

ich möchte gernen einen Watchdog bauen der auf das Ausbleiben eines Signals reagiert.

Mit dem Attribut wait kann man das ja schön realisieren.

Mir ist bei den Tests jetzt aber aufgefallen, dass der Timer erst aufgezogen wird wenn um ersten Mal das Signal gekommen ist. Ich möchte gerne aber auch einen "Störfall" abfangen bei dem das überwachte Signal eine bestimmte Zeit überhaupt nicht kommt.

Wie könnte man das realisieren?

Danke und lieben Gruß
Oli
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 25 November 2014, 00:26:58
Zitat von: Brockmann am 24 November 2014, 08:27:05
Vorschlag: Komm doch mal von dem Intervall weg und verwende statt dessen Anfangs- und Endzeit direkt, etwa so (ungeprüft):

( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)

DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|12345] or [{sunset("CIVIL",9000,"19:00","22:20")}|06]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)

DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)


Sollte genau dasselbe bewirken, nur dass Du ohne DOELSE auskommst.

ich habe also das mal so wie oben übernommen... leider hat er heute also um 00:15 nicht ausgeschaltet.

Ich habe dann mal den letzten Teil umgedreht und die Zeit mal eben auf 00:20 gestellt, da ist das Licht ausgegangenen, aber evtl. bewirkt es ja dann das dieses dann an den anderen Tagen auch nicht ausgeht. Weiß jetzt nicht genau was richtig ist. Hier mal meine Änderung nach dem letzten DOELSEIF
(Die Zeit ist jetzt erst mal egal wollte nur nochmals probieren)
DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and [01:15|56] or ([00:20|01234]))
    (set WegLampe_Sw_02 off)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 November 2014, 08:36:42
Zitat von: ojb am 24 November 2014, 22:17:40
Hallo,

ich möchte gernen einen Watchdog bauen der auf das Ausbleiben eines Signals reagiert.

Mit dem Attribut wait kann man das ja schön realisieren.

Mir ist bei den Tests jetzt aber aufgefallen, dass der Timer erst aufgezogen wird wenn um ersten Mal das Signal gekommen ist. Ich möchte gerne aber auch einen "Störfall" abfangen bei dem das überwachte Signal eine bestimmte Zeit überhaupt nicht kommt.

Wie könnte man das realisieren?

Danke und lieben Gruß
Oli

Benachrichtigung nach Ausbleiben eines Events gibt es erst ab der nächsten Version.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: ojb am 25 November 2014, 09:10:18
Hi Damian,

ok, super. Danke.

Und Danke für DOIF. Das ist echt ein super Modul.

Hab ich das richtig gelesen, Du hast erst mit den Modulen mit Perl angefangen?

Liebe Grüße
Oli

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 25 November 2014, 09:17:04
Zitat von: moonsorrox am 25 November 2014, 00:26:58
DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)

ich habe also das mal so wie oben übernommen... leider hat er heute also um 00:15 nicht ausgeschaltet.
Ich kann mir keinen vernünftigen Grund vorstellen, warum das DOIF mit dieser Bedingung an einem Dienstag um 0:15 nicht schalten sollte. Es sei denn, Zeitsteuerung war nicht eq "Dämmerung".

Zitat von: moonsorrox am 25 November 2014, 00:26:58
Hier mal meine Änderung nach dem letzten DOELSEIF
(Die Zeit ist jetzt erst mal egal wollte nur nochmals probieren)
DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and [01:15|56] or ([00:20|01234]))
    (set WegLampe_Sw_02 off)

Die Klammerung im ursprünglichen Code war korrekt. So ist es jetzt Quatsch, weil Du damit sagst "Wenn es Dämmerung und 1:15 an einem Freitag bzw. Samstag ist, ODER WENN es 0:20 an einem So,Mo,Di,Mi,Do ist. Damit wäre die Bedingung um 0:20 So-Do immer wahr, egal ob Zeitsteuerung eq "Dämmerung" oder nicht.

Mit list <Name des DOIF> kannst Du Dir eine detaillierte Aufstellung eines DOIFs anschauen. Mach das mal, nachdem das DOIF nicht das getan hat, was es sollte. Außerdem solltest Du mal im Logfile nachschauen, was um 0:15 passiert ist. Vielleicht findet sich dort eine Erklärung.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 November 2014, 09:32:07
Zitat von: ojb am 25 November 2014, 09:10:18
Hi Damian,

ok, super. Danke.

Und Danke für DOIF. Das ist echt ein super Modul.

Hab ich das richtig gelesen, Du hast erst mit den Modulen mit Perl angefangen?

Liebe Grüße
Oli
Ich weiß zwar nicht, wo das steht, aber es stimmt, ich habe mir Perl als Programmiersprache erst angeguckt als ich das THRESHOLD-Modul ausgehend vom PID-Modul programmiert habe. Na ja, wenn man "vorbelastet" ist, dann ist es nicht so schwer sich eine neue Programmiersprache anzueignen auch wenn ich beruflich nicht mehr programmiere.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: ojb am 25 November 2014, 11:39:19
Respekt.

Ich bin auch "vorbelastet", mal schauen wie lange ich brauche :-)

Lieg im Moment mit einem gebrochenen Zeh zu Hause, wiel mir beim Versuch des Anschliessens der Aussenbeleuchtung im Garten auf den KNX-Aktor um mit FHEM steuern zu können die Metalltür vom Schaltschrank auf den Zeh gefallen ist, da hab ich a bissi Zeit :-)
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 25 November 2014, 12:56:35
Zitat von: Brockmann am 25 November 2014, 09:17:04
Ich kann mir keinen vernünftigen Grund vorstellen, warum das DOIF mit dieser Bedingung an einem Dienstag um 0:15 nicht schalten sollte. Es sei denn, Zeitsteuerung war nicht eq "Dämmerung".
Ich auch nicht, dabei war ich mir sicher das es jetzt alles gut ist :-\
Reading ist im Moment dauerhaft auf Dämmerung geschaltet, da ja der Zustand Aus gar nichts bringt und Zufall noch gar nicht aktiv... ;) was soviel heißt, ich habe noch gar kein DEF dafür drin

Zitat von: Brockmann am 25 November 2014, 09:17:04
Mit list <Name des DOIF> kannst Du Dir eine detaillierte Aufstellung eines DOIFs anschauen. Mach das mal, nachdem das DOIF nicht das getan hat, was es sollte. Außerdem solltest Du mal im Logfile nachschauen, was um 0:15 passiert ist. Vielleicht findet sich dort eine Erklärung.
Ok das mache ich, werde den Code wieder so ins DEF schreiben wie von dir vorgeschlagen und mal zu einer etwas früheren Zeit schon mal probieren.
Ins Log habe ich natürlich schon geschaut, gleich gestern als es nicht schaltete... aber da steht um 00:15 nix von Bedeutung für das DOIF  8)
Log
2014.11.25 00:15:00 3: Registering HTTPSRV gds_web_resse for URL /resse...
2014.11.25 00:15:00 3: GDS resse: tempDir=/tmp/
2014.11.25 00:15:00 3: GDS resse: created
2014.11.25 00:15:00 1: Including ./FHEM/Wetter.cfg
2014.11.25 00:15:00 1: Including ./FHEM/BeleuchtungEingang.cfg
2014.11.25 00:15:00 1: Including ./FHEM/Schlafzimmer.cfg
2014.11.25 00:15:00 1: Including ./FHEM/Wohnzimmer.cfg
2014.11.25 00:15:00 3: WEBhook: port 8087 opened
2014.11.25 00:15:00 3: WEBtablet: port 8085 opened
2014.11.25 00:15:00 3: WEBphone: port 8084 opened
2014.11.25 00:15:00 3: WEB: port 8083 opened
2014.11.25 00:15:00 3: telnetPort: port 7072 opened
2014.11.25 00:15:00 1: HMLAN_Parse: HMUSB new condition init
2014.11.25 00:15:00 3: HMUSB device opened
2014.11.25 00:15:00 3: Opening HMUSB device 127.0.0.1:1234
2014.11.25 00:15:00 1: HMLAN_Parse: HMUSB new condition disconnected
2014.11.25 00:15:00 1: Including fhem.cfg
2014.11.25 00:15:00 3: Unregistering HTTPSRV gds_web_resse for URL /resse...
2014.11.25 00:15:00 3: Unregistering GEOFANCY geofancy for URL /geo...

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 25 November 2014, 14:54:47
Zitat von: moonsorrox am 25 November 2014, 12:56:35
Ins Log habe ich natürlich schon geschaut, gleich gestern als es nicht schaltete... aber da steht um 00:15 nix von Bedeutung für das DOIF  8)

Die Meldungen im Log sehen mir aber sehr nach FHEM-Neustart pünktlich um 0:15 Uhr aus. Das wäre dann auch eine Erklärung, warum nicht geschaltet wurde.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 25 November 2014, 18:30:43
Zitat von: Brockmann am 25 November 2014, 14:54:47
Die Meldungen im Log sehen mir aber sehr nach FHEM-Neustart pünktlich um 0:15 Uhr aus.
oh ja das sieht verdammt danach aus  :-\ das wäre echt der absolute Zufall, ich sollte Lotto spielen  ;)

Tante Edith:// also hat alles geklappt DOIF läuft und alles ging AN/AUS wie es sollte  ;) DANKE

nun gehts weiter mit dem Zufall...  ::)
Titel: Antw:neues Modul DOIF
Beitrag von: kumue am 25 November 2014, 18:53:48
Hallo zusammen,

ich habe ein DOIF, welches mir die Alarme aus dem GDS-Modul per Pushover zusenden soll.
Leider meint DOIF, daß das Reading a_geoCode_WARNCELLID nicht existiert. Somit geht keine Message raus.
Im Logfile wird keine Fehlermeldung angezeigt, da für steht im list <DOIF> ...reading does not exist

Bin dankbar für jeden Hinweis.

list des GDS

fhem> list DWD_IK     
Internals:
   DEF        gds40165 ttNMcGXu
   LOCAL      1
   NAME       DWD_IK
   NR         219
   STATE      active
   TYPE       GDS
   CHANGETIME:
   Helper:
     Dblog:
       _datasource:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Quelle
       A_areadesc:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Ilm-Kreis
       A_category:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Met
       A_event:
         Mydblog:
           TIME       1416937500.03169
           VALUE      FROST
       A_eventcode_area_color:
         Mydblog:
           TIME       1416937500.03169
           VALUE      255 255 0
       A_eventcode_group:
         Mydblog:
           TIME       1416937500.03169
           VALUE      FROST
       A_eventcode_ii:
         Mydblog:
           TIME       1416937500.03169
           VALUE      22
       A_eventcode_license:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Geobasisdaten
       A_eventcode_profile_version:
         Mydblog:
           TIME       1416937500.03169
           VALUE      2.1
       A_expires:
         Mydblog:
           TIME       1416937500.03169
           VALUE      2014-11-26T09:00:00+00:00
       A_expires_local:
         Mydblog:
           TIME       1416937500.03169
           VALUE      26.11.2014 10:00:00
       A_geocode_state:
         Mydblog:
           TIME       1416937500.03169
           VALUE      TH
       A_geocode_warncellid:
         Mydblog:
           TIME       1416937500.03169
           VALUE      116070000
       A_headline:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Amtliche WARNUNG vor FROST
       A_msgtype:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Alert
       A_onset:
         Mydblog:
           TIME       1416937500.03169
           VALUE      2014-11-25T23:00:00+00:00
       A_onset_local:
         Mydblog:
           TIME       1416937500.03169
           VALUE      26.11.2014 00:00:00
       A_responsetype:
         Mydblog:
           TIME       1416937500.03169
           VALUE      None
       A_sent:
         Mydblog:
           TIME       1416937500.03169
           VALUE      2014-11-25T17:00:00+00:00
       A_sent_local:
         Mydblog:
           TIME       1416937500.03169
           VALUE      25.11.2014 18:00:00
       A_status:
         Mydblog:
           TIME       1416937500.03169
           VALUE      Actual
       A_valid:
         Mydblog:
           TIME       1416937500.03169
           VALUE      1
   Readings:
     2014-11-25 18:45:00   _dataSource     Quelle: Deutscher Wetterdienst
     2014-11-25 18:45:00   _tzOffset       3600
     2014-11-25 18:45:00   a_areaDesc      Ilm-Kreis
     2014-11-25 18:45:00   a_category      Met
     2014-11-25 18:45:00   a_event         FROST
     2014-11-25 18:45:00   a_eventCode_AREA_COLOR 255 255 0
     2014-11-25 18:45:00   a_eventCode_AREA_COLOR_hex ffff00
     2014-11-25 18:45:00   a_eventCode_GROUP FROST
     2014-11-25 18:45:00   a_eventCode_II  22
     2014-11-25 18:45:00   a_eventCode_LICENSE Geobasisdaten: Copyright Bundesamt für Kartographie und Geodäsie, Frankfurt am Main, 2013
     2014-11-25 18:45:00   a_eventCode_PROFILE_VERSION 2.1
     2014-11-25 18:45:00   a_expires       2014-11-26T09:00:00+00:00
     2014-11-25 18:45:00   a_expires_local 26.11.2014 10:00:00
     2014-11-25 18:45:00   a_geoCode_STATE TH
     2014-11-25 18:45:00   a_geoCode_WARNCELLID 116070000
     2014-11-25 18:45:00   a_headline      Amtliche WARNUNG vor FROST
     2014-11-25 18:45:00   a_msgType       Alert
     2014-11-25 18:45:00   a_onset         2014-11-25T23:00:00+00:00
     2014-11-25 18:45:00   a_onset_local   26.11.2014 00:00:00
     2014-11-25 18:45:00   a_responseType  None
     2014-11-25 18:45:00   a_sent          2014-11-25T17:00:00+00:00
     2014-11-25 18:45:00   a_sent_local    25.11.2014 18:00:00
     2014-11-25 18:45:00   a_status        Actual
     2014-11-25 18:45:00   a_valid         1
     2014-11-25 18:45:00   state           active


list des DOIF

fhem> list DO_DWD_ALERT_IK       
Internals:
   DEF        ([DWD_IK:a_geoCode_WARNCELLID] eq "116070000") (set Pushover msg 'DWD Alarm IK' '[DWD_IK:a_headline] Beginn [DWD_IK:a_onset_local] Ende [DWD_IK:a_expires_local]' '' 1 'siren')
   NAME       DO_DWD_ALERT_IK
   NR         165
   NTFY_ORDER 50-DO_DWD_ALERT_IK
   STATE      cmd_2
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Mydblog:
           TIME       1416937334.95721
           VALUE      DWD_IK
       Cmd_nr:
         Mydblog:
           TIME       1416937334.95721
           VALUE      2
       Error:
         Mydblog:
           TIME       1416936437.76991
           VALUE      reading does not exist
       State:
         Mydblog:
           TIME       1416937334.95721
           VALUE      cmd_2
   Readings:
     2014-11-25 18:42:14   cmd_event       DWD_IK
     2014-11-25 18:42:14   cmd_nr          2
     2014-11-25 18:45:00   e_DWD_IK_a_geoCode_WARNCELLID 116070000
     2014-11-25 18:42:14   state           cmd_2
   Condition:
     0          ReadingValDoIf('DWD_IK','a_geoCode_WARNCELLID','') eq "116070000"
   Devices:
     0           DWD_IK
     all         DWD_IK
   Do:
     0          set Pushover msg 'DWD Alarm IK' '[DWD_IK:a_headline] Beginn [DWD_IK:a_onset_local] Ende [DWD_IK:a_expires_local]' '' 1 'siren'
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
   Readings:
     0           DWD_IK:a_geoCode_WARNCELLID
     all         DWD_IK:a_geoCode_WARNCELLID
   State:
   Timerfunc:
Attributes:
   group      Services
   icon       cloud102
   room       Wetter
   wait       90
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 25 November 2014, 19:13:41
Zitat von: kumue am 25 November 2014, 18:53:48
Leider meint DOIF, daß das Reading a_geoCode_WARNCELLID nicht existiert.

Vollkommen zurecht, guckt dir das Reading noch mal genau an ;)

'A_geocode_warncellid' ne 'a_geoCode_WARNCELLID'


Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: kumue am 25 November 2014, 19:21:25
Hallo Igami

Zitat
Vollkommen zurecht, guckt dir das Reading noch mal genau an ;)
Code: [Auswählen]
'A_geocode_warncellid' ne 'a_geoCode_WARNCELLID'

Habe das DOIF abgeändert..
Jetzt habe ich auch eine FM im logfile...

2014.11.25 19:16:33 2: DO_DWD_ALERT_IK: reading does not exist: [DWD_IK:A_geocode_warncellid]
:(


Hatte statt DOIF mit notify probiert, da wurde das Reading a_geoCode_WARNCELLID korrekt erkannt.
Da ich ein at habe, welches aller 30min nach neuen DWD/GDS-Alarmen ausschau hält, bekomme ich halt aller 30min vom notify die gleich, alte push-message....
Deshalb wollte ich es mit DOIF machen.

Gruß Kai
Titel: Antw:neues Modul DOIF
Beitrag von: igami am 25 November 2014, 20:04:30
Zitat von: kumue am 25 November 2014, 19:21:25
Jetzt habe ich auch eine FM im logfile...
Sorry, habe mich verguckt, das reading heißt ja auch a_geoCode_WARNCELLID.

Dein DOIF list sagt doch aber aus, dass auf cmd_2 gegangen wurde, und das reading 116070000 ist.

   Readings:
     2014-11-25 18:42:14   cmd_event       DWD_IK
     2014-11-25 18:42:14   cmd_nr          2
     2014-11-25 18:45:00   e_DWD_IK_a_geoCode_WARNCELLID 116070000
     2014-11-25 18:42:14   state           cmd_2

Hast du denn schon einmal eine Nachricht bekommen? Da es keinen ELSE Zweig gibt und kein doalways gesetzt wurde dürfte das doch sonst nicht mehr wahr werden.

Woher dann aber das

       Error:
         Mydblog:
           TIME       1416936437.76991
           VALUE      reading does not exist

kommt kann ich dir nicht beantworten.

Grüße
Igami
Titel: Antw:neues Modul DOIF
Beitrag von: kumue am 25 November 2014, 20:43:44
Hallo Igami,

ich habe mal ein anderes Reading probiert: a_areaDesc
...da kam auch die Push-Message an...
Warum nun im list <DOIF> ein error-Reading mit dem eigentlichen Befehl auftaucht.. keine Ahnung...


fhem> list DO_DWD_ALERT_IK
Internals:
   DEF        ([DWD_IK:a_areaDesc] eq "Ilm-Kreis") (set Pushover msg 'DWD Alarm IK' '[DWD_IK:a_headline] Beginn [DWD_IK:a_onset_local] Ende [DWD_IK:a_expires_local]' '' 1 'siren')
   NAME       DO_DWD_ALERT_IK
   NR         165
   NTFY_ORDER 50-DO_DWD_ALERT_IK
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Mydblog:
           TIME       1416944148.09654
           VALUE      DWD_IK
       Cmd_nr:
         Mydblog:
           TIME       1416944148.09654
           VALUE      1
       Error:
         Mydblog:
           TIME       1416944148.09654
           VALUE      set Pushover msg 'DWD Alarm IK' 'Amtliche WARNUNG vor FROST Beginn 26.11.2014 00:00:00 Ende 26.11.2014 10:00:00' '' 1 'siren'
       State:
         Mydblog:
           TIME       1416944148.09654
           VALUE      cmd_1
       Wait_timer:
         Mydblog:
           TIME       1416944148.11595
           VALUE      no timer
   Readings:
     2014-11-25 20:35:48   cmd_event       DWD_IK
     2014-11-25 20:35:48   cmd_nr          1
     2014-11-25 20:34:17   e_DWD_IK_a_areaDesc Ilm-Kreis
     2014-11-25 20:35:48   error           set Pushover msg 'DWD Alarm IK' 'Amtliche WARNUNG vor FROST Beginn 26.11.2014 00:00:00 Ende 26.11.2014 10:00:00' '' 1 'siren': OK
     2014-11-25 20:35:48   state           cmd_1
     2014-11-25 20:35:48   wait_timer      no timer
   Condition:
     0          ReadingValDoIf('DWD_IK','a_areaDesc','') eq "Ilm-Kreis"
   Devices:
     0           DWD_IK
     all         DWD_IK
   Do:
     0          set Pushover msg 'DWD Alarm IK' '[DWD_IK:a_headline] Beginn [DWD_IK:a_onset_local] Ende [DWD_IK:a_expires_local]' '' 1 'siren'
   Helper:
     last_timer 0
     sleepdevice DWD_IK
     sleeptimer -1
   Internals:
   Readings:
     0           DWD_IK:a_areaDesc
     all         DWD_IK:a_areaDesc
   State:
   Timerfunc:
Attributes:
   do         always
   group      Services
   icon       cloud102
   room       Wetter
   wait       90


Gruß Kai
Titel: Antw:neues Modul DOIF
Beitrag von: santalaus am 25 November 2014, 22:24:05
Hallo,

ich habe eine kleine Frage, da ich im Moment unsicher bin.

and {(time_str2num(ReadingsTimestamp( "CUL_HM_HM_LC_Dim1TPBU_FM_1A703C","timedOn",0 ))-time ) > 3600 } and

Es geht dabei um eine BadlüfterSteuerung. Der Lüfter läuft wenn der Actor on ist nach 60 sec mit reduzierter Drehzahl an und nach dem Ausschalten eine Zeit mit erhöhter Drehzahl.
Mit der Abfrage möchte ich nun ein erneutes Antriggern des Actors während der Lüfter noch läuft verhindern. Ich gehe über das Reading da der Actor nicht nur mit dem Doif den Lüfter triggert sondern ggf auch direkt via Schalter.
Da es ja Perl ist, tauchen die Werte nicht im doif auf.
Denke ich prinzipell richtig oder einfach zu kompliziert.

Vielen Dank fürs eindenken

Nico
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 November 2014, 10:20:28
Zitat von: santalaus am 25 November 2014, 22:24:05
Hallo,

ich habe eine kleine Frage, da ich im Moment unsicher bin.

and {(time_str2num(ReadingsTimestamp( "CUL_HM_HM_LC_Dim1TPBU_FM_1A703C","timedOn",0 ))-time ) > 3600 } and

Es geht dabei um eine BadlüfterSteuerung. Der Lüfter läuft wenn der Actor on ist nach 60 sec mit reduzierter Drehzahl an und nach dem Ausschalten eine Zeit mit erhöhter Drehzahl.
Mit der Abfrage möchte ich nun ein erneutes Antriggern des Actors während der Lüfter noch läuft verhindern. Ich gehe über das Reading da der Actor nicht nur mit dem Doif den Lüfter triggert sondern ggf auch direkt via Schalter.
Da es ja Perl ist, tauchen die Werte nicht im doif auf.
Denke ich prinzipell richtig oder einfach zu kompliziert.

Vielen Dank fürs eindenken

Nico

Die geschweiften Klammern musst du weglassen. Sonst muss natürlich noch entweder eine Zeitangabe oder ein Reading  bzw. ein  Status irgendwo in eckigen Klammern mit einem Operator (and, or) verknüpft werden, damit dein Modul auch getriggert wird.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 November 2014, 10:24:18
Zitat von: kumue am 25 November 2014, 20:43:44

Warum nun im list <DOIF> ein error-Reading mit dem eigentlichen Befehl auftaucht.. keine Ahnung...


Das liegt daran, dass set Pushover... einen Returnwert ungleich Null zurückgibt.

Das wird zwar unter Error festgehalten, hat aber sonst keine Bedeutung für das Verhalten des Moduls.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: kumue am 26 November 2014, 10:57:07
Zitat
Das liegt daran, dass set Pushover... einen Returnwert ungleich Null zurückgibt.
Das wird zwar unter Error festgehalten, hat aber sonst keine Bedeutung für das Verhalten des Moduls.

Wieder was dazugelernt... Danke Damian !

Gruß Kai
Titel: Antw:neues Modul DOIF
Beitrag von: santalaus am 26 November 2014, 18:12:50
Hallo Damian,

irgendwie klapp es nicht :(

Zitat von: Damian am 26 November 2014, 10:20:28
Die geschweiften Klammern musst du weglassen. Sonst muss natürlich noch entweder eine Zeitangabe oder ein Reading  bzw. ein  Status irgendwo in eckigen Klammern mit einem Operator (and, or) verknüpft werden, damit dein Modul auch getriggert wird.

Die vollständigt Dev sieht so aus:
([07:30-22:00] and [CUL_HM_HM_LC_Dim1TPBU_FM_1A703C:state] eq "off" and [CUL_HM_HM_LC_Dim1TPBU_FM_1A703C:timedOn] eq "off" and ( (time_str2num(ReadingsTimestamp( "CUL_HM_HM_LC_Dim1TPBU_FM_1A703C","timedOn",0 ))-time ) > 1800 ) and [CUL_HM_HB_UW_Sen_THPL_I_D79284:dewpoint]<[CUL_HM_HB_UW_Sen_THPL_I_CC84F5:dewpoint] and ([CUL_HM_HB_UW_Sen_THPL_I_3E9262:humidity] - [CUL_HM_HB_UW_Sen_THPL_I_CC84F5:humidity]) > 2 ) (set CUL_HM_HM_LC_Dim1TPBU_FM_1A703C on-for-timer 65)

ohne den ReadingsTimestamp Teil funktioniert es halt so das bei jeder Wertänderung erneut getriggert wird. Dann schaltet der Lüfter aber leider auf langsamer also suboptimal.
Nun wird es überhaupt nicht getriggert. Der time Teil wird doch in sec angeben also 1800s= 30min warten. Wie kann ich mir da nochwas zwischenbauen zum prüfen?

Nico
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 November 2014, 18:45:49
Zitat von: santalaus am 26 November 2014, 18:12:50
Hallo Damian,

irgendwie klapp es nicht :(

Die vollständigt Dev sieht so aus:
([07:30-22:00] and [CUL_HM_HM_LC_Dim1TPBU_FM_1A703C:state] eq "off" and [CUL_HM_HM_LC_Dim1TPBU_FM_1A703C:timedOn] eq "off" and ( (time_str2num(ReadingsTimestamp( "CUL_HM_HM_LC_Dim1TPBU_FM_1A703C","timedOn",0 ))-time ) > 1800 ) and [CUL_HM_HB_UW_Sen_THPL_I_D79284:dewpoint]<[CUL_HM_HB_UW_Sen_THPL_I_CC84F5:dewpoint] and ([CUL_HM_HB_UW_Sen_THPL_I_3E9262:humidity] - [CUL_HM_HB_UW_Sen_THPL_I_CC84F5:humidity]) > 2 ) (set CUL_HM_HM_LC_Dim1TPBU_FM_1A703C on-for-timer 65)

ohne den ReadingsTimestamp Teil funktioniert es halt so das bei jeder Wertänderung erneut getriggert wird. Dann schaltet der Lüfter aber leider auf langsamer also suboptimal.
Nun wird es überhaupt nicht getriggert. Der time Teil wird doch in sec angeben also 1800s= 30min warten. Wie kann ich mir da nochwas zwischenbauen zum prüfen?

Nico

Dieser Teil:

(time_str2num(ReadingsTimestamp( "CUL_HM_HM_LC_Dim1TPBU_FM_1A703C","timedOn",0 ))-time ) > 1800

wird nie wahr. Warum? Überlege mal kurz selbst.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: santalaus am 26 November 2014, 18:57:46
Zitat von: Damian am 26 November 2014, 18:45:49
Dieser Teil:

(time_str2num(ReadingsTimestamp( "CUL_HM_HM_LC_Dim1TPBU_FM_1A703C","timedOn",0 ))-time ) > 1800

wird nie wahr. Warum? Überlege mal kurz selbst.

Argl. Brett kopf... ;)

Danke
Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 26 November 2014, 22:28:07
Hallo Damian,

erstmal Danke für das tolle Modul. Ich finde es sehr hilfreich und richtig übersichtlich...
Aber ich habe ein Problem, welches meiner Meinung nach ein Bug im Modul sein könnte:
Ich habe einen Homematic Bewegungsmelder. Dieser sendet bei Bewegung ein "motion" und in jedem Fall ca. alle 5 Minuten drei Statuswerte (brightness, cover, battery).

Nun habe ich (nach Idee aus der Commandref) einen DOIF-Trigger mit folgender Definition gebaut:
----------------snip---------------
define trigger DOIF ([aussen_Vorgarten_PIR] eq "motion") (set aussen_Vorgarten_PIR_Motion on, set aussen_Vorgarten_PIR_Motion off)
attr trigger do always
----------------snip---------------
Sinn davon ist es, den Dummy bei Auftreten des Motion-Ereignisses des PIR einmal an und gleich wieder auszuschalten (weil darauf dann andere Notifies und/oder DOIFs reagieren).

Ich meine, das hat schon mal gut funktioniert. Mittlerweile wird dieses DOIF aber leider immer getriggert, wenn am PIR *irgendwas* aktualisiert wird (in diesem Fall alle 5 Minuten). Ich habe auch schon mal auf das Reading "motion" geprüft - mit demselben Ergebnis...
Das kann man gut an den Timestamps ablesen.

Hat sich in den letzten beiden Tagen etwas am Modul verändert, womit dieses Verhalten erklärbar wird? Oder habe ich doch noch irgendwo einen Denkfehler?

Danke schon mal für deine Hilfe...

Nachtrag:
Ich habe natürlich noch ein paar andere DOIFs, die tatsächlich auch auf die brightness prüfen sollen. Kann es sein, dass die im Hintergrund irgendwie zusammenhängen. Gibt es da vielleicht eine Namensgleicheit bei der internen Auflistung der Events, oder Modul-statische Variablen o.ä.?
Ich habe jetzt noch nicht in den Code reingeschaut...

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 November 2014, 09:39:19
Zitat von: Reinerlein am 26 November 2014, 22:28:07
Hallo Damian,

erstmal Danke für das tolle Modul. Ich finde es sehr hilfreich und richtig übersichtlich...
Aber ich habe ein Problem, welches meiner Meinung nach ein Bug im Modul sein könnte:
Ich habe einen Homematic Bewegungsmelder. Dieser sendet bei Bewegung ein "motion" und in jedem Fall ca. alle 5 Minuten drei Statuswerte (brightness, cover, battery).

Nun habe ich (nach Idee aus der Commandref) einen DOIF-Trigger mit folgender Definition gebaut:
----------------snip---------------
define trigger DOIF ([aussen_Vorgarten_PIR] eq "motion") (set aussen_Vorgarten_PIR_Motion on, set aussen_Vorgarten_PIR_Motion off)
attr trigger do always
----------------snip---------------
Sinn davon ist es, den Dummy bei Auftreten des Motion-Ereignisses des PIR einmal an und gleich wieder auszuschalten (weil darauf dann andere Notifies und/oder DOIFs reagieren).

Ich meine, das hat schon mal gut funktioniert. Mittlerweile wird dieses DOIF aber leider immer getriggert, wenn am PIR *irgendwas* aktualisiert wird (in diesem Fall alle 5 Minuten). Ich habe auch schon mal auf das Reading "motion" geprüft - mit demselben Ergebnis...
Das kann man gut an den Timestamps ablesen.

Hat sich in den letzten beiden Tagen etwas am Modul verändert, womit dieses Verhalten erklärbar wird? Oder habe ich doch noch irgendwo einen Denkfehler?

Danke schon mal für deine Hilfe...

Nachtrag:
Ich habe natürlich noch ein paar andere DOIFs, die tatsächlich auch auf die brightness prüfen sollen. Kann es sein, dass die im Hintergrund irgendwie zusammenhängen. Gibt es da vielleicht eine Namensgleicheit bei der internen Auflistung der Events, oder Modul-statische Variablen o.ä.?
Ich habe jetzt noch nicht in den Code reingeschaut...

Grüße
Reinerlein

Ich glaube so etwas hatten wir schon. Ich glaube bei hm ist der Status regelmäßig "motion" und die "echte" Bewegung wird irgendwo im Reading angezeigt, was man auf "on" abfragen müsste.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 27 November 2014, 12:29:17
Hi Damian,

das ist richtig. Nur ist der Timestamp der letzten Bewegung (und auch des entsprechenden state-Readings) älter als der Triggerzeitpunkt dieses DOIFs.
Dieses DOIF hätte gar nicht reagieren sollen, da der Zustand nicht neu gesetzt worden ist (sieht man ja auch im Event-Monitor).

Das DOIF reagiert aber.

Hier mal ein List vom DOIF:

Internals:
   DEF        ([aussen_Vorgarten_PIR] eq "motion") (set aussen_Vorgarten_PIR_Motion on, set aussen_Vorgarten_PIR_Motion off)
   NAME       aussen_Vorgarten_PIR_Motion_Trigger
   NR         1458
   NTFY_ORDER 50-aussen_Vorgarten_PIR_Motion_Trigger
   STATE      Triggered
   TYPE       DOIF
   Readings:
     2014-11-27 12:22:33   cmd_event       aussen_Vorgarten_PIR
     2014-11-27 12:22:33   cmd_nr          1
     2014-11-27 12:22:32   e_aussen_Vorgarten_PIR_STATE motion
     2014-11-27 12:22:33   state           Triggered
   Condition:
     0          InternalDoIf('aussen_Vorgarten_PIR','STATE','') eq "motion"
   Devices:
     0           aussen_Vorgarten_PIR
     all         aussen_Vorgarten_PIR
   Do:
     0          set aussen_Vorgarten_PIR_Motion on, set aussen_Vorgarten_PIR_Motion off
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           aussen_Vorgarten_PIR:STATE
     all         aussen_Vorgarten_PIR:STATE
   Readings:
   State:
Attributes:
   cmdState   Triggered
   do         always
   group      PIR
   room       _Sensoren


Hier das List vom Motion-Detektor:

Internals:
   DEF        342A4B
   HMLAN_MSGCNT 180
   HMLAN_RAWMSG E342A4B,0000,C8F72AA2,FF,FFA7,F78410342A4BAF410D0601D400
   HMLAN_RSSI -89
   HMLAN_TIME 2014-11-27 12:22:32
   IODev      HMLAN
   LASTInputDev HMLAN
   MSGCNT     180
   NAME       aussen_Vorgarten_PIR
   NR         1442
   STATE      motion
   TYPE       CUL_HM
   lastMsg    No:F7 - t:10 s:342A4B d:AF410D 0601D400
   protLastRcv 2014-11-27 12:22:32
   protSnd    30 last_at:2014-11-27 11:37:57
   protState  CMDs_done
   rssi_at_HMLAN avg:-82.27 min:-95 max:-76 lst:-89 cnt:180
   Readings:
     2014-11-26 21:55:06   Activity        alive
     2014-11-23 17:14:55   CommandAccepted yes
     2014-11-20 20:32:40   D-firmware      1.6
     2014-11-20 20:32:40   D-serialNr      LEQ1278807
     2014-11-23 17:14:55   PairedTo        0xAF410D
     2014-11-23 17:13:53   R-brightFilter  4
     2014-11-23 17:13:53   R-captInInterval on
     2014-11-23 17:13:53   R-evtFltrNum    1
     2014-11-19 17:58:59   R-evtFltrPeriod 1 s
     2014-11-23 17:14:56   R-ledOnTime     0 s
     2014-11-23 17:13:53   R-minInterval   30
     2014-11-23 17:14:55   R-pairCentral   0xAF410D
     2014-11-23 17:14:55   RegL_00:        02:01 0A:AF 0B:41 0C:0D 00:00
     2014-11-23 17:14:56   RegL_01:        01:12 02:49 08:00 22:00 00:00
     2014-11-27 12:22:32   battery         ok
     2014-11-27 12:22:32   brightness      212
     2014-11-27 12:22:32   cover           closed
     2014-11-27 11:37:57   motion          on (to vccu)
     2014-11-27 11:37:57   motionCount     140_next:14s
     2014-11-27 12:22:32   recentStateType info
     2014-11-27 11:37:57   state           motion
     2014-11-25 15:04:37   trigDst_AF410D  noConfig
     2014-11-27 11:37:57   trigDst_vccu    noConfig
   Helper:
     mId        005D
     rxType     28
     Io:
       newChn     +342A4B,00,01,1E
       nextSend   1417087352.87598
       prefIO
       rxt        2
       vccu
       p:
         342A4B
         00
         01
         1E
     Mrssi:
       mNo        F7
       Io:
         HMLAN      -87
     Prt:
       bErr       0
       sProc      0
       sleeping   0
       Rspwait:
     Q:
       qReqConf
       qReqStat
     Role:
       chn        1
       dev        1
     Rssi:
       At_hmlan:
         avg        -82.2777777777777
         cnt        180
         lst        -89
         max        -76
         min        -95
Attributes:
   IODev      HMLAN
   actCycle   000:10
   actStatus  alive
   autoReadReg 4_reqStatus
   expert     2_full
   firmware   1.6
   group      PIR
   model      HM-Sen-MDIR-O
   peerIDs    00000000,
   room       _Sensoren
   serialNr   LEQ1278807
   showtime   1
   subType    motionDetector


Und hier noch das List vom Dummy:

Internals:
   NAME       aussen_Vorgarten_PIR_Motion
   NR         1457
   STATE      2014-11-27 12:22:32
   TYPE       dummy
   Readings:
     2014-11-27 12:22:32   state           off
Attributes:
   group      PIR
   room       _Sensoren
   setList    on off
   stateFormat { ReadingsTimestamp('aussen_Vorgarten_PIR_Motion', 'state', '-') }
   webCmd     on:off


Wie man an den Zeitstempeln sieht, hat das DOIF irgendwie auf das falsche reagiert. Und im Falle eines Motiondetektors erhält man somit bei jeder Statusmeldung eine Bewegung, was ja so nicht richtig ist.
Über ein normales Notify geht es (so habe ich es ja erstmal umgestellt, da ich kein Dauerlicht draussen haben wollte :-)

Ich habe auch schon mal direkt auf das Reading "motion" geprüft (was bei mir auf "on (to vccu)" steht)... dasselbe Verhalten...

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 November 2014, 13:20:52
Zitat von: Reinerlein am 27 November 2014, 12:29:17
Hi Damian,

das ist richtig. Nur ist der Timestamp der letzten Bewegung (und auch des entsprechenden state-Readings) älter als der Triggerzeitpunkt dieses DOIFs.
Dieses DOIF hätte gar nicht reagieren sollen, da der Zustand nicht neu gesetzt worden ist (sieht man ja auch im Event-Monitor).

Das DOIF reagiert aber.


Das ist ein Missverständnis. DOIF reagiert immer, sobald irgendein Event des angegebenen Devices kommt. Es wird gar nicht überprüft, ob sich das angegebene Reading geändert hat oder nicht. Daher verhält sich das Modul wie programmiert. Wie gesagt, du solltest das Reading abfragen, welches bei Bewegung wirklich den Zustand ändert.

Edit: Vielleicht kannst du das Reading: recentStateType abfragen. Dort Steht jetzt "Info". Vermutlich steht dort etwas anderes bei Bewegung.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 27 November 2014, 14:17:31
Hallo Damian,

ok, ich dachte das Modul würde sich dabei genauso verhalten wie ein Notify, und nur die Events auswerten, die für das geforderte Reading auftreten...

Es gäbe noch ein Reading, welches einen aufsteigenden Zähler bzgl. der Motion-Detektion enthält. Aber das verursacht das gleiche Problem. Entweder es wird verändert (weil sich etwas bewegt hat), oder eben nicht. Die anderen Readings weden trotzdem aktualisiert, sodass das DOIF trotzdem wieder reagiert (ich kann da ja keine sinnvolle Bedingung setzen, oder geht sowas wie "ist anders als beim letzten Prüfen"?).
Es gibt kein Reading, welches nach einer kurzen Zeit wieder zurückfällt, und bei Bewegung entsprechend neu gesetzt wird. Das sollte ja das DOIF zusammen mit dem Dummy machen...

Na, dann bleibt halt mein Notify dort, ist ja schließlich nicht schlimm. Du solltest das nur in deiner Doku erwähnen, da es dann keine Lösung für einen Motiondetektor (oder ähnlich arbeitende Komponenten) gibt, bzw. dass auf jede Änderung am Device reagiert wird. Damit wird es ja für manche auch u.U. ineffizient in der Nutzung...

Danke trotzdem für deine Unterstützung...

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 November 2014, 17:08:43
Zitat von: Reinerlein am 27 November 2014, 14:17:31
Hallo Damian,

ok, ich dachte das Modul würde sich dabei genauso verhalten wie ein Notify, und nur die Events auswerten, die für das geforderte Reading auftreten...


Was steht denn im Reading recentStateType, wenn eine Bewegung detektiert wird?

Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 27 November 2014, 17:13:20
Hi Damian,

es wird nicht mit aktualisiert, da bleibt immer "info" drin.
Es wird nur aktualisiert, wenn die "anderen" Informationen geliefert werden, also immer zusammen mit battery und co.

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 November 2014, 17:32:08
Zitat von: Reinerlein am 27 November 2014, 17:13:20
Hi Damian,

es wird nicht mit aktualisiert, da bleibt immer "info" drin.
Es wird nur aktualisiert, wenn die "anderen" Informationen geliefert werden, also immer zusammen mit battery und co.

Grüße
Reinerlein

ok.

Ist zwar nicht die eleganteste Lösung, aber sollte funktionieren :

DOIF ((time - time_str2num(ReadingsTimestamp( "aussen_Vorgarten_PIR","motion",0 )) < 5 and [aussen_Vorgarten_PIR]) (....

Trigger, wenn letzte Änderung des Readings innerhalb von 5 Sekunden stattgefunden hat.

Die Idee ist von Nico ein paar Posts zuvor in diesem Thread.

Die ganze Sache ist sowieso etwas gebastelt mit den beiden DOIFs und dem Dummy.

Zukünftig wird ein on-for-timer mit zwei Zeilen mit DOIF definierbar sein, siehe meine todo-Liste.

Wenn dein Notify allerdings zuverlässig funktioniert, dann bleibe einfach dabei.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Merlin1 am 28 November 2014, 15:49:54
Zitat von: Inputsammler am 20 November 2014, 20:40:14
Frage 1:
Ich habe mir die Funktion (def) angelegt
([FBDECT_17:power]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)

Dieser soll bewirken wenn die Leistung an der Steckdose unter 25 Watt fällt er die 2 Homatic ausschaltet.

Etwas ähnliches habe ich auch vor... jedoch nach einer gewissen Zeit.

Ich habe die LW 12 Wireless LED Lampen. Die sind über eine schaltbare Steckdose angeschlossen.
Das Trafo will ich nicht dauerhaft am Stromnetz lassen.
Wenn ich sie einschalte dauert es also eine Weile bis das Wireless LAN wieder startklar ist.
Also möchte ich die Steckdose abschalten, aber zeitverzögert, wenn die Power z.B. 30 Minunten unter 3 Watt ist.

Also in "Metasprache"...

define Power_Off DOIF ([Strom:Power]<3) "für 30 Minuten") (set Strom_Sw off)

Hat jemand eine Idee?
Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 28 November 2014, 16:18:53
Hallo Merlin1,

dafür kannst du das Attribut "wait" am DOIF einstellen. Damit kannst du die Zeitverzögerung in Sekunden einstellen, die *vor* Ausführung des entsprechenden Kommandos gewartet wird.
Wenn innerhalb der Wartezeit die Bedingung für die Ausführung des Kommandos wieder ungültig wird, wird der Timer abgebrochen (und bei Gültigkeit wieder angestartet).

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 29 November 2014, 13:06:25
@Damian
ein Frage ist es generell möglich in einem DOIF eine Zufallssteuerung einzubauen, oder geht das gar nicht.
Ich versuche mich seit gestern daran und habe kein Erfolg, ich kann das DEF abspeichern, aber dann wenn die Zeit gekommen ist kommt immer ein Perl Syntaxfehler
Kann es sein das mir Klammern fehlen..?

zu meinem Vorhaben, ich habe mir ein Dummy erstellt, welches zwischen "Dämmerung" und "Zufall" schalten kann, Dämmerung funktioniert nun schon seit ein paar Tagen nun möchte ich mit dem gleichen Dummy die Schaltung auf "Zufall" laufen lassen und hier einen RandomTimer nutzen


Das ist der Fehler mit dem unten angehängten Code, sagt mir als unerfahrener Perluser leider nichts

perl error in condition: InternalDoIf('Zeitsteuerung','STATE','') eq "Zufall" and * (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06")): syntax error at (eval 674927) line 1, near "* (DOIF_time_once"


Hier der Code aus dem DEF:
( [Zeitsteuerung] eq "Zufall" and * ([{sunset("CIVIL",0,"17:00","22:20")}|12345] or [{sunset("CIVIL",-14900,"12:00","22:20")}|06]))
( set Ladestation 01:05:00 260 500/800 )

Zeiten sind von mir angepasst da ich gerade am testen bin
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 29 November 2014, 14:33:51
Zitat von: moonsorrox am 29 November 2014, 13:06:25
Das ist der Fehler mit dem unten angehängten Code, sagt mir als unerfahrener Perluser leider nichts

perl error in condition: InternalDoIf('Zeitsteuerung','STATE','') eq "Zufall" and * (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06")): syntax error at (eval 674927) line 1, near "* (DOIF_time_once"


Hier der Code aus dem DEF:
( [Zeitsteuerung] eq "Zufall" and * ([{sunset("CIVIL",0,"17:00","22:20")}|12345] or [{sunset("CIVIL",-14900,"12:00","22:20")}|06]))
( set Ladestation 01:05:00 260 500/800 )

Wesentlich ist bei solchen Fehlermeldungen (meist) das was hinter "near" steht, also konkret die Stelle bezeichnet, wo es geknallt hat. Hier das *-Zeichen. Kann es sein, dass Du mit DOIF und at durcheinander kommst? Bei at brauchst Du ein *, bei DOIF nicht...

Wenn Du das weglässt, sollte der Fehler verschwinden. Dafür kommt vermutlich ein anderer, aber der hat mit DOIF dann nichts mehr zu tun.  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 29 November 2014, 14:56:55
Zitat von: Brockmann am 29 November 2014, 14:33:51
Wesentlich ist bei solchen Fehlermeldungen (meist) das was hinter "near" steht, also konkret die Stelle bezeichnet, wo es geknallt hat. Hier das *-Zeichen. Kann es sein, dass Du mit DOIF und at durcheinander kommst? Bei at brauchst Du ein *, bei DOIF nicht...

Wenn Du das weglässt, sollte der Fehler verschwinden. Dafür kommt vermutlich ein anderer, aber der hat mit DOIF dann nichts mehr zu tun.  ;)
genau diese "*" ohne hatte ich schon probiert, ging aber auch nicht..!
hatte nur auf Funktion getestet... ;) mal schaun was das für ein Fehler dann ist.

EDITH:// hier ist er, ich denke ich kann das mit der Zeit hinten so nicht schreiben.. das da Ladestation steht ist nur zum probieren da ich diese hier neben dem PC habe und so sehen kann ob es funtioniert..!
Fehlermeldung:
set Ladestation 01:05:00 260 500/800 : Unknown argument 01:05:00, choose one of clear:readings,trigger,register,rssi,msgEvents,all getConfig getRegRaw getSerial getVersion inhibit:on,off off on on-for-timer on-till pair peerBulk peerIODev press raw regBulk regSet reset sign:on,off statusRequest toggle unpair
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 29 November 2014, 16:29:30
Zitat von: moonsorrox am 29 November 2014, 14:56:55
genau diese "*" ohne hatte ich schon probiert, ging aber auch nicht..!
Woraus Du nicht schließen solltest, dass das "*" richtig wäre. Immerhin bekommst Du ohne * eine andere Fehlermeldung. Und das hatte ich Dir ja auch angekündigt.

Zitat von: moonsorrox am 29 November 2014, 14:56:55
EDITH:// hier ist er, ich denke ich kann das mit der Zeit hinten so nicht schreiben.. das da Ladestation steht ist nur zum probieren da ich diese hier neben dem PC habe und so sehen kann ob es funtioniert..!
Fehlermeldung:
set Ladestation 01:05:00 260 500/800 : Unknown argument 01:05:00, choose one of clear:readings,trigger,register,rssi,msgEvents,all getConfig getRegRaw getSerial getVersion inhibit:on,off off on on-for-timer on-till pair peerBulk peerIODev press raw regBulk regSet reset sign:on,off statusRequest toggle unpair
Nein, sicher kannst Du das so nicht schreiben. Aber wo soll ich anfangen? Ich vermute, Du möchtest auf diese Weise RandomTimer ins Spiel bringen. Das kann so aber nicht funktionieren. Bitte lies Dir die Commandref zu RandomTimer in aller Ruhe durch und versuche das Konzept zu verstehen. Mit einem set auf einen Schalter wirst Du keinen RandomTimer hinbekommen. Der wird als eigenes Objekt definiert. Darin taucht der zu verwendende Schalter als Parameter auf.
Aber wie ich schon sagte, für den ohnehin schon arg langen DOIF-Thread ist das IMHO völlig off-topic.
Titel: Antw:neues Modul DOIF
Beitrag von: fhainz am 29 November 2014, 16:35:04
Zitat von: Damian am 07 September 2014, 18:32:21
Ich plane folgende Erweiterungen des Moduls:

[...]
2) Wiederholung alle X-Sekunden zulassen

Beispiel für Benachrichtigung:

define di_hohe_feuchtigkeit DOIF ([bad:humidity]>70) (set tablet ttsSay Bitte im Badezimmer lüften.)
attr di_hohe_feuchtigkeit wait 300
attr di_hohe_feuchtigkeit do 600

[...]

Gibt es dazu schon was neues?

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 November 2014, 17:58:09
Zitat von: fhainz am 29 November 2014, 16:35:04
Gibt es dazu schon was neues?

Grüße

... erst in der nächsten Version, wird aber noch etwas dauern - habe etwas anderes zu tun.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: fhainz am 29 November 2014, 17:59:53
Ja kein stress. Ich habs derzeit über einen watchdog laufen. Wollte das ganze nur vereinfachen ;)

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 November 2014, 18:01:40
Zitat von: fhainz am 29 November 2014, 17:59:53
Ja kein stress. Ich habs derzeit über einen watchdog laufen. Wollte das ganze nur vereinfachen ;)

Grüße

ja, das wird mit der neuen Version von DOIF recht elegant lösbar sein, siehe meine todo-Liste einige Posts zuvor.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 30 November 2014, 02:18:58
Zitat von: Brockmann am 29 November 2014, 16:29:30
Und das hatte ich Dir ja auch angekündigt.
jo hast du und ich hatte es ja auch schon probiert und wußte das ein Fehler kommt.. ;)

Zitat von: Brockmann am 29 November 2014, 16:29:30
Bitte lies Dir die Commandref zu RandomTimer in aller Ruhe durch und versuche das Konzept zu verstehen.
ich habe die commandref ständig offen vom DOIF und vom RT  ;) :D
mal schauen was ich damit anfange...! evtl. stelle ich in dem Beleuchtungsthread von mir dann die Frage, denn ich werde sicher wieder hängen, später..!
Wenn das alles mal läuft möchte ich sowieso den gesamten Code posten, damit das nachgebaut werden kann, denn ich habe dazu auch schon 2x eine PM bekommen, konnte aber nur den Code für Dämmerung empfehlen..

Was zumindest funktioniert ist das wenn das Dummy auf Zufall steht geht das Licht auch nicht an, denn ich hatte vorhin vergessen es nach meinen Tests zurück zu stellen auf Dämmerung...
Aber wenn ich dann das Licht manuell einschalte, geht es mit dem DOIF auch nicht aus zu der letzten Uhrzeit heute um 1.15 Uhr ist das richtig so, oder sollte er trotzdem ausschalten.?

Edith:// tja ich habe mal das zweite Beispiel aus dem RT genommen, aber auch hier gibt es einen Sytax Error und ich komme nicht weiter damit  :-\
Leider sind auch die ganzen Beispiele aus dem DOIF in der commandref weg.
war im englischen Teil drin sorry
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 30 November 2014, 18:59:17
Hallo.
Nach heutigem update und anschliesenden shutwdown/restart kam folgende meldung

Dunkelheit_off DOIF: the at function "ReadingsVal("myTwilight","sr_indoor","")" must return a timespec and not <empty string>.: {ReadingsVal("myTwilight","sr_indoor","")}\





define Dunkelheit_off DOIF ([{ReadingsVal("myTwilight","sr_indoor","")}]) (set Dunkelheit off)


was wurde jetzt bei doif geändert?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Dezember 2014, 09:37:01
Zitat von: satprofi am 30 November 2014, 18:59:17
Hallo.
Nach heutigem update und anschliesenden shutwdown/restart kam folgende meldung

Dunkelheit_off DOIF: the at function "ReadingsVal("myTwilight","sr_indoor","")" must return a timespec and not <empty string>.: {ReadingsVal("myTwilight","sr_indoor","")}\





define Dunkelheit_off DOIF ([{ReadingsVal("myTwilight","sr_indoor","")}]) (set Dunkelheit off)


was wurde jetzt bei doif geändert?

Die Frage müsste lauten, was hat sich bei dir geändert? Die Meldung ist eindeutig und sagt, dass dein Reading "" liefert. Offenbar ist es einfach zum diesem Zeitpunkt nicht existent gewesen und dann wird dein voreingestellter Default-Wert hier "" genommen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 01 Dezember 2014, 11:42:39
Fehlermeldung: di_TueraufPumpean: perl error in condition: (InternalDoIf('Zirkulationspumpe','STATE','') eq "off" and InternalDoIf('MK_Haustuer','STATE','') eq "open") (set Zirkulationspumpe on): syntax error at (eval 46) line 1, near ") ("

DEF: (([Zirkulationspumpe] eq "off" and [MK_Haustuer] eq "open") (set Zirkulationspumpe on))

ich seh den Wald vor lauter Bäumen nicht ...
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 01 Dezember 2014, 12:14:10
Zitat von: knochenmuehle am 01 Dezember 2014, 11:42:39
Fehlermeldung: di_TueraufPumpean: perl error in condition: (InternalDoIf('Zirkulationspumpe','STATE','') eq "off" and InternalDoIf('MK_Haustuer','STATE','') eq "open") (set Zirkulationspumpe on): syntax error at (eval 46) line 1, near ") ("

DEF: (([Zirkulationspumpe] eq "off" and [MK_Haustuer] eq "open") (set Zirkulationspumpe on))

ich seh den Wald vor lauter Bäumen nicht ...

Mach mal die Äußeren runden Klammern weg

([Zirkulationspumpe] eq "off" and [MK_Haustuer] eq "open") (set Zirkulationspumpe on)

oder so das logische und klammern

(([Zirkulationspumpe] eq "off") and ([MK_Haustuer] eq "open")) (set Zirkulationspumpe on)
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 01 Dezember 2014, 14:43:26
da ich immer noch am probieren bin und kein Ergebnis ohne Fehler hin bekomme, hier mal mein letzter Stand.
Als Fehler ist ein Syntax error vorhanden, vllt ist es ja nur noch eine Kleinigkeit, aber meine ganzen Versuche scheiterten bisher

Fehler:
perl error in condition: InternalDoIf('Zeitsteuerung','STATE','') eq "Zufall" and RandomTimer * (DOIF_time_once($hash->{timer}{0},$wday,"0123456")) WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 : syntax error at (eval 1326470) line 1, near ") WegLampe_Sw_02 "

DEF:
( [Zeitsteuerung] eq "Zufall" and RandomTimer * ([{sunset_abs("CIVIL",-8100,"14:00","22:20")}|0123456]) WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 )

Der hintere Teil des codes ist exakt aus der commandref vom RT genommen (device ersetzt durch meines) damit dachte ich habe ich ein Erfolg :-\
Ich wollte jetzt nicht noch einen Beitrag in RandomTimer eröffnen, deshalb hier nochmal, da der Fehler ja im DOIF erscheint.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 01 Dezember 2014, 15:09:03
Auch das sieht für mich wieder nicht stimmig aus.

Laut CommandRef müsste die DEF des DOIFs in diesem Format enden.

(<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

Deine sehen so aus, dass diese ganz aussen ein Klammerpaar (...) haben.
Und damit ist es in der Tat syntaktisch nicht korrekt.
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 01 Dezember 2014, 15:20:21
Zitat von: moonsorrox am 01 Dezember 2014, 14:43:26
da ich immer noch am probieren bin und kein Ergebnis ohne Fehler hin bekomme, hier mal mein letzter Stand.
Als Fehler ist ein Syntax error vorhanden, vllt ist es ja nur noch eine Kleinigkeit, aber meine ganzen Versuche scheiterten bisher

Fehler:
perl error in condition: InternalDoIf('Zeitsteuerung','STATE','') eq "Zufall" and RandomTimer * (DOIF_time_once($hash->{timer}{0},$wday,"0123456")) WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 : syntax error at (eval 1326470) line 1, near ") WegLampe_Sw_02 "

DEF:
( [Zeitsteuerung] eq "Zufall" and RandomTimer * ([{sunset_abs("CIVIL",-8100,"14:00","22:20")}|0123456]) WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 )

Der hintere Teil des codes ist exakt aus der commandref vom RT genommen (device ersetzt durch meines) damit dachte ich habe ich ein Erfolg :-\
Ich wollte jetzt nicht noch einen Beitrag in RandomTimer eröffnen, deshalb hier nochmal, da der Fehler ja im DOIF erscheint.

Ich verstehe gerad nicht, wo hier DOIF und DOELSEIF versteckt ist?

Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 01 Dezember 2014, 15:48:33
Zitat von: maxritti am 01 Dezember 2014, 15:09:03
Auch das sieht für mich wieder nicht stimmig aus.

Laut CommandRef müsste die DEF des DOIFs in diesem Format enden.

(<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

ja klar das sagt ja wohl auch der Fehler, aber leider bin ich da nicht so bewandert und benötige Hilfe...
Ich habe mir schon zigmal die commandref und vorallem die Beispiele angeschaut, komme aber zu keinem fehlerfreiem Ergebnis.

Wenn ich es richtig deute was du schreibst sollte der Fehler in dem hinteren Bereich des Code liegen, also ab hier:
WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 )
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 01 Dezember 2014, 16:43:12
Also in den letzten (....) steht das, was ausgeführt werden soll, wenn die Bedingung des DOIF erfüllt ist.

Will heissen, gib mal folgenden Code in Dein Webinterface bei fhem ein und drücke Enter.

WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 )

Da gehe ich mal von aus, dass auch das in einen Fehler läuft.
Denn mind. die letzte Klammer ) ist zuviel oder vorne fehlt eine.
Wobei ich von dem gesamten Code nicht weiss, was er machen soll, aber das ist eine andere Baustelle :)

Und damit wäre dann alles vor dem WegLampe_Sw_02 die Bedingung des DOIFs.
Also das hier:

( [Zeitsteuerung] eq "Zufall" and RandomTimer * ([{sunset_abs("CIVIL",-8100,"14:00","22:20")}|0123456])

Und da ist die öffnende Klammer am Anfang zuviel oder am Ende fehlt eine.
Auf jeden Fall stimmt die Anzahl der ( nicht mit der Anzahl der ) überein.

Eventuell wird es damit plausibler, wie das syntaktisch auszusehen hat?
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 01 Dezember 2014, 20:02:44

danke

Andreas

Titel: Antw:neues Modul DOIF
Beitrag von: Merlin1 am 01 Dezember 2014, 23:14:22
Zitat von: Reinerlein am 28 November 2014, 16:18:53
dafür kannst du das Attribut "wait" am DOIF einstellen. Damit kannst du die Zeitverzögerung in Sekunden einstellen, die *vor* Ausführung des entsprechenden Kommandos gewartet wird.
Wenn innerhalb der Wartezeit die Bedingung für die Ausführung des Kommandos wieder ungültig wird, wird der Timer abgebrochen (und bei Gültigkeit wieder angestartet).
Tausend Dank! Klappt so.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 02 Dezember 2014, 00:39:14
Zitat von: maxritti am 01 Dezember 2014, 16:43:12
Will heissen, gib mal folgenden Code in Dein Webinterface bei fhem ein und drücke Enter.

WegLampe_Sw_02 * {sunset_abs (3 * 3600) } 480 )
das habe ich mal gemacht, folgendes kommt dann:
Unknown command WegLampe_Sw_02, try help.

Zitat von: maxritti am 01 Dezember 2014, 16:43:12
Denn mind. die letzte Klammer ) ist zuviel oder vorne fehlt eine.
Wobei ich von dem gesamten Code nicht weiss, was er machen soll, aber das ist eine andere Baustelle :)
wenn ich aber jetzt eine Klammer wegnehme kommt der Fehler wie oben...
und mit Klammer "(" vorn  Unknown command (WegLampe_Sw_02, try help

Zur Erklärung der Code soll, wenn das Dummy Zeitsteuerung auf Zufall steht mit dem RandomTimer arbeiten und eben die Zeit mit dessen Parametern schalten...
Ein define mit dem RandomTimer habe ich separat der funktioniert, aber ich wollte das mit diesem DOIF machen dann brauche ich nicht mehrere Dummys aktivieren
Das selbe Dummy "Zeitsteuerung" macht eben auch noch die normale Schaltung der Beleuchtung täglich, wenn ich zuhause bin.

Zitat von: maxritti am 01 Dezember 2014, 16:43:12
Und damit wäre dann alles vor dem WegLampe_Sw_02 die Bedingung des DOIFs.
Also das hier:

( [Zeitsteuerung] eq "Zufall" and RandomTimer * ([{sunset_abs("CIVIL",-8100,"14:00","22:20")}|0123456])

Und da ist die öffnende Klammer am Anfang zuviel oder am Ende fehlt eine.
Auf jeden Fall stimmt die Anzahl der ( nicht mit der Anzahl der ) überein.
Diese Bedingung läuft schon ohne den RandomTimer, dann steht an Stelle von "Zufall" eben "Dämmerung", so habe ich es genannt, der Code ist weiter oben in dem Beitrag.
Nur ich dachte ich kann es ableiten, aber leider nicht.


Zitat von: maxritti am 01 Dezember 2014, 16:43:12
Eventuell wird es damit plausibler, wie das syntaktisch auszusehen hat?
naja...  :-\ das mit den Klammern erscheint mir schon logisch, aber funktioniert eben nicht, vllt geht das nicht mit dem RandomTimer..?
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 02 Dezember 2014, 07:25:45
Zitat von: moonsorrox am 02 Dezember 2014, 00:39:14
das habe ich mal gemacht, folgendes kommt dann:
Unknown command WegLampe_Sw_02, try help.
wenn ich aber jetzt eine Klammer wegnehme kommt der Fehler wie oben...
und mit Klammer "(" vorn  Unknown command (WegLampe_Sw_02, try help


Ist doch irgendwie klar, oder? WegLampe_Sw_02 ist dein Device, welches Kommando soll fhem an dem Device ausführen, das fehlt doch komplett.


Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 02 Dezember 2014, 08:07:02
Zitat von: moonsorrox am 02 Dezember 2014, 00:39:14
naja...  :-\ das mit den Klammern erscheint mir schon logisch, aber funktioniert eben nicht, vllt geht das nicht mit dem RandomTimer..?

Das kann doch gar nicht funktionieren.
Randomtimer ist ein eigenständiges Modul. Damit muss halt ein neues Device definiert werden, welches dann eben einen solchen RandomTimer definiert, wo wann was passieren soll.
Da sehe ich mal keinen direkten Zusammenhang zwischen DOIF und Randomtimer.

Passt ja jetzt nicht wirklich hier hin, aber ich habe das so gelöst.
Mit einem Dummy sage ich meinem Fhem, ob ich in Urlaub bin oder nicht (Verreist = ja oder nein).
Dann habe ich einen Randomtimer, der im Attribut disableCond eine Funktion isVerreist() abfragt, welche 0 oder 1 zurückliefert eben den Status von meinem Urlaubsdummy.
Damit ist der Randomtimer ein oder aus. Und im Timer selber steht dann das Device welches zu der  Zufallszeit geschaltet werden soll.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 02 Dezember 2014, 15:00:53
Zitat von: Jens_B am 02 Dezember 2014, 07:25:45
das fehlt doch komplett.
ja natürlich ist das klar, darum ging es mir ja auch gar nicht..!  ;)
etwas OT
und klar fehlt ein set <device> on/off oder wie auch immer, aber wenn du mal in ein Code oder commandref zu RT schaust steht auch nichts mit set oder on/off
hier mal ein Beispiel:
*{sunset_abs("CIVIL",1800,"17:00","22:20")} AussenLampe 01:05:00 900 700/100

eine ganz einfache Schaltung mit dem DOIF ist ja auch kein Problem... siehe unten was ich erreichen wollte

Zitat von: maxritti am 02 Dezember 2014, 08:07:02
Randomtimer ist ein eigenständiges Modul. Damit muss halt ein neues Device definiert werden, welches dann eben einen solchen RandomTimer definiert, wo wann was passieren soll.
das ist schon klar, aber ich wollte eben diese Zufallssteuerung/RT in das DOIF einbauen.. ;)

Zitat von: maxritti am 02 Dezember 2014, 08:07:02
Da sehe ich mal keinen direkten Zusammenhang zwischen DOIF und Randomtimer.
vollkommen richtig

Zitat von: maxritti am 02 Dezember 2014, 08:07:02
Passt ja jetzt nicht wirklich hier hin, aber ich habe das so gelöst.
Mit einem Dummy sage ich meinem Fhem, ob ich in Urlaub bin oder nicht (Verreist = ja oder nein).
Dann habe ich einen Randomtimer, der im Attribut disableCond eine Funktion isVerreist() abfragt, welche 0 oder 1 zurückliefert eben den Status von meinem Urlaubsdummy.
Damit ist der Randomtimer ein oder aus. Und im Timer selber steht dann das Device welches zu der  Zufallszeit geschaltet werden soll.
das hatte ich ja gestern geschrieben, was ich erreichen möchte.
Ich habe damit aber zwei Dummy und wollte das verbinden...

Also ich habe einen RandomTimer der funktioniert... und ich habe für diese Beleuchtung oben ein Dummy
Dummy Code:
#### Zeitsteuerung Dummy ###
define Zeitsteuerung dummy
attr Zeitsteuerung alias Zeitsteuerung aktivieren
attr Zeitsteuerung devStateIcon Aus:general_aus@lightgreen Dämmerung:weather_sunrise@blue Zufall:general_an_fuer_zeit@Crimson
attr Zeitsteuerung eventMap Aus Dämmerung Zufall
attr Zeitsteuerung group Aussen Beleuchtung
attr Zeitsteuerung icon time_clock
attr Zeitsteuerung room Automation
attr Zeitsteuerung setList state:Aus,Dämmerung,Zufall
attr Zeitsteuerung sortby 01
attr Zeitsteuerung webCmd state


jetzt wollte ich eben erreichen mit dem DOIF das es ein absolutes "Aus" eine Schaltung bei Anwesenheit die sich bei mir im Dummy "Dämmerung" nennt und eben die für "Zufall"
"Aus" und "Dämmerung" funktioniert super und nun wollte ich den RandomTimer/Code für "Zufall" mit ins DOIF integrieren damit ich nicht zwei verschiedene Devices betätigen muss, nämlich einmal RT und einmal meine DOIF Schaltung.
Beides wollte ich zusammen bringen, ich hoffe ich habe es verständlich ausgedrückt...

Somit kann ich eben über die setList einstellen was ich möchte "Aus", Normale Schaltung wenn ich zuhause bin "Dämmerung" und wenn abwesend "Zufall" wobei eben Zufall der RT sein sollte... das bekomme ich allein eben nicht gebacken..

Deshalb ja auch immer meine Frage geht das überhaupt den Code vom RT ins DOIF einzubauen..?
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 02 Dezember 2014, 15:16:47
Zitat von: moonsorrox am 02 Dezember 2014, 15:00:53
Deshalb ja auch immer meine Frage geht das überhaupt den Code vom RT ins DOIF einzubauen..?

Aus meiner Sicht kann man die Frage klar mit NEIN beantworten.

Zitat von: Brockmann am 29 November 2014, 16:29:30
Woraus Du nicht schließen solltest, dass das "*" richtig wäre. Immerhin bekommst Du ohne * eine andere Fehlermeldung. Und das hatte ich Dir ja auch angekündigt.
Nein, sicher kannst Du das so nicht schreiben. Aber wo soll ich anfangen? Ich vermute, Du möchtest auf diese Weise RandomTimer ins Spiel bringen. Das kann so aber nicht funktionieren. Bitte lies Dir die Commandref zu RandomTimer in aller Ruhe durch und versuche das Konzept zu verstehen. Mit einem set auf einen Schalter wirst Du keinen RandomTimer hinbekommen. Der wird als eigenes Objekt definiert. Darin taucht der zu verwendende Schalter als Parameter auf.
Aber wie ich schon sagte, für den ohnehin schon arg langen DOIF-Thread ist das IMHO völlig off-topic.
Und dem schließe ich mich jetzt auch an und denke für Deine Anforderung solltest Du ein separates Thema erstellen.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 02 Dezember 2014, 15:25:31
Zitat von: maxritti am 02 Dezember 2014, 15:16:47
Aus meiner Sicht kann man die Frage klar mit NEIN beantworten.
Und dem schließe ich mich jetzt auch an und denke für Deine Anforderung solltest Du ein separates Thema erstellen.
OK Danke, schade trotzdem.
Ich werde das Thema mal in dem Bereich Beleuchtung anfangen, glaube auch das ist da besser aufgehoben.
EDITH:// hatte ganz vergessen das ich hier (http://forum.fhem.de/index.php/topic,29323.msg220893.html#msg220893) schon mal angefangen habe mit dem Thema
Titel: Antw:neues Modul DOIF
Beitrag von: Otto am 03 Dezember 2014, 07:31:30
Hallo,

ich verstehe die Schaltung nicht:
define di_Rollo_WZ_mitte DOIF (([Bewegungsmelder1:brightness]>120 and [07:15-10:00|012456]) or [06:45|3]) (set Rollo_WZ_mitte:FILTER=level!=100 on) DOELSEIF ([Bewegungsmelder1:brightness]<90 and [17:00-22:00]|0123456) (set Rollo_WZ_mitte:FILTER=level!=0 off)

Das Rollo fährt Mittwoch um 6:45 hoch und später um 6:49 wieder runter.
Warum fährt es vor 17:00 runter??

Gruß Otto
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Dezember 2014, 08:36:21
Zitat von: Otto am 03 Dezember 2014, 07:31:30
Das Rollo fährt Mittwoch um 6:45 hoch und später um 6:49 wieder runter.
Warum fährt es vor 17:00 runter??
Wenn es wirklich genau so definiert ist, liegt das an der allerletzten eckigen Klammer. Die muss hinter die Tage, nicht davor, so wie bei der anderen Bedingung auch.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Dezember 2014, 14:18:46
Da das nächste Feature-Update ja noch ein wenig hin ist, wollte ich mir eine dringend benötigte Funktionalität selbst zurechtbasteln, nämlich die Möglichkeit, ein DOIF höchstens alle X Sekunden auszuführen.
Meine Idee dazu: man ziehe von der aktuellen Zeit den Zeitpunkt des Reading cmd_event, ab, der ja beim letzten Ausführen des DOIF gesetzt wurde. Wenn dieser Wert > X, darf das DOIF ausgeführt werden. Das ganze wird als zusätzliche Bedingung ins DOIF gepackt:

define DI_test DOIF ([Dummy] and {time_str2num("$year-$month-$mday $hms") - time_str2num(ReadingsTimestamp("DI_test","cmd_event",0)) > 10})
   (trigger global bla)
attr DI_test do always


Theoretisch funktioniert der Teil in geschweiften Klammern, zumindest kann ich den so in der FHEM-Befehlszeile eingeben und bekomme die erwartete Antwort.
Aber als Bedingung in DOIF bewirkt es nicht das gewünschte, sondern die Bedingung ist anscheinend immer wahr, denn die Aktion wird jedes Mal ausgeführt. Aber ich bekomme auch bei jedem Aufruf eine Warnung im Log:
PERL WARNING: Odd number of elements in anonymous hash at (eval 17759) line 1.

Nun weiß ich nicht, ob ich was falsch mache, DOIF sich hier irgendwie verschluckt oder ob dieser Ansatz grundlegend nicht funktionieren kann.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Dezember 2014, 15:27:53
Zitat von: Brockmann am 03 Dezember 2014, 14:18:46
Da das nächste Feature-Update ja noch ein wenig hin ist, wollte ich mir eine dringend benötigte Funktionalität selbst zurechtbasteln, nämlich die Möglichkeit, ein DOIF höchstens alle X Sekunden auszuführen.
Meine Idee dazu: man ziehe von der aktuellen Zeit den Zeitpunkt des Reading cmd_event, ab, der ja beim letzten Ausführen des DOIF gesetzt wurde. Wenn dieser Wert > X, darf das DOIF ausgeführt werden. Das ganze wird als zusätzliche Bedingung ins DOIF gepackt:

define DI_test DOIF ([Dummy] and {time_str2num("$year-$month-$mday $hms") - time_str2num(ReadingsTimestamp("DI_test","cmd_event",0)) > 10})
   (trigger global bla)
attr DI_test do always


Theoretisch funktioniert der Teil in geschweiften Klammern, zumindest kann ich den so in der FHEM-Befehlszeile eingeben und bekomme die erwartete Antwort.
Aber als Bedingung in DOIF bewirkt es nicht das gewünschte, sondern die Bedingung ist anscheinend immer wahr, denn die Aktion wird jedes Mal ausgeführt. Aber ich bekomme auch bei jedem Aufruf eine Warnung im Log:
PERL WARNING: Odd number of elements in anonymous hash at (eval 17759) line 1.

Nun weiß ich nicht, ob ich was falsch mache, DOIF sich hier irgendwie verschluckt oder ob dieser Ansatz grundlegend nicht funktionieren kann.

In der Bedingung von DOIF befindest du dich bereits auf der Perl-Ebene, da sind die geschweiften Klammern an dieser Stelle zu viel des Guten. Das kannst du aber auch einfacher haben und ohne Fehlermeldung ;) :


define DI_test DOIF ([Dummy] and (time() - time_str2num(ReadingsTimestamp("DI_test","cmd_event",0))) > 10)
   (trigger global bla)
attr DI_test do always


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 03 Dezember 2014, 20:36:40
Hallo,
mit DOIF kann man Zeitintervalle angeben, an denen bestimmte Aktionen stattfinden sollen. Das bezieht sich m.W. aber nur auf Wochentage und Zeitintervalle mit Stunden, Minuten und Sekunden.
Geht das auch mit dem Datumswerten?

z.B.
vom 01.01.-10.01. von 16:00 bis 19:00
vom 11.01. bis 10.12. von 0:00 bis 24:00
vom 11.12. bis 31.12. von 16:00 bis 24:00

Danke und Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Dezember 2014, 21:08:29
Zitat von: Spartacus am 03 Dezember 2014, 20:36:40
Hallo,
mit DOIF kann man Zeitintervalle angeben, an denen bestimmte Aktionen stattfinden sollen. Das bezieht sich m.W. aber nur auf Wochentage und Zeitintervalle mit Stunden, Minuten und Sekunden.
Geht das auch mit dem Datumswerten?

z.B.
vom 01.01.-10.01. von 16:00 bis 19:00
vom 11.01. bis 10.12. von 0:00 bis 24:00
vom 11.12. bis 31.12. von 16:00 bis 24:00

Danke und Gruß,
Christian

Natürlich nicht, sonst stünde das in der Commandref. Du kannst aber folgende Variablen abfragen: $mday,$month,$year,$wday,$yday

11.12. bis 31.12. von 16:00 bis 24:00 wäre dann:

($mday>=11 and $mday<=31 and $month==11 and [16:00-00:00])

Monate werden von 0 bis 11 gezählt. (Das habe nicht ich mir ausgedacht, sondern es wird von der localtime-Routine in Perl geliefert)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 03 Dezember 2014, 21:57:46
Hallo Damian,
danke für den Hinweis. Aber irgendwie sehe ich den Wald vor Bäumen nicht, oder ich habe Dich falsch verstanden...
Auf jeden Fall ist die Funzel nicht angegangen, es wurde direkt das DOELSE ausgeführt...
define di.01.rp.01.EG.ku.SD.Kochinsel DOIF ($mday>=1 and $mday<=4 and $month==11 and [21:48-22:00])\
(set rp.01.EG.ku.SD.Kochinsel on)\
DOELSE\
(set rp.01.EG.ku.SD.Kochinsel off)

bitte nicht über die kryptischen Namen wundern...die werden nach einem Schema zusammengebaut...
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Dezember 2014, 08:38:27
Zitat von: Spartacus am 03 Dezember 2014, 21:57:46
Hallo Damian,
danke für den Hinweis. Aber irgendwie sehe ich den Wald vor Bäumen nicht, oder ich habe Dich falsch verstanden...
Auf jeden Fall ist die Funzel nicht angegangen, es wurde direkt das DOELSE ausgeführt...
define di.01.rp.01.EG.ku.SD.Kochinsel DOIF ($mday>=1 and $mday<=4 and $month==11 and [21:48-22:00])\
(set rp.01.EG.ku.SD.Kochinsel on)\
DOELSE\
(set rp.01.EG.ku.SD.Kochinsel off)

bitte nicht über die kryptischen Namen wundern...die werden nach einem Schema zusammengebaut...
Christian

Ich sehe keinen Fehler. Hast du auch die aktuelle Version von DOIF? Sonst bitte Ausgabe von list di.01.rp.01.EG.ku.SD.Kochinsel  nach dem Schalten hier posten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 04 Dezember 2014, 09:06:31
Hi Damian,
ich habe die Uhrzeiten mal angepasst:

Status vor dem Schalten:
Internals:
   CFGFN      config/Kueche.cfg
   DEF        ($mday>=1 and $mday<=5 and $month==11 and [09:05-09:15]) (set rp.01.EG.ku.SD.Kochinsel on)
DOELSE (set rp.01.EG.ku.SD.Kochinsel off)
   NAME       di.01.rp.01.EG.ku.SD.Kochinsel
   NR         454
   NTFY_ORDER 50-di.01.rp.01.EG.ku.SD.Kochinsel
   STATE      initialized
   TYPE       DOIF
   Readings:
     2014-12-04 09:00:33   state           initialized
     2014-12-04 09:00:33   timer_1_c1      04.12.2014 09:05:00
     2014-12-04 09:00:33   timer_2_c1      04.12.2014 09:15:00
   Condition:
     0          $mday>=1 and $mday<=5 and $month==11 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
   Do:
     0          set rp.01.EG.ku.SD.Kochinsel on
     1          set rp.01.EG.ku.SD.Kochinsel off
   Helper:
     last_timer 2
     sleeptimer -1
   Realtime:
     0          09:05:00
     1          09:15:00
   State:
   Time:
     0          09:05:00
     1          09:15:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   alias      autom. Weihnachtsbaumbeleuchtung
   cmdState   on|off
   devStateIcon .*on:light_light_dim_100@lightgreen .*off:light_light_dim_00@red
   group      Scripte
   icon       scene_x-mas@lightgreen
   room       01-Küche

Status nach dem Schalten:
Internals:
   CFGFN      config/Kueche.cfg
   DEF        ($mday>=1 and $mday<=5 and $month==11 and [09:05-09:15]) (set rp.01.EG.ku.SD.Kochinsel on)
DOELSE (set rp.01.EG.ku.SD.Kochinsel off)
   NAME       di.01.rp.01.EG.ku.SD.Kochinsel
   NR         454
   NTFY_ORDER 50-di.01.rp.01.EG.ku.SD.Kochinsel
   STATE      off
   TYPE       DOIF
   Readings:
     2014-12-04 09:05:00   cmd_event       timer_1
     2014-12-04 09:05:00   cmd_nr          2
     2014-12-04 09:05:00   state           off
     2014-12-04 09:05:00   timer_1_c1      05.12.2014 09:05:00
     2014-12-04 09:00:33   timer_2_c1      04.12.2014 09:15:00
   Condition:
     0          $mday>=1 and $mday<=5 and $month==11 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
   Do:
     0          set rp.01.EG.ku.SD.Kochinsel on
     1          set rp.01.EG.ku.SD.Kochinsel off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Readings:
   Realtime:
     0          09:05:00
     1          09:15:00
   State:
   Time:
     0          09:05:00
     1          09:15:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   alias      autom. Weihnachtsbaumbeleuchtung
   cmdState   on|off
   devStateIcon .*on:light_light_dim_100@lightgreen .*off:light_light_dim_00@red
   group      Scripte
   icon       scene_x-mas@lightgreen
   room       01-Küche


Danke und Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Dezember 2014, 09:49:13
Die Lösung ist ganz einfach. Ich habe bereit intern im DOIF-Modul den Monat, der von der localtime-Routine geliefert wird um eins erhöht. Damit ist $month 1 bis 12, so wie man es erwartet.

Du musst also für Dezember $month==12 abfragen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 04 Dezember 2014, 11:01:56
Hi Damian,
danke! Jetzt funzt es!
Gruß,
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 04 Dezember 2014, 17:53:19
Zitat von: Damian am 03 Dezember 2014, 15:27:53
In der Bedingung von DOIF befindest du dich bereits auf der Perl-Ebene, da sind die geschweiften Klammern an dieser Stelle zu viel des Guten. Das kannst du aber auch einfacher haben und ohne Fehlermeldung ;) :
Danke für den Hinweis. So klappt es. Die engültige Lösung war das aber auch noch nicht, da ich einen Denkfehler drin hatte:
Wenn ich in der Kondition den Zeitpunkt des letzten cmd_event abfrage und die Kondition dadurch scheitert, wird logischerweise trotzdem jedes Mal ein neues cmd_event gesetzt. Dadurch wird dieser Zeitpunkt immer nachgezogen und wenn das DOIF sehr häufig angetriggert wird, kann es dadurch im Extremfall niemals wahr werden.

Damit es robust läuft, habe ich nun ein eigenes Reading dafür verwendet, das jedes Mal gesetzt wird, wenn die Aktion ausgeführt wurde. In dessen Timestamp ist somit der Zeitpunkt der letzten Ausführung zuverlässig festgehalten und darauf kann man sich beziehen. Das Beispiel würde dann ungefähr so aussehen (Klammern ohne Gewähr):


define DI_test DOIF ([Dummy] and (time() - time_str2num(ReadingsTimestamp("DI_test", "last_exec", "0000-00-00 00:00:00"))) >= 10)
   (
   trigger global bla,
   setReading DI_test last_exec wasauchimmer
   )
attr DI_test do always


Gibt jeweils beim ersten Durchlauf, wenn das last_exec-Reading noch nicht existiert, eine Warnung, wohl weil dieser kreative "000..."-Fallback-String keine saubere time-Definition ist.
PERL WARNING: Use of uninitialized value in subtraction (-) at (eval 38499) line 1.

Aber von solchen Kleinlichkeiten sollte man sich nicht aufhalten lassen...  ;)
Wobei, wenn jemand einen Tipp hat, wie ich die Warnung vermeiden kann, optimiere ich das gerne noch.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 04 Dezember 2014, 18:05:49
Hallo,
bin immer noch am basteln und finde den Fehler nicht!
Schaltzeiten sollen sein:
im Zeitraum vom: 27.12. bis 12.01.
mo-fr 07:00 bis 08:30 und 16:30 bis 22:30
sa,so, feiertags, 08:30 bis 23:00

am:
24.12 16:00 bis 23:00
31.12 08:30 bis 01:00


(([07:00-08:30|12345] and [hl.01.Feiertag:today] eq "none" or
[16:30-22:30|12345] and [hl.01.Feiertag:today] eq "none" or
[08:30-23:00] and [hl.01.Feiertag:today] ne "none" or
[08:30-23:00|60]) and (($mday>=27 and $month==12) or ($mday<=12 and $month==1))) or
([16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend") or
([08:30-02:00] and [hl.01.Feiertag:state] eq "Silverster") (set rp.01.EG.ku.SD.Kochinsel on)
DOELSE (set rp.01.EG.ku.SD.Kochinsel off)


Danke,
Spartacus
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Dezember 2014, 18:18:37
Zitat von: Brockmann am 04 Dezember 2014, 17:53:19
Danke für den Hinweis. So klappt es. Die engültige Lösung war das aber auch noch nicht, da ich einen Denkfehler drin hatte:
Wenn ich in der Kondition den Zeitpunkt des letzten cmd_event abfrage und die Kondition dadurch scheitert, wird logischerweise trotzdem jedes Mal ein neues cmd_event gesetzt. Dadurch wird dieser Zeitpunkt immer nachgezogen und wenn das DOIF sehr häufig angetriggert wird, kann es dadurch im Extremfall niemals wahr werden.

Damit es robust läuft, habe ich nun ein eigenes Reading dafür verwendet, das jedes Mal gesetzt wird, wenn die Aktion ausgeführt wurde. In dessen Timestamp ist somit der Zeitpunkt der letzten Ausführung zuverlässig festgehalten und darauf kann man sich beziehen. Das Beispiel würde dann ungefähr so aussehen (Klammern ohne Gewähr):


define DI_test DOIF ([Dummy] and (time() - time_str2num(ReadingsTimestamp("DI_test", "last_exec", "0000-00-00 00:00:00"))) >= 10)
   (
   trigger global bla,
   setReading DI_test last_exec wasauchimmer
   )
attr DI_test do always


Gibt jeweils beim ersten Durchlauf, wenn das last_exec-Reading noch nicht existiert, eine Warnung, wohl weil dieser kreative "000..."-Fallback-String keine saubere time-Definition ist.
PERL WARNING: Use of uninitialized value in subtraction (-) at (eval 38499) line 1.

Aber von solchen Kleinlichkeiten sollte man sich nicht aufhalten lassen...  ;)
Wobei, wenn jemand einen Tipp hat, wie ich die Warnung vermeiden kann, optimiere ich das gerne noch.

Der Urknall der Computerzeit ist:

{time_str2num("1970-01-01 01:00:00")}

vergleiche mit dem Ergebnis von:

{localtime (0)}

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Dezember 2014, 18:30:57
Zitat von: Spartacus am 04 Dezember 2014, 18:05:49
Hallo,
bin immer noch am basteln und finde den Fehler nicht!
Schaltzeiten sollen sein:
im Zeitraum vom: 27.12. bis 12.01.
mo-fr 07:00 bis 08:30 und 16:30 bis 22:30
sa,so, feiertags, 08:30 bis 23:00

am:
24.12 16:00 bis 23:00
31.12 08:30 bis 01:00


(([07:00-08:30|12345] and [hl.01.Feiertag:today] eq "none" or
[16:30-22:30|12345] and [hl.01.Feiertag:today] eq "none" or
[08:30-23:00] and [hl.01.Feiertag:today] ne "none" or
[08:30-23:00|60]) and (($mday>=27 and $month==12) or ($mday<=12 and $month==1))) or
([16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend") or
([08:30-02:00] and [hl.01.Feiertag:state] eq "Silverster") (set rp.01.EG.ku.SD.Kochinsel on)
DOELSE (set rp.01.EG.ku.SD.Kochinsel off)


Danke,
Spartacus
wo sind die Klammern der Bedingung?

((([07:00-08:30|12345] and [hl.01.Feiertag:today] eq "none" or
[16:30-22:30|12345] and [hl.01.Feiertag:today] eq "none" or
[08:30-23:00] and [hl.01.Feiertag:today] ne "none" or
[08:30-23:00|60]) and (($mday>=27 and $month==12) or ($mday<=12 and $month==1))) or
([16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend") or
([08:30-02:00] and [hl.01.Feiertag:state] eq "Silverster"))

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 04 Dezember 2014, 19:51:53
Damian,
ich habe das nicht gesehen! Sorry, aber ich habe hier mehr als ne Stunde gesucht! Ich brauch doch ne Brille! Meine Frau hat recht, auch wenn ich das ungern zugebe!

Jetzt muss nur noch die Reihenfolge der Bedingungen stimmen! Könnte das so klappen wie gewünscht? Gibt ja nicht so viele Möglichkeiten es zu testen....jedes Jahr genau eine, um genau zu sein!  :)

Danke, Danke,
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Dezember 2014, 20:41:34
Zitat von: Spartacus am 04 Dezember 2014, 19:51:53
Damian,
ich habe das nicht gesehen! Sorry, aber ich habe hier mehr als ne Stunde gesucht! Ich brauch doch ne Brille! Meine Frau hat recht, auch wenn ich das ungern zugebe!

Jetzt muss nur noch die Reihenfolge der Bedingungen stimmen! Könnte das so klappen wie gewünscht? Gibt ja nicht so viele Möglichkeiten es zu testen....jedes Jahr genau eine, um genau zu sein!  :)

Danke, Danke,
Christian.

sollte funktionieren, auch wenn man ein paar Klammern hätte auslassen können.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 04 Dezember 2014, 21:51:10
Hallo Damian,
Besten Dank.
Ich habe ein Dummy namens "Ferientag" dessen Wert über ein notify auf "0" oder "1" gesetzt wird.
Frage ich das im DOIF so ab?
... [08:30-23:00] and [hl.01.Feiertag:today] ne "none" and [Ferientag:state]=1...

Danke,
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 05 Dezember 2014, 09:11:25
Zitat von: Damian am 04 Dezember 2014, 18:18:37
Der Urknall der Computerzeit ist:
{time_str2num("1970-01-01 01:00:00")}

Da hätte ich sogar selbst draufkommen können.  :-[

Hier also nochmal ein komplettes Beispiel, wenn man möchte, dass eine DOIF-Aktion maximal alle <SEKUNDEN> ausgeführt wird:

define DI_test DOIF ([Dummy] and (time() - time_str2num(ReadingsTimestamp("DI_test", "last_exec", "1970-01-01 01:00:00"))) >= <SEKUNDEN>)
   (
   <...beliebige Anweisungen>,
   setReading DI_test last_exec wasauchimmer
   )
attr DI_test do always


Vielleicht hat noch jemand Verwendung dafür. Sollte sich problemlos auf andere Aktionen erweitern lassen, die entweder dasselben oder ein eigenes Reading dafür verwenden.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 05 Dezember 2014, 11:35:32
Zitat von: Spartacus am 04 Dezember 2014, 21:51:10
Hallo Damian,
Besten Dank.
Ich habe ein Dummy namens "Ferientag" dessen Wert über ein notify auf "0" oder "1" gesetzt wird.
Frage ich das im DOIF so ab?
... [08:30-23:00] and [hl.01.Feiertag:today] ne "none" and [Ferientag:state]=1...

Danke,
Christian.

Hallo,
Hm! Irgendwie bekomme ich die Meldung: "reading does not exist: [Ferientag:state]" Ich bin jetzt verwirrt! Da es state im Dummy Ferientag gibt!

Christian

NACHTRAG: Ich war einfach nur zu doof! Man sollte auch den Devicenamen nehmen, nicht den Aliasnamen, dann klappt´s auch mit dem DOIF!
und es muss natürlich auch so lauten:
[11:39-22:30|12345] and ([hl.01.Feiertag:state] eq "none" and [cal.01.Ferien.dum:state]==1)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Dezember 2014, 13:07:15
Zitat von: Spartacus am 05 Dezember 2014, 11:35:32
Hallo,
Hm! Irgendwie bekomme ich die Meldung: "reading does not exist: [Ferientag:state]" Ich bin jetzt verwirrt! Da es state im Dummy Ferientag gibt!

Christian

NACHTRAG: Ich war einfach nur zu doof! Man sollte auch den Devicenamen nehmen, nicht den Aliasnamen, dann klappt´s auch mit dem DOIF!
und es muss natürlich auch so lauten:
[11:39-22:30|12345] and ([hl.01.Feiertag:state] eq "none" and [cal.01.Ferien.dum:state]==1)

Status wird, nur durch die Angabe des Devices benutzt, hier also: [cal.01.Ferien.dum], [cal.01.Ferien.dum:state] ist das Reading state, was in den meisten Fällen mit dem Status übereinstimmt.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 05 Dezember 2014, 13:44:33
Hallo Damian,
cool, danke!
Wenn ich es richtig verstehe, bedeutet dies, das dieser Ausdruck ausreicht!
[11:39-22:30|12345] and ([hl.01.Feiertag:state] eq "none" and [cal.01.Ferien.dum])
Gruß,
Christian

NACHTRAG:
so scheint es doch nichtzu gehen: Im Log taucht dieser Fehler auf:
2014.12.05 13:50:28 1: Error: Ferientag has no TYPE
2014.12.05 13:51:00 2: di.01.rp.01.EG.ku.SD.Kochinsel: internal does not exist: [cal.01.Ferien.dum:STATE]
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Dezember 2014, 18:13:05
Zitat von: Spartacus am 05 Dezember 2014, 13:44:33
Hallo Damian,
cool, danke!
Wenn ich es richtig verstehe, bedeutet dies, das dieser Ausdruck ausreicht!
[11:39-22:30|12345] and ([hl.01.Feiertag:state] eq "none" and [cal.01.Ferien.dum])
Gruß,
Christian

NACHTRAG:
so scheint es doch nichtzu gehen: Im Log taucht dieser Fehler auf:
2014.12.05 13:50:28 1: Error: Ferientag has no TYPE
2014.12.05 13:51:00 2: di.01.rp.01.EG.ku.SD.Kochinsel: internal does not exist: [cal.01.Ferien.dum:STATE]


Das bedeutet einfach, dass zu diesem Zeitpunkt kein Zustand von cal.01.Ferien.dum gesetzt war.
Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: IPPhoner2b am 05 Dezember 2014, 19:33:10
Guten Abend zusammen,

ich muss zugeben, ich habe mich nicht durch die ganzen Seiten durchgewälzt, habe aber nur eine kurze Frage bzgl des Moduls.

Ich möchte über eine Homematic Fernbedienung nach Tastendruck alle Rollos runterfahren lassen, da ich aber kein DOELSE oder DOELSEIF benötige, bekomme ich eine Fehlermeldung, dass diese Angaben fehlen. Ich finde das Modul deswegen interessant, weil ich die einzelnen Rollos in einem Abstand von jeweils 5 Sekunden fahren möchte, und es ja eigenltich sehr einfach damit möglich wäre, anders als beim "Notify"

Was könnte ich machen, damit es auch so für mich funktioniert?

Das hier wäre mein Code, ob er jetzt dann auch so wie gewünscht funktioniert weiß ich natürlich nicht.
define taste_8_kurz DOIF ([fb8_Btn_08:Short.*]) (set Rollogwc runter) (set Rollofl runter) (set Rollokre runter) (set Rollokli runter)
attr taste_8_kurz do always
attr taste_8_kurz wait 5:5:5:5
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 05 Dezember 2014, 19:51:10
wait funktioniert bei deinem code nicht, max. die ersten 5 sec.
ich habe für zeitabstände at verwendet, sollte bei dir dann so funktionieren


define taste_8_kurz DOIF ([fb8_Btn_08:Short.*]) (set Rollogwc runter,define next at +00:00:05 set Rollofl runter,define next2 at +00:00:05 set Rollokre runter,define next3 at +00:00:05 set Rollokli runter)
Titel: neues Modul DOIF
Beitrag von: GiJoe73 am 05 Dezember 2014, 19:52:38
Die ganzen Set kannst du so schreiben: (set rollo1 runter , set rollo2 runter , set rollo3 .....)
Dann sollte es klappen
Titel: Antw:neues Modul DOIF
Beitrag von: IPPhoner2b am 05 Dezember 2014, 20:08:20
Hallo ihr beiden,

Danke für eure Antworten, die Version von GiJoe73 gibt schonmal keine Fehlermeldung raus, muss nur noch mal weiterschauen, wie ich den Tastendruck Short oder LongPress genau definieren muss. Aber vielen Dank, so würde es wohl schonmal funktionieren, nur die Wait Daten scheint er zu ignorieren, denn es gehen alle LEDs sofort hintereinander an, die "5" sind doch in Sekunden angegeben, oder?

Zitat von: GiJoe73 am 05 Dezember 2014, 19:52:38
Die ganzen Set kannst du so schreiben: (set rollo1 runter , set rollo2 runter , set rollo3 .....)
Dann sollte es klappen

@Satprofi,
deine Version klappt fast gut, denn komischerweise geht die erste LED (noch hängen LEDs an den Ausgängen) nach ca. 6 sekunden an, dann dauert es die gewünschten 5 sekunden, und dann gehen aber die restlichen 3 direkt hintereinander an
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 05 Dezember 2014, 20:31:18
Ja klar. Die ersten 6sec. sind durch wait erzeugt.

Gesendet von meinem GT-I9300

Titel: Antw:neues Modul DOIF
Beitrag von: IPPhoner2b am 05 Dezember 2014, 21:03:19
Das Wait habe ich eigentlich deaktiviert, und zwischen der ersten und zweiten LED liegen auch die 5 Sekunden, allerdings gehen dann die restlichen 3 LEDs zusammen an, und nicht in den 5 sek Intervallen.

:AUTSCH *g*:

Na gut, eigene Dummheit, dass der Fehler so lange gedauert hat, die Zeiten für die nachfolgenden LEDs müssen logischerweise dazuaddiert werden.

define taste_8_kurz DOIF ([fb8_Btn_08]) (set Rollogwc runter , define next at +00:00:05 set Rollofl runter , define next2 at +00:00:10 set Rollokre runter , define next3 at +00:00:15 set Rollokli runter)
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 06 Dezember 2014, 09:15:38
sorry, ja das hatte ich vergessen.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 06 Dezember 2014, 09:25:48
Zitat von: Damian am 05 Dezember 2014, 18:13:05
Das bedeutet einfach, dass zu diesem Zeitpunkt kein Zustand von cal.01.Ferien.dum gesetzt war.
Gruß

Damian
Moin Damian,
Verstehe ich nicht! STATE steht auf 0 und ist damit gesetzt, oder?Internals:
   CFGFN      config/Dienste.cfg
   CHANGED
   NAME       cal.01.Ferien.dum
   NR         72
   STATE      0
   TYPE       dummy
   Readings:
     2014-12-05 15:40:42   state           0
Attributes:
   alias      Ferientag
   event-on-change-reading .*
   room       98-Dummy


Wo mache ich den Gedankenfehler ?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Dezember 2014, 09:43:04
Zitat von: Spartacus am 06 Dezember 2014, 09:25:48
Moin Damian,
Verstehe ich nicht! STATE steht auf 0 und ist damit gesetzt, oder?Internals:
   CFGFN      config/Dienste.cfg
   CHANGED
   NAME       cal.01.Ferien.dum
   NR         72
   STATE      0
   TYPE       dummy
   Readings:
     2014-12-05 15:40:42   state           0
Attributes:
   alias      Ferientag
   event-on-change-reading .*
   room       98-Dummy


Wo mache ich den Gedankenfehler ?
Christian

Das liegt wohl an der Null. Ich werde es in der nächsten Version korrigieren, solange kannst du etwas anderes stattdessen nehmen z. B. off.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 06 Dezember 2014, 10:38:04
Ah! ok!
Ist ja kein Problem! Wollte es nur verstehen....
Besten Dank,
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Dezember 2014, 16:50:39
Zitat von: Damian am 06 Dezember 2014, 09:43:04
Das liegt wohl an der Null. Ich werde es in der nächsten Version korrigieren, solange kannst du etwas anderes stattdessen nehmen z. B. off.


Problem gefixed und eingecheckt. Korrektur ab morgen per FHEM-Update.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: MarkusN am 07 Dezember 2014, 18:24:36
Moin. Versuche momentan verschiedene at und notify auf doif umzustellen. Mehrmals habe ich beim Versuch ein doif zu definieren FHEM abgeschossen, zuletzt mit diesem Konstrukt:

define doif_zeitschaltuhr_licht_livingcolors DOIF ([{sunset("REAL")}-21:00]) (set licht_livingcolors on,set licht_livingcolors on) DOELSE ( {fhem("set licht_livingcolors off;set licht_livingcolors off") if ((Value("licht_livingcolors") ne "off") && (Value("harmony_wz") eq "PowerOff"))})

Hat sich da irgendwo ein Syntax Fehler eingeschlichen, oder mache ich was anderes falsch?

Grüße,

Markus
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Dezember 2014, 18:48:00
Zitat von: MarkusN am 07 Dezember 2014, 18:24:36
Moin. Versuche momentan verschiedene at und notify auf doif umzustellen. Mehrmals habe ich beim Versuch ein doif zu definieren FHEM abgeschossen, zuletzt mit diesem Konstrukt:

define doif_zeitschaltuhr_licht_livingcolors DOIF ([{sunset("REAL")}-21:00]) (set licht_livingcolors on,set licht_livingcolors on) DOELSE ( {fhem("set licht_livingcolors off;set licht_livingcolors off") if ((Value("licht_livingcolors") ne "off") && (Value("harmony_wz") eq "PowerOff"))})

Hat sich da irgendwo ein Syntax Fehler eingeschlichen, oder mache ich was anderes falsch?

Grüße,

Markus

Das Problem sind oft die Semikolons, die man in FHEM oft verdoppeln oder sogar vervierfachen muss, ja nach Hierarchie-Tiefe.

Genau aus diesem Grunde habe ich IF programmiert, hier bleibt man auf der FHEM-Ebene und kann statt Semikolon Komma angeben (immer nur eins) :)

Unabhängig davon weiß ich nicht, ob du das willst, was du da definiert hast, insb.:  Wenn eine Lampe brennt, soll nach 21:00 Uhr nichts ausgeschaltet werden???

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 07 Dezember 2014, 18:56:42
Zitat von: MarkusN am 07 Dezember 2014, 18:24:36
Moin. Versuche momentan verschiedene at und notify auf doif umzustellen. Mehrmals habe ich beim Versuch ein doif zu definieren FHEM abgeschossen, zuletzt mit diesem Konstrukt:

define doif_zeitschaltuhr_licht_livingcolors DOIF ([{sunset("REAL")}-21:00]) (set licht_livingcolors on,set licht_livingcolors on) DOELSE ( {fhem("set licht_livingcolors off;set licht_livingcolors off") if ((Value("licht_livingcolors") ne "off") && (Value("harmony_wz") eq "PowerOff"))})

Hat sich da irgendwo ein Syntax Fehler eingeschlichen, oder mache ich was anderes falsch?
Warum das FHEM abschiesst, weiß ich auch nicht. Diese Konstruktion mit dem nachgeschalteten if ist etwas ungewöhnlich, aber formal vermutlich korrekt? Habe ich so aber noch nie gemacht. Und im fhem("...") hätte ich es mal mit zwei ;; probiert.

Aber ich würde den DOELSE-Teil so lösen:
DOELSE (IF ([licht_livingcolors] ne "off" and [harmony_wz] eq "PowerOff")(set licht_livingcolors off,set licht_livingcolors off))
Sollte dasselbe bewirken.

Hat das eine Grund, dass Du immer zwei sets auf dasselbe Gerät machst? Oder ist das nur Beispielcode?
Titel: Antw:neues Modul DOIF
Beitrag von: MarkusN am 07 Dezember 2014, 19:15:15
Zitat von: Damian am 07 Dezember 2014, 18:48:00
Unabhängig davon weiß ich nicht, ob du das willst, was du da definiert hast, insb.:  Wenn eine Lampe brennt, soll nach 21:00 Uhr nichts ausgeschaltet werden???

Ich sehe da kein Problem, hast du vielleicht das 'ne' als 'eq' gelesen? Habe das IF-Modul noch gar nicht so wahrgenommen, werde mich mal intensiver damit beschäftigen, danke für den Tip!

Zitat von: Brockmann am 07 Dezember 2014, 18:56:42
Aber ich würde den DOELSE-Teil so lösen:
DOELSE (IF ([licht_livingcolors] ne "off" and [harmony_wz] eq "PowerOff")(set licht_livingcolors off,set licht_livingcolors off))
Sollte dasselbe bewirken.

Hat das eine Grund, dass Du immer zwei sets auf dasselbe Gerät machst? Oder ist das nur Beispielcode?

Danke, habe den Vorschlag mal umgesetzt, hat FHEM auch so gefressen. Ich sende zwei Befehle hintereinander weil es sich bei dem Empfänger um Intertechno Dosen handelt, die nach dem ersten Befehl gerne mal nix tun. Seit dem ich alles immer zwei mal sende hat alles geschaltet wie erwartet.

Grüße,

Markus
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 07 Dezember 2014, 20:37:58
Hi,

irgendwie scheint mir schon ein recht leichter Fall des DOIFs nicht zu glücken.
Und zwar steuere ich derzeit meine 5 Jallousien mit diversen at's, notifies und ein wenig Code in myUtils.pm
Das wollte ich nun mal vereinfachen und dachte mir, da kommt das DOIF doch ganz recht. Da kann ich doch alles gut mit abfrühstücken.
Anfangen wollte ich nun mal mit dem einfachsten Rollo, der an einem Fenster ist, wo kein Türkontakt eine Rolle spielt.

Dieser soll in Abhängigkeit eines Lichtsensors oder spätestens um 22:10 runtergehen, aber nur dann, wenn ein Dummy "duRolloMaster" auf "an" steht.
Ein andere Dummy "duPVRollo" ermöglicht den Rolle in Abhängigkeit des Ertrags meiner PV Anlage auf Zwischenwerte zu stellen.

Nur warum geht der Rollo welchen ich bislang als Dummy definiert habe nicht auf "off"?
Irgendwie landet der im cmd_4, obwohl "duRolloMaster" auf "an" steht und es draussen mal definitiv "dunkel" ist.

Internals:
   CFGFN
   DEF        (([duRolloMaster:state] eq "an") and (([EG_dr_TS_Terrasse:luminosity] < 0.3) or [22:10]))  (set du_EG_wz_RO_TerrasseRechts off) DOELSEIF (([duPVRollo:state] eq "an") and ([mySL:Pac_avg] >= 2100)) (set du_EG_wz_RO_TerrasseRechts 0) DOELSEIF (   ([duPVRollo:state] eq "an") and ([mySL:Pac_avg] >= 1501) ) (set du_EG_wz_RO_TerrasseRechts 30) DOELSE (set du_EG_wz_RO_TerrasseRechts on)
   NAME       di_EG_wz_RO_TerrasseRechts_ru
   NR         5432
   NTFY_ORDER 50-di_du_EG_wz_RO_TerrasseRechts
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2014-12-07 20:32:27   cmd_event       duRolloMaster
     2014-12-07 20:32:27   cmd_nr          4
     2014-12-07 20:32:16   e_EG_dr_TS_Terrasse_luminosity 0.15
     2014-12-07 20:32:28   e_duRolloMaster_state an
     2014-12-07 20:32:30   e_mySL_Pac_avg  0
     2014-12-07 20:32:27   state           cmd_4
     2014-12-07 20:32:07   timer_1_c1      07.12.2014 22:10:00
     2014-12-07 20:32:30   wait_timer      no timer
   Condition:
     0          (ReadingValDoIf('duRolloMaster','state','') eq "an") and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < 0.3) or DOIF_time_once($hash->{timer}{0},$wday,""))
     1          (ReadingValDoIf('duPVRollo','state','') eq "an") and (ReadingValDoIf('mySL','Pac_avg','') >= 2100)
     2             (ReadingValDoIf('duPVRollo','state','') eq "an") and (ReadingValDoIf('mySL','Pac_avg','') >= 1501)
   Days:
   Devices:
     0           duRolloMaster EG_dr_TS_Terrasse
     1           duPVRollo mySL
     2           duPVRollo mySL
     all         duRolloMaster EG_dr_TS_Terrasse duPVRollo mySL
   Do:
     0          set du_EG_wz_RO_TerrasseRechts off
     1          set du_EG_wz_RO_TerrasseRechts 0
     2          set du_EG_wz_RO_TerrasseRechts 30
     3          set du_EG_wz_RO_TerrasseRechts on
   Helper:
     last_timer 1
     sleepdevice duRolloMaster
     sleeptimer -1
   Internals:
   Readings:
     0           duRolloMaster:state EG_dr_TS_Terrasse:luminosity
     1           duPVRollo:state mySL:Pac_avg
     2           duPVRollo:state mySL:Pac_avg
     all         duRolloMaster:state EG_dr_TS_Terrasse:luminosity duPVRollo:state mySL:Pac_avg
   Realtime:
     0          22:10:00
   State:
   Time:
     0          22:10:00
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:
   room       LichtRollo
   wait       10:10:10

   
Kann doch eigentlich nicht so schwer sein.
Was mache ich denn erst mit einem Rollo, wo noch ein Türkontakt eine Rolle spielt?
Da soll der Rollo dann hoch gehen, wenn die Tür aufgeht und wieder runter, wenn die Tür geschlossen wird und die Bedingungen (dunkel oder nach 22:10) zutreffen.
Aber das kommt danach, wenn der "einfache" Fall gelöst ist.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 07 Dezember 2014, 20:52:00
Jetzt verstehe ich gar nichts mehr.
Eben ging das Doif mal auf cmd_1 aber dann wieder auf cmd_4 obwohl ich nichts gemacht habe.
Irgendwie hat der nach den wohl im wait 10:10:10 angegebenen 10 Sekunden gedacht zu schalten.

Nur warum cmd_4?
Der dummy Master ist nach wie vor auf "an"
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 07 Dezember 2014, 20:58:18
Selbstgespräch nächster Teil:

Ohne den DOELSE Teil, ohne wait und mit do "always" scheint es zu klappen.
Jetzt müsste ich nur noch verstehen warum bzw warum es mit dem DOELSE nicht so klappt wie gedacht.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 Dezember 2014, 08:31:15
Zitat von: maxritti am 07 Dezember 2014, 20:58:18
Selbstgespräch nächster Teil:

Ohne den DOELSE Teil, ohne wait und mit do "always" scheint es zu klappen.
Jetzt müsste ich nur noch verstehen warum bzw warum es mit dem DOELSE nicht so klappt wie gedacht.

do always in Verbindung mit zyklisch sendenden Sensoren, hier vermutlich: EG_dr_TS_Terrasse:luminosity, ist wenig sinnvoll.

Wenn man keinen Trigger bei solchen Sensoren haben will, dann muss man sie mit ReadingsVal(..) in der Bedingung angeben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 Dezember 2014, 08:33:49
Zitat von: maxritti am 07 Dezember 2014, 20:58:18
Selbstgespräch nächster Teil:

Ohne den DOELSE Teil, ohne wait und mit do "always" scheint es zu klappen.
Jetzt müsste ich nur noch verstehen warum bzw warum es mit dem DOELSE nicht so klappt wie gedacht.
Damian war mal wieder schneller, aber nur weil ich es etwas ausführlicher geschrieben habe:  ;)

Du hast in Deinen Konditionen verschiedene Bedingungen drin. Wann immer ein dazu passendes Event auftritt, wird das DOIF getriggert, also beispielsweise wenn [mySL:Pac_avg] irgendeinen Wert meldet. Dann werden die Konditionen getestet, in denen dieser Wert enthalten ist. Ist keine der Konditionen wahr (weil der Wert zu hoch/zu niedrig ist oder eine verknüpfte Bedingung nicht stimmt), fällt DOIF auf den DOELSE-Fall zurück.

Genau aus diesem Grund ist (IMHO) eine der goldenen Regeln bei DOIFs, auf DOELSE möglichst zu verzichten bzw. es nur in Ausnahmefällen einzusetzen, wo man die Auswirkung genau überblicken und Seiteneffekte ausschließen kann. Und Deine Beschreibung passt genau zu solchen unerwarteten Seiteneffekten.

Ansonsten kannst Du Dir bei jeder Bedingung überlegen, ob sie wirklich eine Auswertung des DOIFs triggern soll. In einer zukünftigen Version wird es wohl die Möglichkeit geben, Bedingungen in DOIF-Notation als nicht-triggernd zu kennzeichnen. Bis dahin kann man anstelle der DOIF-Notation ganz klassisch Value oder ReadingsVal verwenden, um denselben Effekt zu erreichen.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 08 Dezember 2014, 09:38:39
Hallo Damian.
Habe heute wieder einmal meine DOIF´s geprüft und siehe da einige Fehlermeldungen entdeckt.
bis jetzt hatte folgendes geklappt:


([Ueberschuss] > 1000 and [Absorbtionsphase] eq "Open" and [08:00-17:00]) (set Batterielader_aus off)


heute sah ich die meldung

internal doesnt exist [Ueberschuss:STATE]


habe jetzt meine DEF dahingehend geändert
([Ueberschuss:state] > 1000 and [Absorbtionsphase] eq "Open" and [08:00-17:00]) (set Batterielader_aus off)


und jetzt ist die fehlermeldung weg.
hat das mit gestrigem update was zu tun?

weiters wollte ich fragen wo genau man die Commandref zu DOIF finden kann?
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 08 Dezember 2014, 09:44:03
Danke Euch beiden.
Ein wenig muss ich über die Sache wohl noch nachdenken.

Zitat von: Damian am 08 Dezember 2014, 08:31:15
do always in Verbindung mit zyklisch sendenden Sensoren, hier vermutlich: EG_dr_TS_Terrasse:luminosity, ist wenig sinnvoll.

Wenn man keinen Trigger bei solchen Sensoren haben will, dann muss man sie mit ReadingsVal(..) in der Bedingung angeben.

Gruß

Damian

Das verwirrt mich jetzt ein wenig.
Was heisst denn, wenn ich keinen Trigger von dem Device in das DOIF haben will, wenn ich ReadingsVal verwende?
Denn ausgewertet wird das ReadingsVal doch auch, so dass es als Bedinung gilt?
Oder wird das dann nicht ausgewertet? Das würde aber dann doch heissen, dass ich es erst gar nicht in die Bedingung mit aufnehmen müsste wenn es eh nicht ausgewertet wird.


Zitat von: Brockmann am 08 Dezember 2014, 08:33:49
Damian war mal wieder schneller, aber nur weil ich es etwas ausführlicher geschrieben habe:  ;)

Du hast in Deinen Konditionen verschiedene Bedingungen drin. Wann immer ein dazu passendes Event auftritt, wird das DOIF getriggert, also beispielsweise wenn [mySL:Pac_avg] irgendeinen Wert meldet. Dann werden die Konditionen getestet, in denen dieser Wert enthalten ist. Ist keine der Konditionen wahr (weil der Wert zu hoch/zu niedrig ist oder eine verknüpfte Bedingung nicht stimmt), fällt DOIF auf den DOELSE-Fall zurück.

Genau aus diesem Grund ist (IMHO) eine der goldenen Regeln bei DOIFs, auf DOELSE möglichst zu verzichten bzw. es nur in Ausnahmefällen einzusetzen, wo man die Auswirkung genau überblicken und Seiteneffekte ausschließen kann. Und Deine Beschreibung passt genau zu solchen unerwarteten Seiteneffekten.

Ansonsten kannst Du Dir bei jeder Bedingung überlegen, ob sie wirklich eine Auswertung des DOIFs triggern soll. In einer zukünftigen Version wird es wohl die Möglichkeit geben, Bedingungen in DOIF-Notation als nicht-triggernd zu kennzeichnen. Bis dahin kann man anstelle der DOIF-Notation ganz klassisch Value oder ReadingsVal verwenden, um denselben Effekt zu erreichen.

Das hatte ich mir jetzt auch mal als DOIF-Gesetz gemacht, im wesentlichen keinen DOELSE zu implementieren.
Nur so recht verstanden habe ich es nicht, warum der DOELSE Zweig gestern abend überhaupt als Ergebis kommt.

Ganz naiv hätte ich halt gedacht, dass MasterDummy "an", draussen dunkel und oder [22:30] ausreichen würde damit das erste Command ausgeführt wird.
Aber vielleicht gehe ich das heute Abend noch mal in Ruhe an.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 Dezember 2014, 10:45:11
Zitat von: maxritti am 08 Dezember 2014, 09:44:03
Nur so recht verstanden habe ich es nicht, warum der DOELSE Zweig gestern abend überhaupt als Ergebis kommt.

Beispiel:
DOELSEIF (([duPVRollo:state] eq "an") and ([mySL:Pac_avg] >= 2100))
Wenn Du so definierst, wird diese Kondition jedes Mal angestossen, wenn das Reading Pac_avg aktualisiert wird. Ist der Wert dabei < 2100 scheitert die Kondition. DOIF schaut, ob weitere Konditionen mit diesem Reading vorhanden sind. Sind keine da oder scheitern die ebenfalls, verzweigt es zum DOELSE-Fall.

Gegenbeispiel:
DOELSEIF ([duPVRollo:state] eq "an" and ReadingsVal("mySL","Pac_avg",0) >= 2100)
Bei dieser Variante wird die Kondition nur getriggert, wenn sich am Status von duPVRollo etwas ändert. Änderungen am Reading Pac_avg hingegen triggern das DOIF nicht. Diese Bedingung wird nur zusätzlich geprüft, wenn die Kondition durch duPVRollo getriggert wurde.

Vielleicht ist der Unterschied nun etwas klarer. Grundsätzlich kann man sagen: Bedingungen mit [] triggern und werden geprüft, Bedingungen ohne [] triggern nicht und werden nur geprüft, wenn von anderer Seite getriggert wurde.

Wobei es prinzipiell kein Problem ist, alle Bedingungen auch triggern zu lassen. Nur dann muss man eben mit einem DOELSE sehr aufpassen, da das DOIF bei JEDEM Event mit einer triggernden Bedingung etwa tut. Entweder führt es das passende DOIF bzw. DOELSEIF aus oder - wenn keines davon passt - kommt das DOELSE zur Ausführung, auch wenn das oftmals nicht gewollt ist.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 08 Dezember 2014, 11:10:42
Brockmann ich danke Dir.

Die Beispiele sind prima und jetzt sollte es auch bei mir angekommen sein.  :)
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 08 Dezember 2014, 13:58:05
Zitat von: Brockmann am 08 Dezember 2014, 10:45:11
Vielleicht ist der Unterschied nun etwas klarer. Grundsätzlich kann man sagen: Bedingungen mit [] triggern und werden geprüft, Bedingungen ohne [] triggern nicht und werden nur geprüft, wenn von anderer Seite getriggert wurde.

ich lese ja ständig mit und sage auch wiedereinmal Danke für die Super Erklärung, aber dies nun letztendlich so zu begreifen braucht wohl etwas mehr, denn auch ich habe elendig viele Fehler gemacht...
Aber momentan laufen meine DOIFs mit Hilfe von Brockmann  ;D weiter so, vllt begreife ich es ja nochmal
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 Dezember 2014, 15:27:53
Ich habe gerade ein sonderbares Verhalten in Kombination mit dem wait-Attribut festgestellt.

Ich habe ein etwas komplexeres DOIF mit fünf DOELSEIFs, also sechs Konditionen und sechs Aktionen. Dazu gehört:
attr MeinDOIF wait 300:0:0:0:300:0

Nun passiert folgendes: Zwei verschiedene Konditionen des DOIFs werden praktisch zeitgleich durch zwei verschiedene Readings getriggert und beide Konditionen sind insgesamt wahr. Ich gebe zu, dass ist etwas unglücklich und lässt sich sicher irgendwie vermeiden, nur habe ich es bei der Komplexität des DOIFs bislang einfach übersehen.
Die erste Kondition hat ein 300s-wait, so dass das DOIF pausiert. Die zweite getroffene Kondition wird ebenfalls nicht ausgeführt, obwohl sie ein 0s-wait hat.
Nach ca. 20 Sekunden ändert sich eine Bedingung der ersten Kondition, so dass diese nun abgebrochen wird. Das klappt auch, zumindest wird die entsprechende Aktion zu keinem Zeitpunkt ausgeführt.

ABER: Pünktlich 300 Sekunden nach dem ursprünglichen Triggern wird nun die Aktion der zweiten getroffenen Kondition ausgeführt, deren wait mit 0 definiert ist.

In diesem Szenario mit zwei Instanzen eines DOIFs in der Queue scheint mir irgendwie die zweite Instanz den wait-Intervall der ersten zu "erben"?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 Dezember 2014, 16:18:34
Zitat von: Brockmann am 08 Dezember 2014, 15:27:53
Ich habe gerade ein sonderbares Verhalten in Kombination mit dem wait-Attribut festgestellt.

Ich habe ein etwas komplexeres DOIF mit fünf DOELSEIFs, also sechs Konditionen und sechs Aktionen. Dazu gehört:
attr MeinDOIF wait 300:0:0:0:300:0

Nun passiert folgendes: Zwei verschiedene Konditionen des DOIFs werden praktisch zeitgleich durch zwei verschiedene Readings getriggert und beide Konditionen sind insgesamt wahr. Ich gebe zu, dass ist etwas unglücklich und lässt sich sicher irgendwie vermeiden, nur habe ich es bei der Komplexität des DOIFs bislang einfach übersehen.
Die erste Kondition hat ein 300s-wait, so dass das DOIF pausiert. Die zweite getroffene Kondition wird ebenfalls nicht ausgeführt, obwohl sie ein 0s-wait hat.
Nach ca. 20 Sekunden ändert sich eine Bedingung der ersten Kondition, so dass diese nun abgebrochen wird. Das klappt auch, zumindest wird die entsprechende Aktion zu keinem Zeitpunkt ausgeführt.

ABER: Pünktlich 300 Sekunden nach dem ursprünglichen Triggern wird nun die Aktion der zweiten getroffenen Kondition ausgeführt, deren wait mit 0 definiert ist.

In diesem Szenario mit zwei Instanzen eines DOIFs in der Queue scheint mir irgendwie die zweite Instanz den wait-Intervall der ersten zu "erben"?

Wenn du es reproduzieren kannst, dann kann ich da mal schauen. Prinzipiell, gibt es zu einem Zeitpunkt immer nur einen Wait-Timer.
Dieser kann gesetzt sein oder nicht. Wenn während der Wartezeit eine andere Bedingung zuschlägt, dann wird der wartende Timer gelöscht. Wenn bei der jeweiligen Bedingung ein Timer gesetzt wurde, dann wird wieder ein Timer gesetzt. Mehr Logik steckt da nicht dahinter. Es gibt keine mehreren Timer, die sich irgendwie beeinflussen könnten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 08 Dezember 2014, 19:04:21
Zitat von: Damian am 08 Dezember 2014, 16:18:34
Wenn du es reproduzieren kannst, dann kann ich da mal schauen. Prinzipiell, gibt es zu einem Zeitpunkt immer nur einen Wait-Timer.

Ich versuche mal ein leicht reproduzierbares Beispiel.

Folgendes DOIF:
define DI_test DOIF ([Datastore:test1] eq "test")(trigger global test1)
DOELSEIF ([Datastore:test2] eq "test")(trigger global test2)
attr DI_test wait 20:0


Dazu irgendein Dummy (im Beispiel Datastore) mit den Readings test1 und test2.

Dann den Befehl
setReading Datastore test1 test;setReading Datastore test2 test

Man kann die beiden Befehle auch nacheinander abschicken. Solange der zweite innerhalb des wait-Intervalls vom ersten erfolgt wird er (vorläufig) ignoriert.

Schickt man dann innerhalb des definierten wait-Intervalls (im Beispiel 20 Sekunden) hinterher
setReading Datastore test1 wasauchimmer
und macht so die erste Kondition nachträglich unwahr, wird plötzlich die Aktion der zweiten Kondition ausgeführt.

Die Events sehen dann beispielsweise so aus:
2014-12-08 17:28:38 DOIF DI_test wait_timer: 08.12.2014 17:28:58 cmd_1 Datastore
2014-12-08 17:28:38 dummy Datastore test1: test
2014-12-08 17:28:38 dummy Datastore test2: test
2014-12-08 17:28:46 DOIF DI_test wait_timer: no timer
2014-12-08 17:28:46 Global global test2
2014-12-08 17:28:46 DOIF DI_test cmd_nr: 2
2014-12-08 17:28:46 DOIF DI_test cmd_event: Datastore
2014-12-08 17:28:46 DOIF DI_test cmd_2
2014-12-08 17:28:46 dummy Datastore test1: bla
2014-12-08 17:29:00 CUL_HM CUL_HM_HM_CC_TC_201407_Climate 0

Um 17:28:46 habe ich das setReading Datastore test1 bla hinterhergeschickt und dadurch die erste (verzögerte) Kondition unwahr werden lassen. In dem Moment wird dann die Aktion der zweiten Kondition ausgeführt (Global global test2).

Kannst Du das nachvollziehen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 08 Dezember 2014, 20:43:14
Zitat von: Brockmann am 08 Dezember 2014, 19:04:21
Ich versuche mal ein leicht reproduzierbares Beispiel.

Folgendes DOIF:
define DI_test DOIF ([Datastore:test1] eq "test")(trigger global test1)
DOELSEIF ([Datastore:test2] eq "test")(trigger global test2)
attr DI_test wait 20:0


Dazu irgendein Dummy (im Beispiel Datastore) mit den Readings test1 und test2.

Dann den Befehl
setReading Datastore test1 test;setReading Datastore test2 test

Man kann die beiden Befehle auch nacheinander abschicken. Solange der zweite innerhalb des wait-Intervalls vom ersten erfolgt wird er (vorläufig) ignoriert.

Schickt man dann innerhalb des definierten wait-Intervalls (im Beispiel 20 Sekunden) hinterher
setReading Datastore test1 wasauchimmer
und macht so die erste Kondition nachträglich unwahr, wird plötzlich die Aktion der zweiten Kondition ausgeführt.

Die Events sehen dann beispielsweise so aus:
2014-12-08 17:28:38 DOIF DI_test wait_timer: 08.12.2014 17:28:58 cmd_1 Datastore
2014-12-08 17:28:38 dummy Datastore test1: test
2014-12-08 17:28:38 dummy Datastore test2: test
2014-12-08 17:28:46 DOIF DI_test wait_timer: no timer
2014-12-08 17:28:46 Global global test2
2014-12-08 17:28:46 DOIF DI_test cmd_nr: 2
2014-12-08 17:28:46 DOIF DI_test cmd_event: Datastore
2014-12-08 17:28:46 DOIF DI_test cmd_2
2014-12-08 17:28:46 dummy Datastore test1: bla
2014-12-08 17:29:00 CUL_HM CUL_HM_HM_CC_TC_201407_Climate 0

Um 17:28:46 habe ich das setReading Datastore test1 bla hinterhergeschickt und dadurch die erste (verzögerte) Kondition unwahr werden lassen. In dem Moment wird dann die Aktion der zweiten Kondition ausgeführt (Global global test2).

Kannst Du das nachvollziehen?

Ja, es verhält sich so wie programmiert. Das Problem ist, dass das Modul immer getriggert wird, wenn sich irgendetwas im devices ändert. Da bei dir beide Readings im gleichen Device stecken, wird durch "setReading Datastore test1 bla" eben auch die zweite Bedingung wegen Datastore getriggert und wenn sie wahr ist wird das Kommando ausgeführt.

Das Problem kannst du entzerren, wenn du verschiedene Devices nimmst.

Dieses Problem war insb. hier schon mal beim HM-Bewegungsmelder aufgefallen.

Das Modul bekommt das Device und das Event beim Trigger von FHEM übergeben. Es wird leider kein Reading explizit übergeben, es ist ein Bestandteil des Events und ist leider nicht immer eindeutig zu erkennen. Ich werde mir da noch etwas für die nächste Version einfallen müssen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Gisbert am 08 Dezember 2014, 22:25:43
Ich möchte, mit DOIF einen Schaltvorgang zwischen 2 Zeitpunkten ablaufen lassen. Dies läuft auch solange gut, solange beide Zeitpunkte in der Zukunft liegen. Liegt der linke Zeitpunkt vermeintlich in der Vergangenheit, wird als Zeitpunkt die Uhrzeit am folgenden Tag herangezogen. Damit ist Zeitabfrage natürlich nicht mehr möglich, da diese Bedingung nie erfüllt werden kann. Dasgleiche passiert auch bei Benutzung von sunrise_abs oder sunset_abs, die ich eigentlich lieber benutzt hätte.

Meine Frage: Wie schaffe ich es, dass sich die Zeitangaben auf den aktuellen Tag beziehen und nicht auf den nächsten Tag, sobald der Zeitpunkt in der Vergangenheit liegt?

Mein Code (sorry, dass ich dass nicht so schön einstellen kann, wie die anderen Forenmitglieder):

define Haustuer.Licht.AUS DOIF ([Haustuer.Licht] eq "on" and [Schalter.1] eq "on") (set Haustuer.Licht off) DOELSEIF ([08:20-16:40] and [Haustuer.Licht] eq "on") (set Haustuer.Licht off) DOELSEIF ([23:15-06:40] and [Haustuer.Licht] eq "on") (set Haustuer.Licht off)
attr Haustuer.Licht.AUS do always
attr Haustuer.Licht.AUS wait 150:10:270

Titel: Antw:neues Modul DOIF
Beitrag von: Gisbert am 08 Dezember 2014, 22:26:02
Ich möchte, mit DOIF einen Schaltvorgang zwischen 2 Zeitpunkten ablaufen lassen. Dies läuft auch solange gut, solange beide Zeitpunkte in der Zukunft liegen. Liegt der linke Zeitpunkt vermeintlich in der Vergangenheit, wird als Zeitpunkt die Uhrzeit am folgenden Tag herangezogen. Damit ist Zeitabfrage natürlich nicht mehr möglich, da diese Bedingung nie erfüllt werden kann. Dasgleiche passiert auch bei Benutzung von sunrise_abs oder sunset_abs, die ich eigentlich lieber benutzt hätte.

Meine Frage: Wie schaffe ich es, dass sich die Zeitangaben auf den aktuellen Tag beziehen und nicht auf den nächsten Tag, sobald der Zeitpunkt in der Vergangenheit liegt?

Mein Code (sorry, dass ich dass nicht so schön einstellen kann, wie die anderen Forenmitglieder):

define Haustuer.Licht.AUS DOIF ([Haustuer.Licht] eq "on" and [Schalter.1] eq "on") (set Haustuer.Licht off) DOELSEIF ([08:20-16:40] and [Haustuer.Licht] eq "on") (set Haustuer.Licht off) DOELSEIF ([23:15-06:40] and [Haustuer.Licht] eq "on") (set Haustuer.Licht off)
attr Haustuer.Licht.AUS do always
attr Haustuer.Licht.AUS wait 150:10:270

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 Dezember 2014, 07:27:12
Moin,

Zitat von: Damian am 08 Dezember 2014, 20:43:14
Ja, es verhält sich so wie programmiert. Das Problem ist, dass das Modul immer getriggert wird, wenn sich irgendetwas im devices ändert. Da bei dir beide Readings im gleichen Device stecken, wird durch "setReading Datastore test1 bla" eben auch die zweite Bedingung wegen Datastore getriggert und wenn sie wahr ist wird das Kommando ausgeführt.
OK, das ist schon mal eine wichtige Erkenntnis. War mir bislang entgangen.

Das ist aber nur das halbe Problem. Denn mich stört ebenso, dass beim
setReading Datastore test1 test;setReading Datastore test2 test
das zweite setReading bzw. die dazu gehörende Kondition<>Aktion im DOIF komplett ignoriert wird. Denn das würde bedeuten, dass man bei Verwendung des wait-Attributs innerhalb eines DOIFs nur Konditionen haben darf, die in einem exklusiven Oder-Verhältnis stehen. Andernfalls bestünde die Gefahr, dass das DOIF wie in diesem Beispiel unter Umständen nicht reagiert, wenn es reagieren sollte.

Nun gebe ich zu, dass alleine schon DOELSEIF ein Exklusiv-Oder impliziert, aber ich war irgendwie davon ausgegangen, dass DOIF sich in dieser Hinsicht etwas toleranter verhalten würde.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Dezember 2014, 08:48:02
Zitat von: Brockmann am 09 Dezember 2014, 07:27:12
Moin,
OK, das ist schon mal eine wichtige Erkenntnis. War mir bislang entgangen.

Das ist aber nur das halbe Problem. Denn mich stört ebenso, dass beim
setReading Datastore test1 test;setReading Datastore test2 test
das zweite setReading bzw. die dazu gehörende Kondition<>Aktion im DOIF komplett ignoriert wird. Denn das würde bedeuten, dass man bei Verwendung des wait-Attributs innerhalb eines DOIFs nur Konditionen haben darf, die in einem exklusiven Oder-Verhältnis stehen. Andernfalls bestünde die Gefahr, dass das DOIF wie in diesem Beispiel unter Umständen nicht reagiert, wenn es reagieren sollte.

Nun gebe ich zu, dass alleine schon DOELSEIF ein Exklusiv-Oder impliziert, aber ich war irgendwie davon ausgegangen, dass DOIF sich in dieser Hinsicht etwas toleranter verhalten würde.

Ich weiß nicht ob ich dich richtig verstanden habe, aber ob wait oder nicht wait, das Abarbeiten der Bedingungen ist immer gleich.

Naja, DOIF habe ich bewusst dem if-then-else-elseif Konstrukt in höheren Sprachen nachgebildet und genau so verhält sich auch dieses Modul. Zitat aus der Commandref: "Die Angaben werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch ein Device beinhalten (Angaben in eckigen Klammern)."
 
Natürlich hätte man es auch anders programmieren können, aber dann wären Missverständnisse vorprogrammiert, denn nicht wenige FHEM-User können auch programmieren und denen sind solche if-Konstrukten vertraut.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 09 Dezember 2014, 11:50:20
Zitat von: Damian am 06 Dezember 2014, 16:50:39
Problem gefixed und eingecheckt. Korrektur ab morgen per FHEM-Update.

Gruß

Damian
Hallo Damian,
danke für den schnellen Support. Habe gestern das Update gemacht und alles läuft, wie es soll!
Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: chriz am 09 Dezember 2014, 15:14:37
Danke für dieses tolle Modul!

Ich versuche momentan einige Notifies auf DOIF umzustellen, wie z.B. das Notify meiner 4 Fernbedienungen:


define act_on_Taste1 notify (RC1_TASTE1:Long.1-.*|RC2_TASTE1:Long.1-.*|RC3_TASTE1:Long.1-.*|RC4_TASTE1:Long.1-.*) set USW2_GANG on-for-timer 1



Kann ich stattdessen Folgendes für DOIF verwenden, oder muss ich ggf. etwas ändern?


define DI_act_on_Taste1 DOIF ([RC1_TASTE1] =~ "Long.1-")|([RC2_TASTE1] =~ "Long.1-")|([RC3_TASTE1] =~ "Long.1-")|([RC4_TASTE1] =~ "Long.1-") (set USW2_GANG on-for-timer 1)



Danke
Chris
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 Dezember 2014, 15:28:32
Zitat von: Damian am 09 Dezember 2014, 08:48:02
Ich weiß nicht ob ich dich richtig verstanden habe, aber ob wait oder nicht wait, das Abarbeiten der Bedingungen ist immer gleich.
Nee, wir reden noch so ein bißchen aneinander vorbei, aber das liegt auch an mir. Ich kämpfe noch etwas mit dem Verständnis.

Können wir uns auf folgende Aussage einigen?
"Ein laufender wait-Timer aus einer Kondition1 wird abgebrochen, wenn eine andere Kondition2 desselben DOIFs getriggert wird und wahr ist, auch wenn die Kondition1, die den wait-Timer ursprünglich ausgelöst hat, zu diesem Zeitpunkt immer noch wahr ist."

Beispiel:

define DI_test DOIF ([test1] eq "test")(trigger global test1)
DOELSEIF ([test2] eq "test")(trigger global test2)
attr DOIF wait 20:0


test1 und test2 sind jeweils Dummys.
set test1,test2 test => Die Aktion trigger global test2 wird sofort ausgeführt, trigger global test1 gar nicht.
set test2,test1 test => Die Aktion trigger global test2 wird sofort ausgeführt, trigger global test1 20 Sekunden später.

Ist das so korrekt?

Wohlgemerkt: Ich will gar nicht darauf hinaus, dass hier ein "Fehler" in DOIF vorliegen würde. Ich halte es nur für eine Beschränkung, bei der man darüber diskutieren kann, ob sie notwendig, sinnvoll oder unvermeidlich ist.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 Dezember 2014, 15:31:34
Zitat von: chriz am 09 Dezember 2014, 15:14:37
Kann ich stattdessen Folgendes für DOIF verwenden, oder muss ich ggf. etwas ändern?


define DI_act_on_Taste1 DOIF ([RC1_TASTE1] =~ "Long.1-")|([RC2_TASTE1] =~ "Long.1-")|([RC3_TASTE1] =~ "Long.1-")|([RC4_TASTE1] =~ "Long.1-") (set USW2_GANG on-for-timer 1)


eher so:

define DI_act_on_Taste1 DOIF ([RC1_TASTE1] =~ "Long.1-" or [RC2_TASTE1] =~ "Long.1-" or [RC3_TASTE1] =~ "Long.1-" or [RC4_TASTE1] =~ "Long.1-") (set USW2_GANG on-for-timer 1)

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Dezember 2014, 17:52:39
Zitat von: Brockmann am 09 Dezember 2014, 15:28:32
Nee, wir reden noch so ein bißchen aneinander vorbei, aber das liegt auch an mir. Ich kämpfe noch etwas mit dem Verständnis.

Können wir uns auf folgende Aussage einigen?
"Ein laufender wait-Timer aus einer Kondition1 wird abgebrochen, wenn eine andere Kondition2 desselben DOIFs getriggert wird und wahr ist, auch wenn die Kondition1, die den wait-Timer ursprünglich ausgelöst hat, zu diesem Zeitpunkt immer noch wahr ist."

Beispiel:

define DI_test DOIF ([test1] eq "test")(trigger global test1)
DOELSEIF ([test2] eq "test")(trigger global test2)
attr DOIF wait 20:0


test1 und test2 sind jeweils Dummys.
set test1,test2 test => Die Aktion trigger global test2 wird sofort ausgeführt, trigger global test1 gar nicht.
set test2,test1 test => Die Aktion trigger global test2 wird sofort ausgeführt, trigger global test1 20 Sekunden später.

Ist das so korrekt?

Wohlgemerkt: Ich will gar nicht darauf hinaus, dass hier ein "Fehler" in DOIF vorliegen würde. Ich halte es nur für eine Beschränkung, bei der man darüber diskutieren kann, ob sie notwendig, sinnvoll oder unvermeidlich ist.

Es ist alles so, wie du es beschreibst. Im ersten Fall wird der Timer zum Ausführen des ersten Kommandos gesetzt und durch das Eintreffen der zweiten des Triggers der zweiten Bedingung unterbrochen und das zweite Kommando wird ausgeführt.

Im zweiten Fall wird zuerst die zweite Bedingung getrigger und ausgeführt, da kein Waittimer definiert ist, dann folgt der zweite Trigger der ersten Bedingung und führt zur Ausführung des ersten Kommandos nach 20 Sekunden, wenn er nicht unterbrochen wird, wie z. B im ersten Beispiel.

Auch wenn die erste Bedingung wahr ist, ist sie durch den zweiten Trigger nicht mehr aktuell. Genau so wäre es auch ohne Wait, nur da hätte das erste Kommando bereits geschaltet. Wichtig ist natürlich noch der Zusatz aus der Commandref:"... Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch ein Device beinhalten (Angaben in eckigen Klammern)." Heißt hier, wenn der Trigger zum Device der zweiten Bedingung kommt, wird die erste Bedingung nicht ausgewertet, weil dort ein anderes Devices angegeben ist.

Für mich heißt das, jede andere Verhalten des Moduls entspreche nicht dem, was in der Commandref steht.

Du kannst mir gerne ein konkretes Beispiel nennen, was sich so verhält, wie du es für sinnvoll erachtest, ohne, dass es im Widerspruch zur Commandref des Moduls steht.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 09 Dezember 2014, 22:08:40
Hallo,
ich habe eine Frage zur Zeitsteuerung in Verbindung mit DOIF
in der commandRef steht:

Nur am Wochenende bzw. an Feiertagen lt. holiday-Datei (7 entspricht $we):
define di_radio DOIF ([08:00-10:00|7]) (set radio on) DOELSE (set radio off)
Nur an Arbeitstagen (8 ist das Gegenteil von 7, entspricht !$we):
define di_radio DOIF ([08:00-10:00|8]) (set radio on) DOELSE (set radio off)


bedeutet dies, dass "7" und "8" bzw. die Variable $we und !$we) automatisch für alle Feiertage in der holiday Datei gesetzt wird, oder muss man da noch irgendetwas in fhem konfiguriren. zumindest muss doch das holiday Modul geladen sein, oder?

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Dezember 2014, 22:20:08
Zitat von: Spartacus am 09 Dezember 2014, 22:08:40
Hallo,
ich habe eine Frage zur Zeitsteuerung in Verbindung mit DOIF
in der commandRef steht:

Nur am Wochenende bzw. an Feiertagen lt. holiday-Datei (7 entspricht $we):
define di_radio DOIF ([08:00-10:00|7]) (set radio on) DOELSE (set radio off)
Nur an Arbeitstagen (8 ist das Gegenteil von 7, entspricht !$we):
define di_radio DOIF ([08:00-10:00|8]) (set radio on) DOELSE (set radio off)


bedeutet dies, dass "7" und "8" bzw. die Variable $we und !$we) automatisch für alle Feiertage in der holiday Datei gesetzt wird, oder muss man da noch irgendetwas in fhem konfiguriren. zumindest muss doch das holiday Modul geladen sein, oder?

Christian

Du musst unter Global das Attribut holiday2we auf deine holiday-Datei setzen. Bei mir steht da holidy2we nrw. Damit wird $we nicht nur am Wochenende wahr, sondern auch an Feiertagen. Das hat erst mal nichts mit DOIF zu tun. Da aber DOIF die Variable auswertet, gilt dann bei 7 nicht nur Wochenende, sondern auch ein Feiertag. 8 ist das Gegenteil von 7.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 09 Dezember 2014, 22:22:18
Hallo,
ah! ok. Danke, dass wusste ich nicht!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 10 Dezember 2014, 01:25:39
Ich zacker gerade an so einen Ausdruck rum:

([{sunset("REAL")}-22:35|01234]) (mach dies) DOELSE ([{sunset("REAL")}-(23:30)|56] (mach das)

Bekomme dann im Log so was:

Error: {sunset("REAL")}-23 has no TYPE

Wo ist da der Denkfehler?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Dezember 2014, 07:53:23
Zitat von: dieda am 10 Dezember 2014, 01:25:39
Ich zacker gerade an so einen Ausdruck rum:

([{sunset("REAL")}-22:35|01234]) (mach dies) DOELSE ([{sunset("REAL")}-(23:30)|56] (mach das)

Bekomme dann im Log so was:

Error: {sunset("REAL")}-23 has no TYPE

Wo ist da der Denkfehler?

([{sunset("REAL")}-22:35|01234]) (mach dies) DOELSE ([{sunset("REAL")}-23:30|56]) (mach das)

Du musst schon auf die korrekte Klammerung achten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Dezember 2014, 08:59:43
Zitat von: Damian am 09 Dezember 2014, 17:52:39
Du kannst mir gerne ein konkretes Beispiel nennen, was sich so verhält, wie du es für sinnvoll erachtest, ohne, dass es im Widerspruch zur Commandref des Moduls steht.
Mich interessiert primär, dass ich die Funktionsweise richtig verstehe und ob es eine bewusste Design-Entscheidung war, dies so zu machen oder es vielleicht technisch auch gar nicht anders machbar ist.
Im letzteren Fall muss man halt damit leben. Im ersteren Fall würde ich die Entscheidung für unglücklich halten.

Ein Szenario, bei dem ein laufender wait-Timer abgebrochen wird, nur weil eine andere Kondition wahr wird (ohne dass die auslösende Kondition deshalb unwahr wird), ist im Grunde genommen immer ein ungewollter Seiteneffekt. Denn wenn ich WOLLTE, dass irgendein Ereignis meinen laufenden wait-Timer abbricht, dann hätte ich das entsprechende Reading von vorne herein in die Kondition einfügen sollen, die den wait-Timer startet. Dann würde diese Kondition beim Eintreffen des Ereignisses unwahr und der Timer deshalb abgebrochen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Dezember 2014, 12:14:57
Zitat von: Brockmann am 10 Dezember 2014, 08:59:43
Mich interessiert primär, dass ich die Funktionsweise richtig verstehe und ob es eine bewusste Design-Entscheidung war, dies so zu machen oder es vielleicht technisch auch gar nicht anders machbar ist.
Im letzteren Fall muss man halt damit leben. Im ersteren Fall würde ich die Entscheidung für unglücklich halten.

Ein Szenario, bei dem ein laufender wait-Timer abgebrochen wird, nur weil eine andere Kondition wahr wird (ohne dass die auslösende Kondition deshalb unwahr wird), ist im Grunde genommen immer ein ungewollter Seiteneffekt. Denn wenn ich WOLLTE, dass irgendein Ereignis meinen laufenden wait-Timer abbricht, dann hätte ich das entsprechende Reading von vorne herein in die Kondition einfügen sollen, die den wait-Timer startet. Dann würde diese Kondition beim Eintreffen des Ereignisses unwahr und der Timer deshalb abgebrochen.
Es war von mir eine bewusste Entscheidung wait mit Reset zu realisieren. Ich wollte in erster Linie eine Art watchdog-Funktionaltät haben. Tue etwas nach einer gewissen Zeit, wenn der Zustand sich nicht ändert. Der andere Fall tue etwas, wenn eine gewisse Zeit nichts passiert steht ja bereits auf der todo-Liste.

Ein weiteres Problem, welches z. T. sehr abenteuerlich gelöst wird, ist das Setzen von at-Timern, die man dann löschen muss, wenn sich während der Wartezeit etwas ändert und der Timer seine Bedeutung verliert. Auch dafür ist wait eine Erleichterung, weil man sich um das Löschen als Anwender nicht kümmern muss.

Möchte man dagegen den einfachen Fall haben, tue etwas auf jeden Fall nach X-Sekunden, dann braucht man nur einen at-Timer zu setzen oder sonst ein Sleep (natürlich nicht in Kombination mit DOIF). Dieser Fall ist aus meiner Sicht, aber oft wenig sinnvoll. Denn wenn ein Ereignis während der Wartezeit mehrfach vorkommt, dann habe ich mehrere Timer, die mehrfach die gleiche Aktion ausführen - wozu?

Von daher ist wait nicht mit at bzw. sleep gleichzusetzen - das war von Anfang an so von mir beabsichtigt gewesen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Dezember 2014, 13:49:51
Zitat von: Damian am 10 Dezember 2014, 12:14:57
Es war von mir eine bewusste Entscheidung wait mit Reset zu realisieren. Ich wollte in erster Linie eine Art watchdog-Funktionaltät haben. Tue etwas nach einer gewissen Zeit, wenn der Zustand sich nicht ändert. Der andere Fall tue etwas, wenn eine gewisse Zeit nichts passiert steht ja bereits auf der todo-Liste.
Wir reden immer noch etwas aneinander vorbei. Ich versuche es mal, auf den Punkt zu bringen.
Du sagst:
Wenn sich bei laufendem wait-Timer der Zustand eines DOIFs ändert, muss die Kondition, die den wait-Timer gestartet hat, unwahr geworden sein. Also wird der Timer gelöscht.

Ich sage:
Wenn sich bei laufendem wait-Timer der Zustand eines DOIFs ändert, muss die Kondition, die den wait-Timer gestartet hat, nicht automatisch unwahr geworden sein. Deshalb sollte der Timer nicht gelöscht werden. Ein laufender Timer sollte nur gelöscht werden, wenn die auslösenden Kondition erneut getriggert wurde und dadurch tatsächlich unwahr geworden ist.

Zitat von: Damian am 10 Dezember 2014, 12:14:57
Möchte man dagegen den einfachen Fall haben, tue etwas auf jeden Fall nach X-Sekunden, dann braucht man nur einen at-Timer zu setzen oder sonst ein Sleep (natürlich nicht in Kombination mit DOIF). Dieser Fall ist aus meiner Sicht, aber oft wenig sinnvoll. Denn wenn ein Ereignis während der Wartezeit mehrfach vorkommt, dann habe ich mehrere Timer, die mehrfach die gleiche Aktion ausführen - wozu?

Von daher ist wait nicht mit at bzw. sleep gleichzusetzen - das war von Anfang an so von mir beabsichtigt gewesen.

Es geht mir nicht um den einfachen Fall "tue etwas nach x Sekunden". Selbstverständlich sollte ein wait-Timer gelöscht werden, wenn die Voraussetzungen dafür nicht mehr gegeben sind. Aber eben nur dann. Und dass das dazugehörige DOIF seinen Status ändert bedeutet eben - zumindest rein logisch - nicht, dass die Voraussetzungen für den Timer nicht mehr gegeben sind.
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 10 Dezember 2014, 14:09:24
Zitat von: Damian am 10 Dezember 2014, 07:53:23
([{sunset("REAL")}-22:35|01234]) (mach dies) DOELSE ([{sunset("REAL")}-23:30|56]) (mach das)

Du musst schon auf die korrekte Klammerung achten.

Gruß

Damian

Da habe ich wohl einen Fehler beim Posten gemacht. Die Klammer steht da. Werde es heute Abend nochmals so durchlaufen lassen und mich dann melden.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Dezember 2014, 16:12:05
Zitat von: Brockmann am 10 Dezember 2014, 13:49:51
Wir reden immer noch etwas aneinander vorbei. Ich versuche es mal, auf den Punkt zu bringen.
Du sagst:
Wenn sich bei laufendem wait-Timer der Zustand eines DOIFs ändert, muss die Kondition, die den wait-Timer gestartet hat, unwahr geworden sein. Also wird der Timer gelöscht.

Ich sage:
Wenn sich bei laufendem wait-Timer der Zustand eines DOIFs ändert, muss die Kondition, die den wait-Timer gestartet hat, nicht automatisch unwahr geworden sein. Deshalb sollte der Timer nicht gelöscht werden. Ein laufender Timer sollte nur gelöscht werden, wenn die auslösenden Kondition erneut getriggert wurde und dadurch tatsächlich unwahr geworden ist.
ok. Das würde aber bedeuten, dass man mehrere Timer bräuchte, denn die zweite und dritte und usw. Bedingung kann ja auch ein wait haben. Das würde einen nicht unerheblichen Verwaltungsaufwand bedeuten, da zukünftig auch noch wait´s zwischen den Kommandos dazukommen sollen. Ich möchte eigentlich die Sache möglichst einfach halten und mit einem Timer auskommen. Wenn mehrere Bedingungen bzgl. der Timer unabhängig voneinander funktionieren sollen, dann muss man sie halt in mehrere DOIFs aufteilen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 10 Dezember 2014, 16:49:15
Habe da noch eine weitere Frage:

Bei meinem DOIF's für einen Trockner bekomme ich solche Meldungen:
Zitat2014.12.10 16:42:55 1: PERL WARNING: Argument "1840.85 W" isn't numeric in numeric gt (>) at (eval 8682) line 1.

Anbei der passenden Screenshot des Trockners. Es handelt sich um Fritz DECT-Dosen.

Definition des DOIF
([Trockner:power]>4) (set Trockner_betrieb on) DOELSEIF ([Trockner:power]<3) (set Trockner_betrieb off)

Internals:
   DEF        ([Trockner:power]>4) (set Trockner_betrieb on) DOELSEIF ([Trockner:power]<3) (set Trockner_betrieb off)
   NAME       Trockner_DI
   NR         828
   NTFY_ORDER 50-Trockner_DI
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2014-12-10 16:49:55   cmd_event       Trockner
     2014-12-10 16:49:55   cmd_nr          1
     2014-12-10 16:48:55   e_Trockner_power 1883.91 W
     2014-12-10 16:49:55   state           cmd_1
     2014-12-10 16:49:55   wait_timer      no timer
   Condition:
     0          ReadingValDoIf('Trockner','power','')>4
     1          ReadingValDoIf('Trockner','power','')<3
   Devices:
     0           Trockner
     1           Trockner
     all         Trockner
   Do:
     0          set Trockner_betrieb on
     1          set Trockner_betrieb off
   Helper:
     last_timer 0
     sleepdevice Trockner
     sleeptimer -1
   Internals:
   Readings:
     0           Trockner:power
     1           Trockner:power
     all         Trockner:power
   State:
   Timerfunc:
Attributes:
   do         always
        wait       60:300
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 10 Dezember 2014, 18:46:01
Hallo,
ich mal wieder ein Brett vorm Kopf und weiß nicht so recht, wie ich die neue Anforderung am Besten einbauen soll!

Ich habe hier wieder mein DOIF welches meine Eingangsbeleuchtung in Abhängigkeit des Reedkontakts an der Haustür und der Lichschranke in der Zuwegung steuert. Silverster wird dann für 2h auf Dauerlich geschaltet. Das funzt soweit auch ganz gut.

define di.02.EI.ss.SA.Licht DOIF ((([EG.ss.TK.Haustuer:buttons] eq "pressed") or \
   [EG.ss.LS.Eingang:buttons] eq "pressed") and [tw.01.Daemmerung:twilight] <55 or \
   [00:00-02:00] and [hl.01.Feiertag:state] eq "Silvester")\
   (set EI.ss.SA.Licht on)\
DOELSEIF\
(([EG.ss.TK.Haustuer:buttons] eq "released" or \
   [EG.ss.LS.Eingang:buttons] eq "released") and [hl.01.Feiertag:state] ne "Silvester" )\
   (set EI.ss.SA.Licht off)\
DOELSEIF \
  ([Notaus] eq "on" and [hl.01.Feiertag:state] ne "Silvester")
attr di.02.EI.ss.SA.Licht alias autom. Eingangslicht
attr di.02.EI.ss.SA.Licht cmdState on|off|off
attr di.02.EI.ss.SA.Licht disable 0
attr di.02.EI.ss.SA.Licht room 05-Eingang
attr di.02.EI.ss.SA.Licht wait 0:120:0
#
#
# Email senden, wenn Tür länger als 10min auf steht
#
define di.03.EI.ss.SA.Licht DOIF ([EG.ss.TK.Haustuer:buttons] eq "pressed") ({eMail('muster@mann.de','Warnung','Haustür steht offen')}, \
set EI.ss.SA.Licht off, set Notaus on)\

attr di.03.EI.ss.SA.Licht alias Warnung Eingang
attr di.03.EI.ss.SA.Licht cmdState active
attr di.03.EI.ss.SA.Licht room 05-Eingang
attr di.03.EI.ss.SA.Licht wait 600


Nun habe ich neuerdings einen Taster im Innenbereich, der unabhängig vom DOIF das Licht ein/aus schalten soll, bzw. ein Langdruck schaltet das Licht für 60min ein.
Das sieht so aus:
#kurzer Druck:
seq.01.EG.fl.WS.Eingangslicht:trigger set EI.ss.SA.Licht toggle
#langer Druck:
seq.01.EG.fl.WS.Eingangslicht:partial_1 set EI.ss.SA.Licht on-for-timer 3600


Funktioniert auch, allerdings:
Ist die Beleuchtung durch Türkontakt oder LS in der Ausschaltverzögerung, kann ich mit dem kurzen Tastendruck zwar das Licht ausschalten, aber das DOIF bekommt nichts davon mit. D.h. Wenn ich jetzt bei ausgeschaltetem Licht, die Haustür öffne, bzw. durch die LS gehe, passiert nichts, da für das DOIF die Lampe noch an ist.

Andersherum schaltet das Licht nach der Auschaltverzögerung des DOIFs ab, wenn es durch den Taster auf "Dauerlicht" geschaltet wurde und dann jemand durch die LS geht und damit das DOIF aktiviert.

Wie muss ich das jetzt machen? Muss das alles in das DOIF, aber wie kann ich dann das "toggle" des Tasters verarbeiten!
Oder kann man das DOIF einfach "resetten" und "disablen", wenn der Taster betätigt wird! Brauche hier mal einen Tipp in welche Richtung man hier gehen sollte.
Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: micomat am 10 Dezember 2014, 20:53:59
Hallo :)

kann ich mit DOIF auch eine Aktion ausfuehren, wenn sich ein Wert beispielsweise fuer 30minuten nicht aktualisiert hat?

Sorry falls das schon mal im Thread geklaert wurde, aber 60 Seiten kann man nicht mehr in einem angemessenen Zeitraum durcharbeiten ;)
Bin gerne bereit, sollte es gehen, das als Beispiel mit in den WIKI Artikel zu schreiben.

Gruß
Markus
Titel: Antw:neues Modul DOIF
Beitrag von: Gisbert am 11 Dezember 2014, 09:03:43
Hallo,

ich habe immer noch das Problem, dass die Zeitangsben sich nicht auf den gleichen Tag beziehen, sondern auf den nächsten, wenn eine Schranke bereits in der Vergangenheit liegt. Ich hatte zunächst 3 Befehle mit doelseif gekoppelt. Der Versuch es mit drei einzelnen doif's zu versuchen, brachte das gleiche falsche Ergebnis.

Mit list habe ich den Befehl ausgelesen. Anstatt von 8:20 bis 16:40 das Haustürlicht auszuschalten, falls jemand den Taster unbeabsichtigt betätigt hat, wird die Zeit 8:20 vom Folgetag herangezogen, womit der Befehl ins Gegenteil verkehrt wird.

Internals:
   DEF        ([08:20-16:40] and [Haustuer.Licht] eq "on") (set Haustuer.Licht off)
   NAME       Haustuer.Licht.AUS2
   NR         105
   NTFY_ORDER 50-Haustuer.Licht.AUS2
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-12-11 08:20:00   cmd_event       timer_1
     2014-12-11 08:20:00   cmd_nr          2
     2014-12-11 08:05:45   e_Haustuer.Licht_STATE off
     2014-12-11 08:20:00   state           cmd_2
     2014-12-11 08:20:00   timer_1_c1      12.12.2014 08:20:00
     2014-12-10 16:40:00   timer_2_c1      11.12.2014 16:40:00
     2014-12-09 21:55:34   wait_timer      no timer
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('Haustuer.Licht','STATE','') eq "on"
   Days:
   Devices:
     0           Haustuer.Licht
     all         Haustuer.Licht
   Do:
     0          set Haustuer.Licht off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           Haustuer.Licht:STATE
     all         Haustuer.Licht:STATE
   Readings:
   Realtime:
     0          08:20:00
     1          16:40:00
   State:
   Time:
     0          08:20:00
     1          16:40:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   do         always
   wait       10
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Dezember 2014, 09:13:41
Ich habe mein ursprüngliches Problem für die Diskussion der letzten Tage nun etwas weiter analysieren können und dabei die eigentliche Ursache für die gelegentlichen "Fehlfunktionen" erkannt. Allerdings kann ich mir das Verhalten auch mit den neuen Erkenntnissen bzgl. wait-Timern nicht erklären. Ich habe es mal in einem Beispiel vereinfacht:


define DOIF DI_test ([test1] eq "ja" and [test2] eq "test")
    (trigger global test1)
DOELSEIF ([test2] eq "test")
    (trigger global test2)
attr DI_Test wait 20:0


Ich setze test2 auf "test", test1 steht in dem Moment auf "ja". Damit treffe ich die erste Kondition und der wait-Timer startet. Soweit klar.
Die zweite Kondition würde auch passen, aber da die erste schon traf, sollte die zweite in dem Fall ja ignoriert werden, oder?
Während der wait-Timer läuft, setze ich test1 auf "nein". Damit wird die erste Kondition unwahr. Nun sollte der Timer abgebrochen und die Aktion nicht ausgeführt werden.
Nach meinem Verständnis sollte an der Stelle Schluss sein.

ABER: Pünktlich 20 Sekunden nach dem ursprünglichen Triggern der ersten Kondition wird die Aktion der zweiten Kondition ausgeführt?

Event-Monitor:

2014-12-10 10:51:40 DOIF DI_test wait_timer: 10.12.2014 10:52:00 cmd_1 test2
2014-12-10 10:51:40 dummy test2 test
2014-12-10 10:51:46 dummy test1 nein
2014-12-10 10:52:00 Global global test2
2014-12-10 10:52:00 DOIF DI_test cmd_nr: 2
2014-12-10 10:52:00 DOIF DI_test cmd_event: test2
2014-12-10 10:52:00 DOIF DI_test cmd_2
2014-12-10 10:52:00 DOIF DI_test wait_timer: no timer
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Dezember 2014, 09:25:27
Zitat von: Gisbert am 11 Dezember 2014, 09:03:43
ich habe immer noch das Problem, dass die Zeitangsben sich nicht auf den gleichen Tag beziehen, sondern auf den nächsten, wenn eine Schranke bereits in der Vergangenheit liegt. Ich hatte zunächst 3 Befehle mit doelseif gekoppelt. Der Versuch es mit drei einzelnen doif's zu versuchen, brachte das gleiche falsche Ergebnis.

Was ist genau das Problem? Willst Du sagen, wenn jemand das Licht nach 16:40 anschaltet, dass es dann wieder ausgeschaltet wird? Kann ich mir nicht vorstellen.
Oder stört Dich der interne Timer?
  2014-12-11 08:20:00   timer_1_c1      12.12.2014 08:20:00
Dass der am Folgetag liegt, ist aber logisch. Einen Timer für einen Zeitpunkt in der Vergangenheit zu definieren, wäre doch völlig sinnlos.
Außerdem besagt dieser Timer nur, dass das DOIF zu diesem Zeitpunkt einmal getriggert wird, um zu testen, ob die Bedingungen erfüllt sind oder nicht. Schließlich hast Du definiert, dass das Licht ab 8:20 Uhr ausgeschaltet werden soll, falls es an ist. Wenn es also um 8:20 Uhr noch an ist, soll es zu diesem Zeitpunkt ausgeschaltet werden. Und genau dafür sorgt dieser Timer.
Titel: Antw:neues Modul DOIF
Beitrag von: Gisbert am 11 Dezember 2014, 11:26:48
Hallo Brockmann,

vielen Dank für deine Antwort. Ist es dann so, dass nur um wie in meinem Fall nur 8:20 geprüft wird, ob das Licht an ist? Wenn es zwischendurch durch den Taster eingeschaltet wird, wird dann nicht mehr geprüft? Was für einen Sinn hat dann die 2. Zeitschranke? In der Commandref hab ich es so verstanden, dass innerhalb des Zeitraums geprüft wird.

Was kann ich denn stattdessen tun, um mein Vorhaben zu realisieren.

Gisbert
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Dezember 2014, 12:35:48
Zitat von: Gisbert am 11 Dezember 2014, 11:26:48
vielen Dank für deine Antwort. Ist es dann so, dass nur um wie in meinem Fall nur 8:20 geprüft wird, ob das Licht an ist? Wenn es zwischendurch durch den Taster eingeschaltet wird, wird dann nicht mehr geprüft? Was für einen Sinn hat dann die 2. Zeitschranke? In der Commandref hab ich es so verstanden, dass innerhalb des Zeitraums geprüft wird.

DEF        ([08:20-16:40] and [Haustuer.Licht] eq "on") (set Haustuer.Licht off)
Dieses DOIF wird angestossen
Wenn ich richtig verstehe, was Du erreichen willst, dann ist Deine Definition genau richtig. Deshalb ja auch meine Frage, was das Problem ist bzw. was daran in der Praxis nicht funktioniert.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 11 Dezember 2014, 15:47:09
Zitat von: Brockmann am 11 Dezember 2014, 09:13:41
Ich habe mein ursprüngliches Problem für die Diskussion der letzten Tage nun etwas weiter analysieren können und dabei die eigentliche Ursache für die gelegentlichen "Fehlfunktionen" erkannt. Allerdings kann ich mir das Verhalten auch mit den neuen Erkenntnissen bzgl. wait-Timern nicht erklären. Ich habe es mal in einem Beispiel vereinfacht:


define DOIF DI_test ([test1] eq "ja" and [test2] eq "test")
    (trigger global test1)
DOELSEIF ([test2] eq "test")
    (trigger global test2)
attr DI_Test wait 20:0


Ich setze test2 auf "test", test1 steht in dem Moment auf "ja". Damit treffe ich die erste Kondition und der wait-Timer startet. Soweit klar.
Die zweite Kondition würde auch passen, aber da die erste schon traf, sollte die zweite in dem Fall ja ignoriert werden, oder?
Während der wait-Timer läuft, setze ich test1 auf "nein". Damit wird die erste Kondition unwahr. Nun sollte der Timer abgebrochen und die Aktion nicht ausgeführt werden.
Nach meinem Verständnis sollte an der Stelle Schluss sein.

ABER: Pünktlich 20 Sekunden nach dem ursprünglichen Triggern der ersten Kondition wird die Aktion der zweiten Kondition ausgeführt?

Event-Monitor:

2014-12-10 10:51:40 DOIF DI_test wait_timer: 10.12.2014 10:52:00 cmd_1 test2
2014-12-10 10:51:40 dummy test2 test
2014-12-10 10:51:46 dummy test1 nein
2014-12-10 10:52:00 Global global test2
2014-12-10 10:52:00 DOIF DI_test cmd_nr: 2
2014-12-10 10:52:00 DOIF DI_test cmd_event: test2
2014-12-10 10:52:00 DOIF DI_test cmd_2
2014-12-10 10:52:00 DOIF DI_test wait_timer: no timer


Hallo Brockmann,
wenn ich  Dein Beispiel/Problem richtig verstehe, trifft das genau den Kern meines Problems, welches ich ein paar Posts zuvor (10.12.14, 18:46:01) geschildert habe.

Wenn ich das Verhalten des DOIFs auf meine Steuerung übertrage, dann würde der Timer der Ausschaltverzögerung nicht  zurückgesetzt, wenn die Lampe durch den Tastendruck der Sequence ausgeschaltet wird. Das heißt, das Wiedereinschalten der Beleuchtung durch die Lichtschranke/Türkontakt ist frühestens nach Ablauf des Timers möglich....

Ist das so? Oder habe ich es falsch verstanden?
Spartacus.
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 11 Dezember 2014, 19:58:35
Ich schubse mal meinen Beitrag: http://forum.fhem.de/index.php/topic,23833.msg228914.html#msg228914

Vlt. hat jemand ja eine Lösung. Mein Log ist imo total vollgemüllt und ich habe Verbose auf 0 stehen.
Titel: AW: neues Modul DOIF
Beitrag von: automatisierer am 11 Dezember 2014, 20:08:21
@dieda
in der commandref unter DOIF - Filtern nach Zahlen. Steht das du hinter das Reading noch ein :d

[device:reading:d] 

machen musst um die zahlen werte von buchstaben zu befreien. damit sollte dein problem gelöst sein.
Gruß Ingo
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 11 Dezember 2014, 20:30:19
Danke.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 Dezember 2014, 22:14:31
Zitat von: Brockmann am 11 Dezember 2014, 09:13:41
Ich habe mein ursprüngliches Problem für die Diskussion der letzten Tage nun etwas weiter analysieren können und dabei die eigentliche Ursache für die gelegentlichen "Fehlfunktionen" erkannt. Allerdings kann ich mir das Verhalten auch mit den neuen Erkenntnissen bzgl. wait-Timern nicht erklären. Ich habe es mal in einem Beispiel vereinfacht:


define DOIF DI_test ([test1] eq "ja" and [test2] eq "test")
    (trigger global test1)
DOELSEIF ([test2] eq "test")
    (trigger global test2)
attr DI_Test wait 20:0


Ich setze test2 auf "test", test1 steht in dem Moment auf "ja". Damit treffe ich die erste Kondition und der wait-Timer startet. Soweit klar.
Die zweite Kondition würde auch passen, aber da die erste schon traf, sollte die zweite in dem Fall ja ignoriert werden, oder?
Während der wait-Timer läuft, setze ich test1 auf "nein". Damit wird die erste Kondition unwahr. Nun sollte der Timer abgebrochen und die Aktion nicht ausgeführt werden.
Nach meinem Verständnis sollte an der Stelle Schluss sein.

ABER: Pünktlich 20 Sekunden nach dem ursprünglichen Triggern der ersten Kondition wird die Aktion der zweiten Kondition ausgeführt?


Die Programmierung ist ganz einfach: ein laufender Timer wird nur dann zurückgesetzt, wenn ein anders Kommando ausgeführt werden soll bzw. ein Timer für dieses Kommando gestartet wird (wenn ein wait für dieses Kommando definiert ist), also wenn der Zustand cmd_x auf cmd_y wechsel oder timerbedingt später wechseln soll. Das gilt auch, wenn es nur einen If-Fall gibt, hier gibt es nämlich auch den Zustand cmd_2.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Gisbert am 12 Dezember 2014, 09:15:44
Hallo Brockmann,
meine Haustuer.Licht-Schaltung funktioniert jetzt wie gewünscht. Wahrscheinlich hat sie schon die ganze Zeit richtig funktioniert, wie du gesagt hast. Ich habe vermutlich beim Testen etwas falsch gemacht, als ich andere Zeiten genutzt habe. Der doif-Befehl geht auch mit sunrise und sunset, so dass jetzt bei Tageslicht fie Lampe ausgeschaltet wird, falls sie jemand aus Versehen am Taster eingeschaltet hat.
Vielen Dank für deine Erklärung und deine Geduld.
Gisbert
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Dezember 2014, 10:32:48
Zitat von: Damian am 11 Dezember 2014, 22:14:31
Die Programmierung ist ganz einfach: ein laufender Timer wird nur dann zurückgesetzt, wenn ein anders Kommando ausgeführt werden soll bzw. ein Timer für dieses Kommando gestartet wird (wenn ein wait für dieses Kommando definiert ist), also wenn der Zustand cmd_x auf cmd_y wechsel oder timerbedingt später wechseln soll. Das gilt auch, wenn es nur einen If-Fall gibt, hier gibt es nämlich auch den Zustand cmd_2.
Die Verwirrung lichtet sich. Ich denke, der Grund für das (für mich) unerwartete Verhalten ist letztlich folgender (und das war mir bislang so nicht klar):

Wenn ich ein DOIF mit mehreren Konditionen aber ohne DOELSE definiere, kann dieses DOIF letztlich nicht den Fall abbilden, dass keine der Konditionen wahr ist. Es bleibt dann einfach in dem letzten Status, auch wenn die Bedingungen dafür nicht mehr zutreffen. Im "normalen" Betrieb fälllt das nicht weiter auf, obwohl es auch da Implikationen hat. Aber wenn man mit wait operiert, kann es zu verschiedenen Seiteneffekten führen.

Wohlgemerkt: Ich will damit nicht sagen, dass das ein "Fehler" von DOIF wäre. Man kann in dieser Situation grundsätzlich auf (mindestens) zwei Arten reagieren und beide haben Vor- und Nachteile.

Meine Konsequenz ist, dass ich bei DOIFs mit wait-Timer in Zukunft wohl grundsätzlich ein (ggf. leeres) DOELSE ans Ende setzen werde, denn das sollte diese Seiteneffekte vermeiden. Wenn eine Bedingung unwahr wird, verzweigt das DOIF in den ELSE-Fall und der Status ändert sich dementsprechend, so dass der Timer abgebrochen werden sollte.
Titel: Antw:neues Modul DOIF
Beitrag von: sam50 am 12 Dezember 2014, 10:41:48
Hallo Zusammen.
Ich bin voll von diesem Modul und seinen möglichkeiten begeistert, habe aber noch einiges in Sachen Perl und FHEM zu lernen. Nun zu meinem aktuellen problem.
Ich möchte für meine heizungssteuerung jeden Morgen bei Sonnenaufgang den Durschnittswert der Nachttemperatur errechnen um daraufhin auf Sommer/Winter betrieb umstellen.
Die Durschnittsberechnung funktioniert lediglich di doif Anweisung bringt mir den folgenden fehler:
'DOIF: the at function "myAverage("86400", "FileLog_Aussen_Temp", "4:::")" must return a timespec and not 4.6.: {myAverage("86400", "FileLog_Aussen_Temp", "4:::")}'
Dies ist meine DOIF Anweisung:
define Jahreszeit_st DOIF ({[Sunrise()}] and [{myAverage("43200", "FileLog_Aussen_Temp", "4:::")}] < 12)({set Jahreszeit Winter})
Meinem verständniss nach bedeutet der Fehler 'must return a timespec and not 4.6.: ' es soll dort eine zeitangabe rein und nicht der wert 4.6 (Ist der Durschnittswert).

Das verstehe ich nicht --> Vielleicht kann mir ja jemand einen Tip geben. ;) ;)


Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 12 Dezember 2014, 11:06:08
Hallo zusammen,
mein Problemchen scheint irgendwie untergegangen zu sein.
http://forum.fhem.de/index.php/topic,23833.msg228951.html#msg228951
Vielleicht kann mir noch jemand einen Tipp dazu geben, wie ich das am Besten lösen sollte.

Danke und Gruß,
Spartacus
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Dezember 2014, 13:18:08
Zitat von: sam50 am 12 Dezember 2014, 10:41:48
define Jahreszeit_st DOIF ({[Sunrise()}] and [{myAverage("43200", "FileLog_Aussen_Temp", "4:::")}] < 12)({set Jahreszeit Winter})
Meinem verständniss nach bedeutet der Fehler 'must return a timespec and not 4.6.: ' es soll dort eine zeitangabe rein und nicht der wert 4.6 (Ist der Durschnittswert).

Das verstehe ich nicht --> Vielleicht kann mir ja jemand einen Tip geben. ;) ;)
Da ist mit der Klammerung einiges im Argen. Versuche es mal so (ungetestet):

define Jahreszeit_st DOIF ([{sunrise()}] and myAverage("43200", "FileLog_Aussen_Temp", "4:::") < 12)(set Jahreszeit Winter)
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Dezember 2014, 13:26:15
Zitat von: Spartacus am 12 Dezember 2014, 11:06:08
http://forum.fhem.de/index.php/topic,23833.msg228951.html#msg228951
Vielleicht kann mir noch jemand einen Tipp dazu geben, wie ich das am Besten lösen sollte.
Dein DOIF bekommt nichts von irgendwelchen Tasterdrücken mit, weil Du in den Bedingungen weder den Taster noch den Status des Lichts abfragst.
Die beiden Geschichten laufen quasi völlig nebeneinander her und streiten sich, wer nun das Licht schalten darf.
Integriere den Taster bzw. die dadurch generierten Events irgendwie in das DOIF, damit es beim Betätigen des Tasters getriggert wird und entsprechend der neuen Situation seinen Status ändern kann.
Titel: Antw:neues Modul DOIF
Beitrag von: sam50 am 12 Dezember 2014, 13:34:24
Zitat von: Brockmann am 12 Dezember 2014, 13:18:08
Da ist mit der Klammerung einiges im Argen. Versuche es mal so (ungetestet):

define Jahreszeit_st DOIF ([{sunrise()}] and myAverage("43200", "FileLog_Aussen_Temp", "4:::") < 12)(set Jahreszeit Winter)


FUNKTIONIERT !!!!!!
Vielen Dank für die Unterstützung. Manchmal ist weniger einfach mehr (Besser). Das mit den Klammern habe ich noch nicht so ganz kapiert. werd es schon noch lernen.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 12 Dezember 2014, 13:36:55
Zitat von: Spartacus am 12 Dezember 2014, 11:06:08
Vielleicht kann mir noch jemand einen Tipp dazu geben, wie ich das am Besten lösen sollte.

ein wenig verstehe ich schon vom DOIF, aber mir fällt auf das du dein(e) Taster nicht mit abfragst... frage mich jetzt nicht wo die rein müssen... das kann dir Damian sicher besser erklären

EDITH:// oops, da war schon jemand schneller... ;) @Brockmann  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 12 Dezember 2014, 14:11:48
Zitat von: Brockmann am 12 Dezember 2014, 13:26:15
Dein DOIF bekommt nichts von irgendwelchen Tasterdrücken mit, weil Du in den Bedingungen weder den Taster noch den Status des Lichts abfragst.
Die beiden Geschichten laufen quasi völlig nebeneinander her und streiten sich, wer nun das Licht schalten darf.
Integriere den Taster bzw. die dadurch generierten Events irgendwie in das DOIF, damit es beim Betätigen des Tasters getriggert wird und entsprechend der neuen Situation seinen Status ändern kann.

Hallo Brockmann,
das mit der "Unabhängigkeit" ist mir schon klar!  Das "irgendwie integrieren" ist das, woran ich scheitere, da ich die Sequence habe und ein Tastendruck für zwei Funktionen benutzt wird. Mit dem "toggle" ist das in der Sequence recht einfach,  wird aber in der Form im DOIF nicht gehen!
Ich denke, ich kann hier nur den Aktor-Zustand abfragen und im DOIF verwursten, habe dann aber wieder das Problem der Verriegelung! Denn der Taster hat Priorität.... Ggf. muss man in der Sequence sich ein Hilfsdummy setzten, welches man im DOIF dann auswertet, aber genau da fehlt mir der Wegweiser, der zum Ziel führen könnte!

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Dezember 2014, 15:22:38
Zitat von: Spartacus am 12 Dezember 2014, 14:11:48
Ggf. muss man in der Sequence sich ein Hilfsdummy setzten, welches man im DOIF dann auswertet, aber genau da fehlt mir der Wegweiser, der zum Ziel führen könnte!
Wenn ich es richtig verstehe, soll der Taster das DOIF in jeder Situation "überstimmen"?
Würde es dann nicht ausreichen, die Konditionen jeweils um eine Abfrage des Lichtstatus zu erweitern? Also das Licht nur einschalten, wenn es nicht schon eingeschaltet ist und nur ausschalten, wenn es nicht schon ausgeschaltet ist. Zumindest die beiden von Dir beschriebenen "Fehler-Situationen" sollten sich dadurch auflösen lassen. Und generell erreichst Du damit, dass das DOIF mitbekommt, wenn sich extern an der "Lichtsituation" etwas verändert und darauf reagieren kann.

Ob das jetzt für alle Eventualitäten in Deinem Szenario ausreicht, weiß ich nicht. Aber den Sonderfall Silvester kannst Du ja bald testen.  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 12 Dezember 2014, 19:21:25
Zitat von: Brockmann am 12 Dezember 2014, 15:22:38
Wenn ich es richtig verstehe, soll der Taster das DOIF in jeder Situation "überstimmen"?
Würde es dann nicht ausreichen, die Konditionen jeweils um eine Abfrage des Lichtstatus zu erweitern? Also das Licht nur einschalten, wenn es nicht schon eingeschaltet ist und nur ausschalten, wenn es nicht schon ausgeschaltet ist. Zumindest die beiden von Dir beschriebenen "Fehler-Situationen" sollten sich dadurch auflösen lassen. Und generell erreichst Du damit, dass das DOIF mitbekommt, wenn sich extern an der "Lichtsituation" etwas verändert und darauf reagieren kann.

Ob das jetzt für alle Eventualitäten in Deinem Szenario ausreicht, weiß ich nicht. Aber den Sonderfall Silvester kannst Du ja bald testen.  ;)

Hallo Brockmann,
ja! Das könnte funktionieren! Ich bin noch mal in mich gegangen und habe sowieso noch Fehler entdeckt. Das Licht soll ja nicht Silvester um 0:00 Uhr angehen, sondern Neujahr! (frage mich derzeit nur, ob der Kalender um exakt 0:00 Uhr den neuen Feiertag schon kennt, oder ob es besser ist hier Silvester und 24:00-02:00 Uhr zu verwenden, oder den 01.01. abzufragen)

Außerdem soll das Licht ja ausgehen, wenn LS und Tür im Leerlauf sind und nicht entweder/oder! Das macht m-E. keinen Sinn.

Dann sollte das m.E. so aussehen:
  (((<Haustür offen> or <LS betätigt>) and <dunkel>) or ([0:00 - 02:00] and <Neujahr>)) and <Licht off>
  (set Licht on)
  DOELSEIF
  (<Haustür zu> and <LS Leerlauf> and <Licht on> and nicht (<Neujahr> and [00:00 - 02:00]))
  (set Licht off)


was meinst Du?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 13 Dezember 2014, 08:57:53
Zitat von: Spartacus am 12 Dezember 2014, 19:21:25
was meinst Du?
Ist etwas schwierig, solchen "Pseudo-Code" zu beurteilen. Dann lieber richtigen.

Was Du beachten solltest:
In der Kondition zum verzögerten Ausschalten darf die Bedingung <Licht on> nicht triggernd sein. Sonst würde das Licht auch bei Tasterbetätigung vermutlich einfach nach der wait-Zeit wieder ausgehen (zumindest wenn die anderen Readings ihren Zustand ("released") solange behalten, bis sich da wieder was ändert.
Wenn Du das Licht während der Ausschaltverzögerung manuell ausschalten willst, solltest Du noch ein DOELSE ans Ende hängen, damit das DOIF seinen Zustand ändern und den Timer abbrechen kann, wenn das Licht manuell ausgeschaltet wird.
Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 14 Dezember 2014, 02:16:08
Hallo Damian,

ich wollte mal fragen, ob die Zugriffsmöglichkeit auf den Timestamp eines Readings schon in Reichweite ist.

Ich würde den gerne in Abfragen mit einbeziehen, bzw. als alleinige Bezugsgröße verwenden, z.B.:
15 Minuten nach dem letzten Auftreten eines Bewegungs-Ereignisses meines PIR soll die Aussenbeleuchtung leicht gedimmt noch angeschaltet bleiben.
So in der Art könnte ich mir einige Bedinungen vorstellen. Dafür ist (zumindest in meinem Konstrukt) die Verwendung des Wait-Timers nicht passend, da dort noch einige andere Bedingungen geprüft werden, um andere Dinge mit dem Licht zu machen...

Danke schon mal für deine Antwort...

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 14 Dezember 2014, 08:43:18
Zitat von: Reinerlein am 14 Dezember 2014, 02:16:08
Hallo Damian,

ich wollte mal fragen, ob die Zugriffsmöglichkeit auf den Timestamp eines Readings schon in Reichweite ist.

Ich würde den gerne in Abfragen mit einbeziehen, bzw. als alleinige Bezugsgröße verwenden, z.B.:
15 Minuten nach dem letzten Auftreten eines Bewegungs-Ereignisses meines PIR soll die Aussenbeleuchtung leicht gedimmt noch angeschaltet bleiben.
So in der Art könnte ich mir einige Bedinungen vorstellen. Dafür ist (zumindest in meinem Konstrukt) die Verwendung des Wait-Timers nicht passend, da dort noch einige andere Bedingungen geprüft werden, um andere Dinge mit dem Licht zu machen...

Danke schon mal für deine Antwort...

Grüße
Reinerlein

Das kannst du bereits mit Hilfe einer Perlfunktion nutzen:

siehe: http://forum.fhem.de/index.php/topic,23833.msg226744.html#msg226744

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Reinerlein am 14 Dezember 2014, 10:02:24
Hi Damian,

ja, so habe ich es auch umgesetzt. Ich finde nur diese Schreibweise etwas "unelegant" bzw. in meinem großen Konstrukt unübersichtlich, und ich dachte irgendwo gelesen zu haben, dass du da bei Gelegenheit etwas zum Rest passenderes bauen wolltest...

Trotzdem Danke für den Hinweis...

Grüße
Reinerlein
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 14 Dezember 2014, 10:38:51
Zitat von: Reinerlein am 14 Dezember 2014, 10:02:24
Hi Damian,

ja, so habe ich es auch umgesetzt. Ich finde nur diese Schreibweise etwas "unelegant" bzw. in meinem großen Konstrukt unübersichtlich, und ich dachte irgendwo gelesen zu haben, dass du da bei Gelegenheit etwas zum Rest passenderes bauen wolltest...

Trotzdem Danke für den Hinweis...

Grüße
Reinerlein

Mal schauen, ich kann ja [<device>:<reading>:sec] für Zeit in Sekunden seit der letzten Änderung des Readings auf die immer länger werdende todo-Liste setzen (diese aktualisiere ich im ersten Post des Threads).

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 14 Dezember 2014, 14:02:09
Hallo,
ich brauche nochmals Unterstützung. Weiß gerade nicht, wie ich das umsetzten soll!

Ich habe einen Taster, den ich so abfrage:

define sKurzerLangerDruck_UR sequence PTM210.Gira.01:BI 0.5 PTM210.Gira.01:buttons:.released
attr sKurzerLangerDruck_UR disable 0
attr sKurzerLangerDruck_UR room 99-Test
attr sKurzerLangerDruck_UR triggerPartial 1
#
define nKurzerDruck_UR notify sKurzerLangerDruck_UR:trigger \
{ \
if (ReadingsVal ("Eingangslicht.dum", "state",0) eq"on")\
{\
  fhem("set Eingangslicht.dum off")\
}\
else\
{\
  fhem("set Eingangslicht.dum on")\
}\
}


Jetzt möchte ich im DOIF auf dieses Notify reagieren: sKurzerLangerDruck_UR:trigger
Also jedes mal, wenn dieses Event ausgelöst wird.
Irgendwie so:
define diEingangsLicht DOIF (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") or [sKurzerLangerDruck_UR:trigger])   
Geht aber nicht, da "sKurzerLangerDruck_UR:trigger" ein event ist und kein Reading.
Jemand eine Idee, wie ich den Knoten aus dem Kopf kriege?

Danke,
Christian

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 14 Dezember 2014, 16:58:40
....komme der Sache offenbar nicht näher,
Wird das Licht über Haustür oder LS eingeschaltet, kann ich es nicht direkt über den Schalter wieder ausschalten, da Eingangslicht.dum ja auf "off" bleibt. Irgendwie brauche ich noch einen weiteren Zustand, den ich mir merken muss, aber wie!?


(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") or
([PTM210.Gira.01:buttons] eq "pressed" and [Eingangslicht.dum] eq "off"))
(set Aktor on)
DOELSEIF
([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [Eingangslicht.dum] eq "off")
(set Aktor off)
DOELSEIF
([PTM210.Gira.01:buttons] eq "pressed" and [Eingangslicht.dum] eq "on")
(set Aktor off)
#
#
#
attr wait 0:10:0

Spartacus

NACHTRAG:
Nachdem ich nun alle möglichen Varianten ausprobiert habe, und immer noch kein Stück weiter bin kann hoffentlich jemand helfen! Deshalb schreibe ich hier noch einmal auf, was am Ende überhaupt dabei herauskommen soll:

Sensoren:
Lichtschranke:pressed=betätigt, released=Leerlauf
ReedKontakt: pressend=Tür auf; released=Tür zu
Taster: sequence partial_1, alternativ Trigger
Notaus:
Neujahr:

Aktoren:
Eingangsleuchte

- Reedkontakt oder Lichtschranke schalten den Aktor (pressed: ein; released: wait 120, dann aus)
- Notaus schaltet den Aktor ab, wenn Reedkontakt oder Lichschranke (pressed) 600s anliegen.
- Neujahr [00:00-02:00] schaltet den Aktor ein, unabhängig vom Zustand des Reedkontaktes oder der Lichtschranke
- Taster ist Trumpf, d.h. er kann den Timer abbrechen und den Aktor direkt abschalten, schaltet den Aktor direkt ein,
  jeweils unabhängig vom Zustand des Reedkontaktes, der Lichtschranke, Neujahr oder Notaus

Mein Problem ist eigentlich der Toggle-Taster, der auch noch eine Doppelfunktion hat (Sequence mit trigger und partial_1).
Ich kann den korrekten Zustand nicht bestimmen, wenn der Aktor beispielsweise durch die Lichtschranke aktiviert wurde.

Vielen Dank,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 15 Dezember 2014, 08:29:02
Zitat von: Spartacus am 14 Dezember 2014, 16:58:40
Ich kann den korrekten Zustand nicht bestimmen, wenn der Aktor beispielsweise durch die Lichtschranke aktiviert wurde.
Ich verstehe nicht, wozu Du [Eingangslicht.dum] brauchst. Prüfe doch einfach direkt den Status des Aktors. Dann hast Du auch immer den korrekte Zustand.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 15 Dezember 2014, 10:19:42
Hallo,
ich brauche doch irgendeinen Merker für den Taster, da er doch alle anderen Sensoren sticht!
Solange dieser Taster auf "ein" steht, ist der Aktor auf jeden Fall an, wenn er erneut getippt wird, ist auf jeden Fall der Aktor "aus". Das muss ich doch mit dem Dummy machen....zumindest habe ich keine Idee, wie das anders laufen könnte!

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 15 Dezember 2014, 12:26:04
Zitat von: Spartacus am 15 Dezember 2014, 10:19:42
ich brauche doch irgendeinen Merker für den Taster, da er doch alle anderen Sensoren sticht!
Ich würde es so versuchen:
define diEingangsLicht DOIF(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [Aktor] eq "off"))
(set Aktor on)
DOELSEIF ([PTM210.Gira.01:buttons] eq "pressed" and [Aktor] eq "off")
(set Aktor on)
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [Aktor] eq "on" and [diEingangsLicht] eq "sensor_on")
(set Aktor off)
DOELSEIF ([PTM210.Gira.01:buttons] eq "pressed" and [Aktor] eq "on")
(set Aktor off)
#
attr diEingangsLicht wait 0:0:10:0
attr diEingangsLicht cmd_state sensor_on|manual_on|sensor_off|manual_off

Die Bedingung für den Ablauftimer wird nur wahr, wenn das Licht zuvor durch die Sensoren automatisch eingeschaltet wurde, nicht bei manueller Betätigung.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 15 Dezember 2014, 12:53:11
Du kannst dieses natürlich auch mit einem Dummy verwenden indem du abfragst ob dieses Ein oder Aus ist und das in das DOIF einsetzen

So inetwa

define TestSteuerung dummy
attr TestSteuerung devStateIcon Aus:general_aus@lightgreen Ein:general_an_fuer_zeit@Crimson
attr TestSteuerung eventMap Aus Ein
attr TestSteuerung icon time_clock
attr TestSteuerung room Automation
attr TestSteuerung setList state:Aus,Ein
attr TestSteuerung sortby 01
attr TestSteuerung webCmd state
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 15 Dezember 2014, 19:28:46
Hallo zusammen,
vielen Dank für die Unterstützung:

@ Brockmann:
das funktioniert soweit ganz gut, allerdings hat diese Zeile noch einen Haken:
(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [Aktor] eq "off")

Wenn jetzt die Haustür offen steht, ("pressed") dann kann ich den Aktor zwar mit dem Taster ausschalten, aber er wird dann direkt wieder eingeschaltet, da  "Haustuer:pressed" und  "Aktor:off" wahr sind...hier müsste man auf "Haustuer:released" and " LS:released "warten, bevor das o.a. DOIF wieder zugelassen werden darf.

Zumindest habe ich eine neue Erkenntnis gewonnen! Ich kann den State des ganzen DOIFs ja auch berücksichtigen (and [diEingangsLicht] eq "sensor_on"). Muss noch mal in mich gehen! Vielleicht kann ich das irgendwie verwenden...

Außerdem muss noch zwischen Langdruck und Kurzdruck des Tasters unterschieden werden. Mit "buttons:pressed" alleine klappt es nicht. Hier muss irgendwie noch das sequence:trigger mit rein. Dafür hatte ich u.a. auch den dummy. Aber wenn das nicht geht, ist auch egal! Dann bleibe ich bei der einfachen Funktion des Tasters.
Die Notabschaltung muss rein, da schon mal die ganze Nacht Licht brannte, weil Schnee die LS  blockierte (Knete haben die Kids auch schon reingestopft  ;D) und nix mehr funktionierte....aber alles der Reihe nach...

Für mich ist das alles sehr schwierig das auf die Kette zu kriegen. Das Ganze lief 10 Jahre lang über eine  CControl. Da war das irgendwie einfacher (..mag aber auch daran liegen, dass ich immer noch Schwerigkeiten mit der fhem Syntax und besonders mit Perl habe)

@moonsorrox
mit dem Dummy habe ich schon probiert, aber das Problem damit war, dass der Dummy-Zustand (off,on, auto) vom Taster und vom DOIF gesetzt werden. Die haben sich gegenseitig behindert. Den Code habe ich weiter oben schon gepostet...

Nochmals Danke für die tatkräftige Unterstützung
Sparatcus.

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 17 Dezember 2014, 11:44:42
Zitat von: Spartacus am 15 Dezember 2014, 19:28:46
(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [Aktor] eq "off")

Wenn jetzt die Haustür offen steht, ("pressed") dann kann ich den Aktor zwar mit dem Taster ausschalten, aber er wird dann direkt wieder eingeschaltet, da  "Haustuer:pressed" und  "Aktor:off" wahr sind...hier müsste man auf "Haustuer:released" and " LS:released "warten, bevor das o.a. DOIF wieder zugelassen werden darf.
Denk mal drüber nach, ob der Aktor überhaupt ein Trigger sein sollte. Ich meine, dass das in dem Szenario nicht nötig ist. Also würde ich statt [Aktor] eq off besser Value("Aktor") eq "off" usw. verwenden. Das sollte das Problem beheben, oder?
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 17 Dezember 2014, 17:12:07
Hallo Damian.
Könntest du mir einen Denkansatz geben? Ich suche eine möglichkeit, mit dem Powermeter von HM das Ende eines Waschzyklus auszugeben. Trigger soll aber ein Überschreiten eines bestimmten Wertes sein, und auslösen einer Meldung dann ein Wert der unterschritten wird.
Würde das ohne do always klappen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 17 Dezember 2014, 20:05:56
Zitat von: satprofi am 17 Dezember 2014, 17:12:07
Hallo Damian.
Könntest du mir einen Denkansatz geben? Ich suche eine möglichkeit, mit dem Powermeter von HM das Ende eines Waschzyklus auszugeben. Trigger soll aber ein Überschreiten eines bestimmten Wertes sein, und auslösen einer Meldung dann ein Wert der unterschritten wird.
Würde das ohne do always klappen?

Was ist mit dem Beispiel aus der commandref von DOIF zu "Waschmaschine fertig"?

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 18 Dezember 2014, 14:41:33
Wir hatten hier im Thread ja ein paar Mal das Thema Pushover-Modul, weil sich das nicht ganz Fhem-konform verhält und nach erfolgreichem Versand ein "OK" anstelle von 0 zurückliefert.
Ich meine, dass der DOIF-Code sogar extra angepasst wurde, um damit umzugehen?

Ich hatte das vor einiger Zeit schon im Pushover-Thread angemerkt und laut Johannes_B (Modulentwickler) ist das nun korrigiert.

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Dezember 2014, 18:09:26
Zitat von: Brockmann am 18 Dezember 2014, 14:41:33
Wir hatten hier im Thread ja ein paar Mal das Thema Pushover-Modul, weil sich das nicht ganz Fhem-konform verhält und nach erfolgreichem Versand ein "OK" anstelle von 0 zurückliefert.
Ich meine, dass der DOIF-Code sogar extra angepasst wurde, um damit umzugehen?

Ich hatte das vor einiger Zeit schon im Pushover-Thread angemerkt und laut Johannes_B (Modulentwickler) ist das nun korrigiert.

Das ist gut.

Es wurde im Reading error, als Fehlermeldung protokolliert, hatte aber sonst keine Bewandtnis.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: LuckyDay am 18 Dezember 2014, 18:21:03
@ Damian
Hallo weißt du schon wann
ZitatPushmeldung beim Ausbleiben eines Events:
kommt so wie auf Seite 1 beschrieben

bzw attr di_push do always|resetwait

lieb frag?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Dezember 2014, 18:54:05
Zitat von: fhem-hm-knecht am 18 Dezember 2014, 18:21:03
@ Damian
Hallo weißt du schon wann kommt so wie auf Seite 1 beschrieben

bzw attr di_push do always|resetwait

lieb frag?

Vielleicht komme ich in den Weihnachtsferien dazu.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: CarstenF am 19 Dezember 2014, 10:08:58
Hallo zusammen,
Ich hätte da mal eine Frage.
Ich habe einen Fernbedienungs-Hub von Harmony. Der ist auch als Modul in Fhem eingebunden. Der Status wird auch korrekt ausgelesen. Jetzt ist es so, das sich bei Statusänderung, also z.Bsp. Tastendruck auf Fernbedienung, hier Funktion Radio aus,
erst das Radio ausgeschaltet werden soll und dann die Intertechno Steckdose, an welchem das Radio hängt ausschalten soll. Eigentlich sollte das DOIF Modul so was doch können, oder? Ich kriege es auf jeden Fall nicht hin. Ich habe schon total viele Versuche unternommen. Vielleicht könnte mir jemand das Brett vorm Kopf entfernen :-)
Vielen Dank schon mal fürs Lesen.
Ach ja, die zweite Anweisung im Code ist erstmal nicht so wichtig. Es wurde mir schon ausreichen wenn eine Anweisung ausgeführt würde. Ich hatte das bisher alles über notify gelöst, aber es gibt soviele Aktionen bei der Fernbedienung, das das alles so unübersichtlich und verschachtelt ist. Deshalb wurde mir die DOIF Lösung schon sehr gut gefallen.

([harmony:currentActivity] "PowerOff") (set Radio off) DOELSE (set Fernsehen off)
Titel: Antw:neues Modul DOIF
Beitrag von: scooty am 19 Dezember 2014, 11:06:31
Hallo,

a) einfache Antwort:
Im DOIF Bedingungsteil fehlt der Vergleichsoperator "eq":
([harmony:currentActivity] eq "PowerOff") (set Radio off) DOELSE (set Fernsehen off)

b) komplizierte Antwort (hat jetzt aber nur noch teilweise mit DOIF zu tun):
Um auch wirklich den von Dir gewünschten Effekt zu erreichen würde ich es eher so probieren:
([harmony:activity] eq "PowerOff" and ReadingsVal("harmony","previousActivity","undefined") eq "<Name deiner Aktivität zum Radiohören>") (set Radio off)
- damit die "Radio"-Steckdose auch nur ausgeschaltet wird, wenn die vorherige Aktivität <Name deiner Aktivität zum Radiohören> war
- Verwendung des Readings "activity" statt "currentActivity",  "currentActivity" wird regelmäßig aktualisiert und würde somit das DOIF unnötig auslösen
-über den DOELSE-Teil machen wir uns dann später Gedanken. ;)

und noch ein
attr <Name deines DOIFs> wait 3
definieren (damit das Radio noch 3 Sekunden die Gelegenheit hat, sich auszuschalten, bevor das "set Radio off" der "Radio"-Steckdose es stromlos macht.

Viele Grüße,
Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: CarstenF am 19 Dezember 2014, 11:51:11
Hey,

Vielen Dank fürs schnelle Helfen. Werde ich gleich sofort mal zu Hause ausprobieren und berichten.

Gruß Carsten
Titel: Antw:neues Modul DOIF
Beitrag von: CarstenF am 19 Dezember 2014, 13:53:32
Hallo Andreas,
Leider will das Modul immer noch nicht richtig. Ich haben den Code so verwendet (Version b) und es meldet auch nach gespeicherter config und reread  o. shutdown restart, "initialized", jedoch schaltet es meine Steckdose nicht aus. Im Logfile steht auch nichts von einer Aktivität o. Fehler drin.
Noch eine Idee?

Gruß Carsten
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 19 Dezember 2014, 17:36:55
Ich habe nun keine Idee mehr, wo ich suchen kann. Daher mal die folgende Frage:
Ich habe das DOIF aus der Commandref nachgebaut mit allem "Zubehör". Funktioniert auch, allerdings mit einem kleinen Makel, den ich nicht weg bekomme.
(([06:00-09:00] or [17:00-20:00]) and ([BM_Kueche] eq "motion")) (IF ([BM_Kueche:brightness:d] <40) (set switch_d_lang on, set switch_d_lang off))
mit do always.

Problem: immer um 6 und um 17 Uhr geht das Licht nun für 109 Minuten an, ohne durch den BM ausgelöst zu werden.
Bei meinem 2. DOIF passiert das auch, der dir restlichen Tageszeiten abdeckt und mit 1 Minute läuft. Der geht zu jeder Beginnzeit dann allerdings für eine Minute an.

Ich hoffe, mich verständlich auszudrücken.

Hat jemand eine Idee, wie ich den  DOIFs das abgewöhnen kann? Die Androhung von Schlägen hat nichts gebracht. LOL
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Dezember 2014, 17:43:10
Zitat von: Invers am 19 Dezember 2014, 17:36:55
Ich habe nun keine Idee mehr, wo ich suchen kann. Daher mal die folgende Frage:
Ich habe das DOIF aus der Commandref nachgebaut mit allem "Zubehör". Funktioniert auch, allerdings mit einem kleinen Makel, den ich nicht weg bekomme.
(([06:00-09:00] or [17:00-20:00]) and ([BM_Kueche] eq "motion")) (IF ([BM_Kueche:brightness:d] <40) (set switch_d_lang on, set switch_d_lang off))
mit do always.

Problem: immer um 6 und um 17 Uhr geht das Licht nun für 109 Minuten an, ohne durch den BM ausgelöst zu werden.
Bei meinem 2. DOIF passiert das auch, der dir restlichen Tageszeiten abdeckt und mit 1 Minute läuft. Der geht zu jeder Beginnzeit dann allerdings für eine Minute an.

Ich hoffe, mich verständlich auszudrücken.

Hat jemand eine Idee, wie ich den  DOIFs das abgewöhnen kann? Die Androhung von Schlägen hat nichts gebracht. LOL

Ist BM_Kueche ein HM-Bewegungsmelder?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 19 Dezember 2014, 17:52:04
Ja, ist er.
Ich meinte allerdings: Geht das Licht für 10 Minuten an, nicht für 109. Dicker Finger.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Dezember 2014, 18:04:53
Zitat von: Invers am 19 Dezember 2014, 17:52:04
Ja, ist er.

Das Problem hatten wir hier schon mal. Der HM-Bewegungsmelder sendet in regelmäßigen Abständen, auch wenn keine Bewegung da war, um andere Informationen zu aktualisieren. Dadurch wird DOIF immer wieder getriggert, obwohl keine Bewegung da war. Siehe ab hier und folgende Posts: http://forum.fhem.de/index.php/topic,23833.msg223954.html#msg223954

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 19 Dezember 2014, 18:21:24
Nö, ich meine in diesem Fall ein anderes Problem zu haben. Meine BM triggern nicht mehr wild rum.
Das Schalten erfolgt ja bei mir immer genau zum Start-Zeitpunkt eines Intervalls. Also, wenn Start 6 uhr und ende 8 Uhr ist, startet das DOIF immer genau um 6 uhr und läuft 10 Minuten, falls Dauer so programmiert ist. Im Anschluss daran klappt alles ganz normal, wie es soll. Immer!
Selbiges läuft auch am 2. DOIF, der aber nur 1 Minute schaltet, weil ich die Minute halt so will.

Wie gesagt, das passiert IMMER zur Startzewit eines Zeitraumes. Der BM löst nicht aus zu diesem Zeitpunkt.

2014-12-10_16:20:35 BM_Kueche motion
2014-12-10_16:24:39 BM_Kueche motion
2014-12-10_17:16:59 BM_Kueche motion
2014-12-10_17:17:30 BM_Kueche motion
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Dezember 2014, 22:13:14
Zitat von: Invers am 19 Dezember 2014, 18:21:24
Nö, ich meine in diesem Fall ein anderes Problem zu haben. Meine BM triggern nicht mehr wild rum.
Das Schalten erfolgt ja bei mir immer genau zum Start-Zeitpunkt eines Intervalls. Also, wenn Start 6 uhr und ende 8 Uhr ist, startet das DOIF immer genau um 6 uhr und läuft 10 Minuten, falls Dauer so programmiert ist. Im Anschluss daran klappt alles ganz normal, wie es soll. Immer!
Selbiges läuft auch am 2. DOIF, der aber nur 1 Minute schaltet, weil ich die Minute halt so will.

Wie gesagt, das passiert IMMER zur Startzewit eines Zeitraumes. Der BM löst nicht aus zu diesem Zeitpunkt.

2014-12-10_16:20:35 BM_Kueche motion
2014-12-10_16:24:39 BM_Kueche motion
2014-12-10_17:16:59 BM_Kueche motion
2014-12-10_17:17:30 BM_Kueche motion
Dass zum Startpunkt getriggert wird, ist klar, da "motion" bei HM immer gesetzt ist. Ich werde später noch Zeitintervalle ohne Trigger realisieren, solange müsstest du z. B.: $HMS gt "06:00" and $HMS lt "09:00" statt [06:00-09:00] angeben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 19 Dezember 2014, 23:17:50
Schade, abgesehen, dass ich niemals auf so einen Gedanken gekommen wäre, schaltet nun gar nichts mehr.
Vermutlich habe ich dich falsch verstanden?
Hier mal mein neuer Code:

((($HMS gt "09:00" and $HMS lt "17:00") or ($HMS gt "20:00" and $HMS lt "06:00")) and (([BM_Kueche] eq "motion") and ([BM_Kueche:brightness:d] <40))) (set switch_d on, set switch_d off)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 20 Dezember 2014, 08:00:36
Zitat von: Invers am 19 Dezember 2014, 23:17:50
Schade, abgesehen, dass ich niemals auf so einen Gedanken gekommen wäre, schaltet nun gar nichts mehr.
Vermutlich habe ich dich falsch verstanden?
Hier mal mein neuer Code:

((($HMS gt "09:00" and $HMS lt "17:00") or ($HMS gt "20:00" and $HMS lt "06:00")) and (([BM_Kueche] eq "motion") and ([BM_Kueche:brightness:d] <40))) (set switch_d on, set switch_d off)

ja, es muss $hms heißen und nicht $HMS. brightness-Abfrage hast du jetzt in die Bedingung gepackt, vorher hast du sie separat mit IF abgefragt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 20 Dezember 2014, 10:19:13
Es ist erstaunlich für mich, woran du dich alles erinnerst. Ja, du hast natürlich Recht mit dem IF.
Das hatte aber keinerlei Änderung in das Fehlverhalten des BM gebracht, da habe ich es im Lauf der Zeit wieder ausgetauscht gegen die alte Version meines Codes.
Das Steuern mit einem BM hat leider sehr viele Tücken. Schon die Änderung eines fast beliebigen Wertes (Registers) durch den BM löst z.B. motion aus.

Deine hms Änderung scheint voll der Erfolg zu sein. Kann ich jetzt nicht 100% testen, aber um 17 Uhr werde ich es genau wissen :-)

Vielen Dank für deine Hilfe, aber vor Allem für deine Geduld. Bin immer wieder von beidem begeistert.


EDIT:

So, voller Erfolg. Funktioniert zu 100 Prozent. Nur zur Info: Ich habe zusätzlich beim BM noch das Intervall auf 15 Sekunden umgestellt. Nun geht auch das Licht nicht mehr einfach so aus. Selbst 30 Sekunden waren da offenbar noch zu lang. Das gehört zwar nicht ganz hierher, aber genau das war ja damals das von dir erwähnte Problem. Auch da für die Hilfe nochmals danke, Damian.


EDIT 2:

Mit dieser Methode geht der Zeditraum von 20 uhr bis 6 Uhr nicht. cih habe das noch einmal umgestellt und nun geht es auch da:

((($hms gt "09:00" and $hms lt "17:00") or ($hms gt "20:00" and $hms lt "24:00") or ($hms gt "00:00" and $hms lt "06:00")) and (([BM_Kueche] eq "motion") and ([BM_Kueche:brightness:d] <40))) (set switch_d on, set switch_d off)
Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 20 Dezember 2014, 22:15:58
Hallo Damian,

ich habe für meinen Festerstatus folgende config:

2014.12.20 21:58:41 2: WZ_Fenster_OST_L: perl error in condition: ReadingValDoIf('HMW_Sen_SC_12_DR_JEQ0545703_07','SENSOR','') == on and ReadingValDoIf('HMW_Sen_SC_12_DR_JEQ0545703_08','SENSOR','') == off: Bareword "on" not allowed while "strict subs" in use at (eval 106) line 1.
Bareword "off" not allowed while "strict subs" in use at (eval 106) line 1.

[code]define WZ_Fenster_OST_L DOIF ([HMW_Sen_SC_12_DR_JEQ0545703_07:SENSOR] == on and [HMW_Sen_SC_12_DR_JEQ0545703_08:SENSOR] == off) DOELSEIF ([HMW_Sen_SC_12_DR_JEQ0545703_07:SENSOR] == off and [HMW_Sen_SC_12_DR_JEQ0545703_08:SENSOR] == on) DOELSEIF ([HMW_Sen_SC_12_DR_JEQ0545703_07:SENSOR] == on and [HMW_Sen_SC_12_DR_JEQ0545703_08:SENSOR] == on)
attr WZ_Fenster_OST_L alias OST L
attr WZ_Fenster_OST_L cmdState zu|gekippt|offen
attr WZ_Fenster_OST_L devStateIcon zu:fts_window_1w offen:fts_window_1w_open@red gekippt:fts_window_1w_tilt@red
attr WZ_Fenster_OST_L group Fenster
attr WZ_Fenster_OST_L icon fts_door_right
attr WZ_Fenster_OST_L room Wohnzimmer


Jetzt bekomme ich folgenden Fehler mit dem ich nicht klarkomme.

2014.12.20 21:58:41 2: WZ_Fenster_OST_L: perl error in condition: ReadingValDoIf('HMW_Sen_SC_12_DR_JEQ0545703_07','SENSOR','') == on and ReadingValDoIf('HMW_Sen_SC_12_DR_JEQ0545703_08','SENSOR','') == off: Bareword "on" not allowed while "strict subs" in use at (eval 107) line 1.
Bareword "off" not allowed while "strict subs" in use at (eval 107) line 1.

2014.12.20 21:58:41 2: WZ_Fenster_OST_L: perl error in condition: ReadingValDoIf('HMW_Sen_SC_12_DR_JEQ0545703_07','SENSOR','') == on and ReadingValDoIf('HMW_Sen_SC_12_DR_JEQ0545703_08','SENSOR','') == off: Bareword "on" not allowed while "strict subs" in use at (eval 108) line 1.
Bareword "off" not allowed while "strict subs" in use at (eval 108) line 1.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Dezember 2014, 12:43:21
Zitat von: holzwurm83 am 20 Dezember 2014, 22:15:58
Jetzt bekomme ich folgenden Fehler mit dem ich nicht klarkomme.
Der besagt, dass er mit dem Begriff on oder off nichts anfangen kann, weil Du die in Anführungszeichen setzen muss (so wie es auch in den zahlreichen Beispielen in der Commandref oder hier im Thread gehandhabt wird).
Es sollte also eq "on" bzw. eq "off" heißen anstell von == on bzw. == off.
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 21 Dezember 2014, 15:14:23
Zitat von: Damian am 17 Dezember 2014, 20:05:56
Was ist mit dem Beispiel aus der commandref von DOIF zu "Waschmaschine fertig"?

Gruß

Damian

Hallo.
Vorerst habe ich das funktionierend zum laufen gebracht. Jetzt möchte ich aber das solange die Meldung ausgegeben wird, bis der Verbrauch 0W ist, also Maschine abgeschalten. Bei der fertigmeldung sind ca. 2W verbrauch, und dies wird mit do always auch andauernd getriggert, aber wie schalte ich die sprachausgabe bei 0W ab?
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Dezember 2014, 15:17:11
Hallo zusammen,

bezugnehmend auf das Posting hier habe ich mir meine Jalousiesteuerung ein wenig anders umgesetzt.
Denn die Idee mit Dummies usw fand ich ganz gut.

http://forum.fhem.de/index.php/topic,29124.msg219148.html#msg219148

Nun habe ich mehrere Dummies definiert (siehe Anhang), wo ich mehrere Parameter setzen kann.

Für meine 5 Jalousien habe ich nun pro Jalousie ein DOIF definiert, wo ich die in den Dummies definierten Werte mit einbeziehe.

Ein DOIF sieht beispielsweise so aus:

define di_EG_wz_RO_Carport
  DOIF  (([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Carport:state] eq "closed") and ((([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru:state]) and ([15:00-24:00])) or [22:10-24:00]))
    (set EG_wz_RO_Carport off)
  DOELSEIF (([du_Rollo_Master:state] eq "an") and ((([EG_dr_TS_Terrasse:luminosity] > [du_Rollo_Luminosity_ho:state]) and !$we) or ([{Value("du_Rollo_Zeit_ho")}] and !$we) or ([{Value("du_Rollo_Zeit_ho_WE")}] and $we)) or ([EG_wz_TK_Carport:state] eq "open"))
    (set EG_wz_RO_Carport on)
  DOELSEIF (([du_Rollo_PV:state] eq "an") and ([EG_wz_TK_Carport:state] eq "closed") and ([mySL:Pac_avg] >= 2100) and ([myTL:azimuth] > 70) and ([myTL:azimuth] < 170))
    (set EG_wz_RO_Carport 0)
  DOELSEIF (([du_Rollo_PV:state] eq "an") and ([EG_wz_TK_Carport:state] eq "closed") and ([mySL:Pac_avg] >= 1501) and ([myTL:azimuth] > 70) and ([myTL:azimuth] < 170))
    (set EG_wz_RO_TerrasseLinks 30)


Das Problem ist nun, dass wenn ich FHEM neu starte, was ja spätestens nach einem Update der Fall sein wird, alle DOIFs für die Jalousien verschwinden.

Im log sehe ich dann so etwas:

Please define di_EG_wz_RO_Carport first
di_EG_wz_RO_Carport DOIF: the at function "Value("du_Rollo_Zeit_ho")" must return a timespec and not ???.: {Value("du_Rollo_Zeit_ho")}


Jetzt frage ich mich nur, an was das liegt?
Denn das Dummie du_Rollo_Zeit_ho (Zeit hoch:) ist wie man im Screenshot sieht vorhanden und auch gefüllt.

Liegt das eventuell an der Reihenfolge, wie die DOIFs und Dummies in der Config gespeichert sind? Da habe ich ja mMn mal nicht wirklich viel Einfluss drauf.
Schon gar nicht bei der ConfigDB ;-)

Zumindest ein "configDB list" zeigt mir auch erst die Definition der DOIFs und dann des Dummies.

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Dezember 2014, 18:44:02
Zitat von: maxritti am 21 Dezember 2014, 15:17:11
Hallo zusammen,

bezugnehmend auf das Posting hier habe ich mir meine Jalousiesteuerung ein wenig anders umgesetzt.
Denn die Idee mit Dummies usw fand ich ganz gut.

http://forum.fhem.de/index.php/topic,29124.msg219148.html#msg219148

Nun habe ich mehrere Dummies definiert (siehe Anhang), wo ich mehrere Parameter setzen kann.

Für meine 5 Jalousien habe ich nun pro Jalousie ein DOIF definiert, wo ich die in den Dummies definierten Werte mit einbeziehe.

Ein DOIF sieht beispielsweise so aus:

define di_EG_wz_RO_Carport
  DOIF  (([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Carport:state] eq "closed") and ((([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru:state]) and ([15:00-24:00])) or [22:10-24:00]))
    (set EG_wz_RO_Carport off)
  DOELSEIF (([du_Rollo_Master:state] eq "an") and ((([EG_dr_TS_Terrasse:luminosity] > [du_Rollo_Luminosity_ho:state]) and !$we) or ([{Value("du_Rollo_Zeit_ho")}] and !$we) or ([{Value("du_Rollo_Zeit_ho_WE")}] and $we)) or ([EG_wz_TK_Carport:state] eq "open"))
    (set EG_wz_RO_Carport on)
  DOELSEIF (([du_Rollo_PV:state] eq "an") and ([EG_wz_TK_Carport:state] eq "closed") and ([mySL:Pac_avg] >= 2100) and ([myTL:azimuth] > 70) and ([myTL:azimuth] < 170))
    (set EG_wz_RO_Carport 0)
  DOELSEIF (([du_Rollo_PV:state] eq "an") and ([EG_wz_TK_Carport:state] eq "closed") and ([mySL:Pac_avg] >= 1501) and ([myTL:azimuth] > 70) and ([myTL:azimuth] < 170))
    (set EG_wz_RO_TerrasseLinks 30)


Das Problem ist nun, dass wenn ich FHEM neu starte, was ja spätestens nach einem Update der Fall sein wird, alle DOIFs für die Jalousien verschwinden.

Im log sehe ich dann so etwas:

Please define di_EG_wz_RO_Carport first
di_EG_wz_RO_Carport DOIF: the at function "Value("du_Rollo_Zeit_ho")" must return a timespec and not ???.: {Value("du_Rollo_Zeit_ho")}


Jetzt frage ich mich nur, an was das liegt?
Denn das Dummie du_Rollo_Zeit_ho (Zeit hoch:) ist wie man im Screenshot sieht vorhanden und auch gefüllt.

Liegt das eventuell an der Reihenfolge, wie die DOIFs und Dummies in der Config gespeichert sind? Da habe ich ja mMn mal nicht wirklich viel Einfluss drauf.
Schon gar nicht bei der ConfigDB ;-)

Zumindest ein "configDB list" zeigt mir auch erst die Definition der DOIFs und dann des Dummies.

ja, zum Zeitpunkt der Definition des Moduls ist das Dummy offenbar nicht vorhanden. Evtl. hilft ReadingsVal("du_Rollo_Zeit_ho","state","00:00") statt Value("du_Rollo_Zeit_ho"). Hier wird zumindest ein Default-Wert bei Nichtvorhandensein genommen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: MarkusN am 21 Dezember 2014, 19:23:53
Damian, ich möchte einfach mal Danke sagen. Das DOIF Modul macht viele Anwendungsfälle deutlich einfacher, ich habe unzählige notify und at gelöscht, Fälle in denen ich ein Konstrukt aus mehreren notifys und dummys gebaut habe sind mit einem DOIF abgebacken. Es gibt zwar einige Fallstricke, aber wenn man die verstanden hat (und auch nicht wieder vergisst :D ) ist das wirklich eine herrliche Sache, ich bin begeistert. Danke! Auch für das IF-Modul den IF-Befehl!

Grüße,

Markus
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Dezember 2014, 20:00:17
Zitat von: Damian am 21 Dezember 2014, 18:44:02
ja, zum Zeitpunkt der Definition des Moduls ist das Dummy offenbar nicht vorhanden. Evtl. hilft ReadingsVal("du_Rollo_Zeit_ho","state","00:00") statt Value("du_Rollo_Zeit_ho"). Hier wird zumindest ein Default-Wert bei Nichtvorhandensein genommen.

Gruß

Damian
Danke für den Ansatz. Dahin ist vorhin auch mein Gedanke gegangen.
Mal schauen, wie ich das umsetze.
Nicht, dass auf einmal um 00:00 die Jalousien hoch gehen.
Das würde den WAF dann ein wenig reduzieren  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Dezember 2014, 21:06:22
Zitat von: MarkusN am 21 Dezember 2014, 19:23:53
Damian, ich möchte einfach mal Danke sagen. Das DOIF Modul macht viele Anwendungsfälle deutlich einfacher, ich habe unzählige notify und at gelöscht, Fälle in denen ich ein Konstrukt aus mehreren notifys und dummys gebaut habe sind mit einem DOIF abgebacken. Es gibt zwar einige Fallstricke, aber wenn man die verstanden hat (und auch nicht wieder vergisst :D ) ist das wirklich eine herrliche Sache, ich bin begeistert. Danke! Auch für das IF-Modul den IF-Befehl!

Grüße,

Markus

Danke für die Blumen. Das war aber noch nicht alles. Hier ein kleiner Vorgeschmack zu Weihnachten: ;)

Ich habe das Wochenende kreativ genutzt. Immerhin konnte ich in den beiden letzten Tagen folgende Features einbauen (siehe todo-Liste im ersten Post):

-relative Zeitangaben [+<time>] oder [+<begin>-+<end>] natürlich kombinierbar mit Funktionen in geschweiften Klammern wie bisher.
-do resetwait
-Zeitintervalle  und Eventangaben ohne Trigger mit [?....]
-attr initialize für Vorbelegung des Status bei der Definition.
-weitere Attribute: repeatsame, waitnext, waitsame, eventpause (siehe todo im ersten Post)
-Reading und Statusangaben in [] sowie Berechnungen in {} innerhalb des Perlcodes in geschweiften Klammern im Ausführungsteil, sowie im FHEM-Code jetzt möglich
-für Berechnungen im Ausführungsteil in geschweiften Klammern braucht man jetzt keine runden Klammern anzugeben.

Es fehlt noch: wait zwischen den Kommandos und mehrer Bedingungen zu einem cmd (siehe todo im ersten Post)

Ich bin immer mehr von Perl begeistert, in einer anderen Programmiersprache hätte ich wahrscheinlich nicht so viel geschafft innerhalb von zwei Tagen.

In diesem Sinne...

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Dezember 2014, 21:08:37
Auch auf die Gefahr, dass es hier etwas Off-Topic wird.

Ich habe einen Dummy definiert, der bei Änderungen an meinen Zeit-Dummies die DOIFs Definitionen aktualisiert.
Klappt auch wunderbar.

CFGFN
   DEF        ([du_Rollo_Zeit_ru] or [du_Rollo_Zeit_ho_WE] or [du_Rollo_Zeit_ho]) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseLinks:&DEF])
   NAME       di_Rollo_SetTime
   NR         185
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2014-12-21 20:57:56   cmd_event       du_Rollo_Zeit_ho_WE
     2014-12-21 20:57:56   cmd_nr          1
     2014-12-21 20:45:42   e_du_Rollo_Zeit_ho_STATE 06:35
     2014-12-21 20:57:56   e_du_Rollo_Zeit_ho_WE_STATE 08:00
     2014-12-21 20:39:24   e_du_Rollo_Zeit_ru_STATE 20:40
     2014-12-21 20:57:56   state           cmd_1
   Condition:
     0          InternalDoIf('du_Rollo_Zeit_ru','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_WE','STATE','') or InternalDoIf('du_Rollo_Zeit_ho','STATE','')
   Devices:
     0           du_Rollo_Zeit_ru du_Rollo_Zeit_ho_WE du_Rollo_Zeit_ho
     all         du_Rollo_Zeit_ru du_Rollo_Zeit_ho_WE du_Rollo_Zeit_ho
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseLinks:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           du_Rollo_Zeit_ru:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Zeit_ho:STATE
     all         du_Rollo_Zeit_ru:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Zeit_ho:STATE
   Readings:
   State:
Attributes:
   do         always
   room       LichtRollo

   
Nun dachte ich, dass ich mir ein Notify baue, welches bei global:INIZIALIZED das gleiche macht.

Also das hier geschrieben:

CFGFN
   DEF        global:INITIALIZED {Log 3, "----> Initialized: ".Value("du_Rollo_Zeit_ho")}
   NAME       no_Initialized
   NOTIFYDEV  global
   NR         187
   NTFY_ORDER 50-no_Initialized
   REGEXP     global:INITIALIZED
   STATE      2014-12-21 20:57:16
   TYPE       notify

   
Mache ich ein Restart, wird auch wunderbar der Wert des du_Rollo_Zeit_ho angezeigt:

2014.12.21 20:57:16.419 3: ----> Initialized: 06:35

Nur wie stelle ich jetzt dazu an, in dem notify die Defintionen der DOIFs zu aktualisieren?

Schreibe ich die DEF des notifys so:

global:INITIALIZED modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF]

erhalte ich nach einem shutdown restart dies:

2014.12.21 21:16:41.587 3: no_Initialized return value: di_EG_ku_RO_StrasseLinks DOIF: no left bracket of condition: [di_EG_ku_RO_StrasseLinks:&DEF]


Eventuell lasse ich die Klimmzüger am besten. Nach einem Reboot von FHEM einfach ein Dummy geändert und das DOIF aktualisiert die Definitonen der anderen DOIFs.

Wobei automatisiert wäre das schon schick  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 22 Dezember 2014, 11:08:51
Hallo Damian,

danke erst einmal für das tolle Modul.

Habe aber noch eine Frage. Ich habe so was hier definiert:Internals:
   DEF        ([{sunset("REAL")}-22:35|01234] or [weihn_dr] eq "on" or [{sunset("REAL")}-23:30|56]) (set weihn_dr on) DOELSE (set weihn_dr off)
   NAME       Weihnachtsbeleuchtung_dr
   NR         831
   NTFY_ORDER 50-Weihnachtsbeleuchtung_dr
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-12-22 10:11:36   cmd_event       weihn_dr
     2014-12-22 10:11:36   cmd_nr          2
     2014-12-22 10:11:36   e_weihn_dr_STATE off
     2014-12-22 10:11:36   state           cmd_2
     2014-12-21 16:21:30   timer_1_c1      22.12.2014 16:21:59|01234
     2014-12-21 22:35:00   timer_2_c1      22.12.2014 22:35:00|01234
     2014-12-21 16:21:30   timer_3_c1      22.12.2014 16:21:59|56
     2014-12-21 23:30:00   timer_4_c1      22.12.2014 23:30:00|56
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"01234") or InternalDoIf('weihn_dr','STATE','') eq "on" or DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"56")
   Days:
     0          01234
     1          01234
     2          56
     3          56
   Devices:
     0           weihn_dr
     all         weihn_dr
   Do:
     0          set weihn_dr on
     1          set weihn_dr off
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           weihn_dr:STATE
     all         weihn_dr:STATE
   Readings:
   Realtime:
     0          16:21:59
     1          22:35:00
     2          16:21:59
     3          23:30:00
   State:
   Time:
     0          {sunset("REAL")}
     1          22:35:00
     2          {sunset("REAL")}
     3          23:30:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1  2  3
Attributes:
   do         always
   room       Weihnachten


Leider schaltet es nicht ganz so wie ich es möchte.

Ich habe dies im Log stehen:


2014.12.21 16:21:30 3: FS20 set weihn_dr on
2014.12.21 16:21:30 3: FS20 set weihn_dr on
2014.12.21 16:21:30 3: FS20 set weihn_dr on
2014.12.21 16:21:30 3: FS20 set weihn_wz on
2014.12.21 16:21:30 3: FS20 set weihn_wz on
2014.12.21 22:35:00 3: FS20 set weihn_dr on
2014.12.21 23:30:00 3: FS20 set weihn_dr on
2014.12.21 23:48:35 3: FS20 set weihn_dr off

Ich habe da bestimmt wieder was überlesen... Vlt. hilft dein scharfer Blick aber ...
Titel: Antw:neues Modul DOIF
Beitrag von: MarkusN am 22 Dezember 2014, 12:27:08
Wenn weihn_dr an ist wird weihn_dr eingeschaltet? Deine erste Bedingung solltest du noch mal überdenken.
Titel: Antw:neues Modul DOIF
Beitrag von: Billy am 22 Dezember 2014, 16:49:07
Hallo,
bei mir laufen einige DOIFS nur mit dem folgenden habe ich Probleme:

define di_lightTest DOIF ([{sunset("REAL",0,"16:00","21:00")}]) (set FS_1BEAE8 on-for-timer 3000, set Schalter_1BEA79 on-for-timer 3000, set Brunnen_20C4F6 on-for-timer 3000, {(`echo set myRolS_son on | nc -w 1 192.168.148.17 7072`)}, {(`echo set myRolW_son on | nc -w 1 192.168.148.17 7072`)})

Geht nach dem initialisieren einmal am Abend, am nächsten Abend nicht.
d.h. gestern initialisiert, lief heute nicht.

Readings:
------------------------------------------------------------------------
cmd_event             timer_1                            2014-12-21 16:18:19
cmd_nr                  1                                      2014-12-21 16:18:19
state                       cmd_1                             2014-12-21 16:18:19
timer_1_c1             23.12.2014 16:19:15     2014-12-22 16:18:43
-------------------------------------------------------------------------

Sicher nur eine Kleinigkeit. Hilfe gerne.

Billy
Titel: Antw:neues Modul DOIF
Beitrag von: MarkusN am 22 Dezember 2014, 17:28:04
Hallo Billy,

wenn ich die Commandref richtig verstehe erzeugt deine Definition keine Statusänderung, daher musst du das Attribut do auf always setzen

Auszug Commandref:

ZitatAngaben, bei denen aufgrund der Definition kein Zustandswechsel erfolgen kann z. B.:

define di_light DOIF ([08:00]) (set switch on)
attr di_light do always

müssen mit Attribut "do always" definiert werden, damit sie nicht nur einmal, sondern jedes mal (hier jeden Tag) ausgeführt werden.

Grüße,

Markus
Titel: Antw:neues Modul DOIF
Beitrag von: Billy am 22 Dezember 2014, 17:50:06
Hallo Markus,

Danke :) werde ich ausprobieren.

Gruß
Billy
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 22 Dezember 2014, 18:23:46
Zitat von: MarkusN am 22 Dezember 2014, 12:27:08
Wenn weihn_dr an ist wird weihn_dr eingeschaltet? Deine erste Bedingung solltest du noch mal überdenken.

Es verhält sich genauso, wenn ich den Teil

Zitator [weihn_dr] eq "on"

rausnehme. Daran liegt es also nicht.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 23 Dezember 2014, 10:28:24
Zitat von: dieda am 22 Dezember 2014, 18:23:46
Es verhält sich genauso, wenn ich den Teil
rausnehme. Daran liegt es also nicht.
Dieser Teil hat aber schon einen wesentlichen Unterschied gemacht, denn vorher war die Kondition immer wahr, wenn weihn_dr erst einmal eingeschaltet war. Das DOIF konnte also gar nicht wieder ausschalten.
Wenn Du das or [weihn_dr] eq "on" rausnimmst, bekommst Du eine relative simple Zeitsteuerung, die eigentlich keine Probleme bereiten sollte. Wobei Du das do always-Attribut in dem Fall weglassen kannst.

Wenn es also immer noch nicht klappt, dann poste bitte nochmal die aktuelle Definition sowie ggf. die erzeugten Events/Logeinträge.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 23 Dezember 2014, 17:30:13
Hallo,
ich bin immer noch an meiner Eingangsbeleuchtung. Durch einen Tipp von Brockmann bin ich schon ein ganzes Stück weiter...Besten Dank dafür!

Jetzt habe ich mir das Sequence Problem vorgenommen. Hat jemand eine Idee, wie ich in einem DOIF auf den langen Tastendruck reagieren kann? Es gibt kein Readings in der Sequence die ich auswerten kann. Nur das eigentliche Event "sKurzerLangerDruck_UR:partial_1".

# Squence Test
#
define sKurzerLangerDruck_UR sequence PTM210.Gira.01:BI 0.5 PTM210.Gira.01:buttons:.released
attr sKurzerLangerDruck_UR disable 0
attr sKurzerLangerDruck_UR reportEvents 1
attr sKurzerLangerDruck_UR room 99-Test
attr sKurzerLangerDruck_UR triggerPartial 1
#
# Kurzer Druck
#
define nKurzerDruck_UR notify sKurzerLangerDruck_UR:trigger set TestLampe on
attr nKurzerDruck_UR disable 0
attr nKurzerDruck_UR room 99-Test
#
# Langer Druck
#
define nLangerDruck_UR notify sKurzerLangerDruck_UR:partial_1 set TestLampe off
attr nLangerDruck_UR disable 0
attr nLangerDruck_UR room 99-Test

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 23 Dezember 2014, 20:14:58
ich habe auch ein Problem mit meinem DOIF, welches ich vorher auf "Zufall" nicht ausprobiert habe. Ich hatte es gestern umgestellt und bekomme nun folgenden Fehler:

InternalDoIf('Zeitsteuerung','STATE','') ~= "Dämmerung|Aus": syntax error at (eval 342092) line 1, near ") ~"

der Code vom DOIF:
( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|12345] or [01:15|06]))
    (set WegLampe_Sw_02 off)
DOELSEIF([Zeitsteuerung] ~= "Dämmerung|Aus")(attr ZufallsTimerAussenlicht disable 1)
DOELSEIF([Zeitsteuerung] eq "Zufall")(attr ZufallsTimerAussenlicht disable 0)


Hatte das Dummy immer auf Dämmerung und alles lief, nun auf Zufall geht es nicht
wo liegt jetzt der Fehler..?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Dezember 2014, 09:38:47
Zitat von: moonsorrox am 23 Dezember 2014, 20:14:58
Hatte das Dummy immer auf Dämmerung und alles lief, nun auf Zufall geht es nicht
wo liegt jetzt der Fehler..?
Es muss =~ heißen und nicht ~=.
Eventuell wurde diese Kondition zuvor nie getriggert, weil vorher immer schon eine andere zugeschlagen hat, und deshalb ist es nicht aufgefallen.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 24 Dezember 2014, 09:43:01
Au, Mensch Super diese Kleinigkeit..! ;)
aber genau diese sind es, werde ich heute gleich mal umschreiben und testen, ja klar hast du Recht wurde vorher noch nie getriggert...
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 24 Dezember 2014, 12:05:10
Hallo,
ich möchte mit einem DOIF einen Aktor an Heiligabend in der Zeit von 16:00 bis 23:00 einschalten, wenn innerhalb dieser Zeit ein Taster betätigt wird. Um 23:00 geht dann das Licht automatisch aus.

[16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend" and  [Taster:buttons] eq "pressed"

Das funktioniert leider nicht, da der Taster dirket wieder auf "released" geht und damit die Bedingung nicht mehr erfüllt ist.
Jemand nen Tipp?
Spartacus
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Dezember 2014, 12:09:58
Zitat von: Spartacus am 24 Dezember 2014, 12:05:10
Hallo,
ich möchte mit einem DOIF einen Aktor an Heiligabend in der Zeit von 16:00 bis 23:00 einschalten, wenn innerhalb dieser Zeit ein Taster betätigt wird. Um 23:00 geht dann das Licht automatisch aus.

[16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend" and  [Taster:buttons] eq "pressed"

Das funktioniert leider nicht, da der Taster dirket wieder auf "released" geht und damit die Bedingung nicht mehr erfüllt ist.
Jemand nen Tipp?
Spartacus

Dazu brauchst du, wie könnte es anders sein, das DOIF-Weihnachtspaket ;) aus dem Nachbarthread.

Dann Zeit mit Fragezeichen angeben:

[?16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend" and  [Taster:buttons] eq "pressed"

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 24 Dezember 2014, 12:22:55
Zitat von: Damian am 24 Dezember 2014, 12:09:58
Dazu brauchst du, wie könnte es anders sein, das DOIF-Weihnachtspaket ;) aus dem Nachbarthread.

Dann Zeit mit Fragezeichen angeben:

[?16:00-23:00] and [hl.01.Feiertag:state] eq "Heiligabend" and  [Taster:buttons] eq "pressed"

Gruß

Damian
Danke Damian,
aber das ändert doch nichts daran, dass durch das "Released" des Tasters die Bedingung unwahr wird, und dadurch der Aktor wieder ausgeht, oder?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Dezember 2014, 12:27:17
Zitat von: Spartacus am 24 Dezember 2014, 12:22:55
Danke Damian,
aber das ändert doch nichts daran, dass durch das "Released" des Tasters die Bedingung unwahr wird, und dadurch der Aktor wieder ausgeht, oder?
Christian

ja, du hast nur ein Code-Schinpsel gepostet, daher kann ich nicht wissen, wie deine komplette DOIF-Definition aussieht. Abgesehen davon hast du nicht geschrieben, dass sobald der Taster den Zustand ändert dein Licht ausgeht, sondern um 23:00 Uhr. Als ging ich davon aus, dass du keinen ELSE-Fall definiert hast.

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 24 Dezember 2014, 12:45:19
Oh sorry Damian,
das stimmt natürlich!
Das ist der Zweig, der bei 16:20 anfängt.

((([07:00-08:30|12345] and [hl.01.Feiertag:state] eq "none" or
[16:30-22:00|12345] and ([hl.01.Feiertag:state] eq "none" and ![cal.01.Ferien.dum]) or
[08:30-23:00] and [cal.01.Ferien.dum] or
[08:30-23:00] and [hl.01.Feiertag:state] ne "none" or
[08:30-23:00|60]) and (($mday>=25 and $month==12) or ($mday<=12 and $month==1))) or
[16:20-23:00] and [hl.01.Feiertag:state] eq "Heiligabend" and  [EG.ss.TK.Haustuer:buttons] eq "pressed" and [?rp.01.EG.ku.SD.Kochinsel] or
[08:30-02:00] and [hl.01.Feiertag:state] eq "Silverster") (set rp.01.EG.ku.SD.Kochinsel on)
DOELSE (set rp.01.EG.ku.SD.Kochinsel off)


Attribute sind nicht gesetzt.
da soll gleich der Weihnachtsbaum angehen, wenn die Tür aufgeschlossen wird.... :-)
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Dezember 2014, 13:17:20
Zitat von: Spartacus am 24 Dezember 2014, 12:45:19
Oh sorry Damian,
das stimmt natürlich!
Das ist der Zweig, der bei 16:20 anfängt.

((([07:00-08:30|12345] and [hl.01.Feiertag:state] eq "none" or
[16:30-22:00|12345] and ([hl.01.Feiertag:state] eq "none" and ![cal.01.Ferien.dum]) or
[08:30-23:00] and [cal.01.Ferien.dum] or
[08:30-23:00] and [hl.01.Feiertag:state] ne "none" or
[08:30-23:00|60]) and (($mday>=25 and $month==12) or ($mday<=12 and $month==1))) or
[16:20-23:00] and [hl.01.Feiertag:state] eq "Heiligabend" and  [EG.ss.TK.Haustuer:buttons] eq "pressed" and [?rp.01.EG.ku.SD.Kochinsel] or
[08:30-02:00] and [hl.01.Feiertag:state] eq "Silverster") (set rp.01.EG.ku.SD.Kochinsel on)
DOELSE (set rp.01.EG.ku.SD.Kochinsel off)


Attribute sind nicht gesetzt.
da soll gleich der Weihnachtsbaum angehen, wenn die Tür aufgeschlossen wird.... :-)
Christian

ja, das ist natürlich immer die Gefahr, wenn man den DOELSE-Fall bei so vielen Abfragen benutzt. Denn es kann immer wieder Trigger-Konstellationen geben, die man zunächst nicht überblickt, die dazu führen, dass die Bedingung unwahr wird.

Wenn andere Zustände des Tasters, wie "release" keine Bedeutung zum Ausschalten haben und du kein do always Attribut definiert hast, dann kannst du gleich statt:

[EG.ss.TK.Haustuer:buttons] eq "pressed"

nur

[EG.ss.TK.Haustuer:buttons]

angeben.

Und bei der Angabe [?rp.01.EG.ku.SD.Kochinsel] meinst du wahrscheinlich [?rp.01.EG.ku.SD.Kochinsel] ne "on"

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 24 Dezember 2014, 13:34:24
Danke Damian,
ich möchte mich auch genrell für das DOIF Modul das Weihnachtspaket und ganz besonders für die schnelle Hilfe in den vergangenen Wochen ganz herzlich bedanken. Natürlich auch bei allen anderen Helfern.

Vom Weihnachtspaket Konnte zwar noch nicht alle neuen Funktionen ausprobieren (verstanden habe ich das Eine oder Andere auch noch nicht!), werde aber sicherlich in den nächsten Tagen weiter tüfteln.

Ich weiß nicht, ob jemand meinen Post zum "Sequence-Thema" drei, vier Posts zuvor, gesehen hat. Wenn dazu noch jemand eine Idee hat, wäre das klasse!

Sonst wünsche ich Dir und allen anderen fhem- und DOIF-Nutzern einen tollen Heiligabend und Frohe Weihnachten....

Gruß,
Christian

Gruß,
Spartacus.
Titel: Antw:neues Modul DOIF
Beitrag von: robodrill am 25 Dezember 2014, 17:40:45
Hallo,

habe ein kleines Problem. Ich versuche eine Rollade in der Woche ( kein Feiertag ) um 06:05 Uhr hochzufahren und am WE und an Feiertagen erst um 8:01 Uhr. Leider erfolgt immer das hochfahren um 06:05 Uhr weil dies zuerst eintritt.Die "holiday" Datei ist angelegt und per get wird auch der richtige Tag ausgegeben.
Siehe Screenshot

Was mache ich falsch?

Titel: Antw:neues Modul DOIF
Beitrag von: Otto am 25 Dezember 2014, 18:22:03
Hallo,

an den timer_1_c1, timer_2_c1 usw. kann man nicht sehen was zuerst eintritt.

Aber probiere mal statt 7 und 8 für Wochentage 1,2,3,4,5 und für Wochenende 6,0
Titel: Antw:neues Modul DOIF
Beitrag von: Bennemannc am 25 Dezember 2014, 18:47:32
Hallo,

also ich würde auf ($we) bzw. auf (!$we). Die Oderverknüpfung vorne sieht etwas komisch aus. Ich weiß nicht ob ($we) auch Feiertage beinhaltet. Müßtest Du mal nachlesen. Zudem habe ich das in zwei "at" gepackt - einer für rauf und einer für runter.

Gruß Christoph
Titel: Antw:neues Modul DOIF
Beitrag von: KernSani am 25 Dezember 2014, 18:52:33
Nur als kurze Ergänzung: $we enthält Feiertage, wenn globales Attribut holiday2we gesetzt ist und eine entsprechende.holiday-Datei vorhanden ist.

Frohes Fest,

Oli
Titel: Antw:neues Modul DOIF
Beitrag von: robodrill am 25 Dezember 2014, 20:43:33
Zitat von: Bennemannc am 25 Dezember 2014, 18:47:32
Hallo,

also ich würde auf ($we) bzw. auf (!$we). Die Oderverknüpfung vorne sieht etwas komisch aus. Ich weiß nicht ob ($we) auch Feiertage beinhaltet. Müßtest Du mal nachlesen. Zudem habe ich das in zwei "at" gepackt - einer für rauf und einer für runter.

Gruß Christoph
Also lt. commandref sollte das so mit "or" gehen. Hatte vorher alles in drei "doif" ( 1 Rauf Woche, 1x rauf WE und 1x runter ) ging aber mit der Unterscheidung von Woche und Wochenende auch nicht. Aktuell heute morgen festgestellt das die Rollade um 06:05 Uhr rauf ging statt um 8:01 Uhr.
für "holiday" ist alles angelegt inkl holiday2we und nw.holiday ( Meine Tabelle für NRW ).

ICH MUSS mich korrigieren, an normalen Wochenenden funktioniert ALLES. NUR nicht jetzt wo Weihnachten auf Mi,Do und Fr fällt.
Hat da jemand eine Idee woran es liegen könnte.

EDIT (26.12.2014): Ich glaube das ich den Fehler gefunden habe. "holiday2we" war auskommentiert, da ich annahm das es für DOIF nicht notwendig ist. Es scheint aber nicht so. Jetzt funtioniert beides, sowohl alles in einer DOIF als auch jede Funktion mit einer eigenen DOIF.
Titel: Antw:neues Modul DOIF
Beitrag von: Otto am 25 Dezember 2014, 20:50:10
Hallo,

hast du denn holiday abgefragt? get <name> today
Oder du machst ein {$we} in die Komandozeile, sollte heute 1 ausgeben

Titel: Antw:neues Modul DOIF
Beitrag von: robodrill am 25 Dezember 2014, 20:53:27
Zitat von: Otto am 25 Dezember 2014, 20:50:10
Hallo,

hast du denn holiday abgefragt? get <name> today
Oder du machst ein {$we} in die Komandozeile, sollte heute 1 ausgeben
get nw today ergibt 1. Weihnachtstag und {$we} ergibt 1
Titel: Antw:neues Modul DOIF
Beitrag von: FHEMbeta am 26 Dezember 2014, 09:36:55
Ich würde gerne einen Schalter temperaturabhängig an- und ausschalten. Der Temperatursensor heißt Temp_Brahea und hat die Readings temperature und temperature2. Der Schalter(kanal) heißt Heizung_Sw_01.

Warum erzeugt der folgende Code keine funktionierende Schaltung (bei kleiner gleich -4°C bzw. 2.5°C einschalten, sonst aus)? Stattdessen bekomme ich auf dem HomeMatic USB-Stick einen Highload Fehler.

# Steuerung Brahea
define Steuerung_Brahea DOIF ([Temp_Brahea:temperature] <= -4 or [Temp_Brahea:temperature2] <= 2.5)  (set Heizung_Sw_01 on) DOELSE (set Heizung_Sw_01 off)
attr Steuerung_Brahea do always
attr Steuerung_Brahea room Balkon
Titel: Antw:neues Modul DOIF
Beitrag von: StefanW am 26 Dezember 2014, 09:47:34
Hallo,

Ich habe ein kleines Problem mit meiner DOIF - Funktion.

DOIF ([07:00-22:35|7] or [13:00-21:35|8] and [rr_Stefan] eq "home") (set Adventskranz on) DOELSE (set Adventskranz off)

Mein Adventskranz soll also am WE und an Feiertagen von 7 - 22.35 Uhr, unter der Woche von 13 - 21.35 Uhr an sein, aber nur wenn ich zu Hause bin.
Globales Attribut holiday2we ist gesetzt ist und eine entsprechende .holiday-Datei ist vorhanden.
Anwesenheit per Residentsmodul funktioniert.

Mein Problem ist nun, das zwar zur richtigen Zeit an & ausgeschaltet wird, aber wenn sich zwischenzeitlich der Anwesenheitsstatus von home auf absent ändert, wird das ignoriert und das Licht bleibt trotzdem an.

Wo liegt da mein Fehler?

Gruß
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 26 Dezember 2014, 09:48:44
@Alexander

versuch mal das temp reading auf zahlen zu filtern...

[Temp_Brahea:temperature:d]

natürlich für beide..

Ausserdem solltest Du dem sensor das attribut event on change reading geben.
Titel: Antw:neues Modul DOIF
Beitrag von: FHEMbeta am 26 Dezember 2014, 10:16:29
Zitat von: der-Lolo am 26 Dezember 2014, 09:48:44
@Alexander

versuch mal das temp reading auf zahlen zu filtern...

[Temp_Brahea:temperature:d]

natürlich für beide..

Ausserdem solltest Du dem sensor das attribut event on change reading geben.

Ich habe jetzt beim Temperatursensor das event-on-change-reading mit temperature,temperature2,battery gesetzt. Mit temperature:d geht es nicht, nur mit temperature.

Der Schalter geht nun an und nach Erreichen der Temperatur wieder aus. Es dauert aber ca. 2 Minuten bis der Schalter an geht. Dauert das nicht zu lange?

Wie bekommt man es hin, dass der Schalter nur schaltet, wenn sich der Zustand (on/off) ändern soll? Da ich einen HomeMatic-Schalter verwende, kennt FHEM den aktuellen Status des Schalters. FHEM schaltet aber dennoch und belastet so unnötig die Funkschnittstelle (Highload).
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Dezember 2014, 10:32:26
Zitat von: Alexander am 26 Dezember 2014, 09:36:55
Ich würde gerne einen Schalter temperaturabhängig an- und ausschalten. Der Temperatursensor heißt Temp_Brahea und hat die Readings temperature und temperature2. Der Schalter(kanal) heißt Heizung_Sw_01.

Warum erzeugt der folgende Code keine funktionierende Schaltung (bei kleiner gleich -4°C bzw. 2.5°C einschalten, sonst aus)? Stattdessen bekomme ich auf dem HomeMatic USB-Stick einen Highload Fehler.

# Steuerung Brahea
define Steuerung_Brahea DOIF ([Temp_Brahea:temperature] <= -4 or [Temp_Brahea:temperature2] <= 2.5)  (set Heizung_Sw_01 on) DOELSE (set Heizung_Sw_01 off)
attr Steuerung_Brahea do always
attr Steuerung_Brahea room Balkon


Bei zyklisch sendenden Sensoren darfst du kein do always angeben, sonst wird deine Heizung ständig geschaltet.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: FHEMbeta am 26 Dezember 2014, 10:35:33
Zitat von: Damian am 26 Dezember 2014, 10:32:26
Bei zyklisch sendenden Sensoren darfst du kein do always angeben, sonst wird deine Heizung ständig geschaltet.

Gruß

Damian

OK, danke. Was würde man hier stattdessen setzen? Nichts?

Die Temperatursensoren senden alle 4 Sekunden. Es soll aber nur geschaltet werden, wenn es auch wirklich etwas zu schalten gibt: on zu off ODER off zu on.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Dezember 2014, 10:36:03
Zitat von: StefanW am 26 Dezember 2014, 09:47:34
Hallo,

Ich habe ein kleines Problem mit meiner DOIF - Funktion.

DOIF ([07:00-22:35|7] or [13:00-21:35|8] and [rr_Stefan] eq "home") (set Adventskranz on) DOELSE (set Adventskranz off)

Mein Adventskranz soll also am WE und an Feiertagen von 7 - 22.35 Uhr, unter der Woche von 13 - 21.35 Uhr an sein, aber nur wenn ich zu Hause bin.
Globales Attribut holiday2we ist gesetzt ist und eine entsprechende .holiday-Datei ist vorhanden.
Anwesenheit per Residentsmodul funktioniert.

Mein Problem ist nun, das zwar zur richtigen Zeit an & ausgeschaltet wird, aber wenn sich zwischenzeitlich der Anwesenheitsstatus von home auf absent ändert, wird das ignoriert und das Licht bleibt trotzdem an.

Wo liegt da mein Fehler?

Gruß
Stefan

Du musst die Prioritäten der Operatoren beachten, and kommt vor or, daher ist wohl das, was du meinst:

DOIF (([07:00-22:35|7] or [13:00-21:35|8]) and [rr_Stefan] eq "home") (set Adventskranz on) DOELSE (set Adventskranz off)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Dezember 2014, 10:44:22
Zitat von: Alexander am 26 Dezember 2014, 10:35:33
OK, danke. Was würde man hier stattdessen setzen? Nichts?

Die Temperatursensoren senden alle 4 Sekunden. Es soll aber nur geschaltet werden, wenn es auch wirklich etwas zu schalten gibt: on zu off ODER off zu on.

Dann ist es wohl kein Wunder, dass HM sich beschwert und dein Log dürfte zugemüllt sein. do always wird nur angegeben, wenn sich das selbe Kommando wiederholen soll, wie beim notify, sonst wird es nicht angegeben. Erklärt wird es im ersten Beispiel zu Ereignissteuerung in der Commandref von DOIF.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: StefanW am 26 Dezember 2014, 10:48:24
Zitat von: Damian am 26 Dezember 2014, 10:36:03
Du musst die Prioritäten der Operatoren beachten, and kommt vor or, daher ist wohl das, was du meinst:

DOIF (([07:00-22:35|7] or [13:00-21:35|8]) and [rr_Stefan] eq "home") (set Adventskranz on) DOELSE (set Adventskranz off)

Gruß

Damian

Danke, das wars!
Titel: Antw:neues Modul DOIF
Beitrag von: FHEMbeta am 26 Dezember 2014, 10:48:45
Zitat von: Damian am 26 Dezember 2014, 10:44:22
Dann ist wohl kein Wunder, dass HM sich beschwert und dein Log dürfte zugemüllt sein. do always wird nur angegeben, wenn sich das selbe Kommando wiederholen soll, wie beim notify, sonst wird es nicht angegeben. Erklärt wird es im ersten Beispiel zu Ereignissteuerung in der Commandref von DOIF.

Gruß

Damian

Vielen Dank! Ich habe die Commandref gelesen, vor lauter Bäumen aber wohl nicht mehr den Wald gesehen.

Kann es sein, dass DOIF ohne do always noch länger braucht, bis der Schalter schaltet? Die Temperatur war nun 5 Minuten unter Soll und jetzt wurde erst eingeschaltet.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Dezember 2014, 10:56:09
Zitat von: Alexander am 26 Dezember 2014, 10:48:45
Vielen Dank! Ich habe die Commandref gelesen, vor lauter Bäumen aber wohl nicht mehr den Wald gesehen.

Kann es sein, dass DOIF ohne do always noch länger braucht, bis der Schalter schaltet? Die Temperatur war nun 5 Minuten unter Soll und jetzt wurde erst eingeschaltet.

Ich vormute, dass sich HM wegen der 1 %-Regel erst mal erholen muss. Das Schalten wird ohne Verzögerung ausgeführt, im Prinzip in der gleichen Sekunde.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Dezember 2014, 20:38:47
Neue Version siehe: http://forum.fhem.de/index.php/topic,30847.0.html wurde eingecheckt. Dokumentation wurde stark überarbeitet.
Morgen per FHEM-Update verfügbar.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 27 Dezember 2014, 17:28:54
Hallo,
ich möchte noch einmal versuchen diese Frage loszuwerden, da ich mir seit tagen den Kopf zerbreche, wie ich das lösen kann:
Wie kann ich in einem DOIF auf ein Event aus einem notify reagieren?
Ich will einen Tasterklick im DOIF auswerten, aber dieser "Klick" wird mittels sequence zwischen "Kurz-" und "Langdruck" unterschieden. Daraus entstehen dann die notifies "trigger" und "partial_x" Und genau dieses Event muss ich irgendwie in einem DOIF weiterverarbeiten...ein Reading gibt es leider nicht!

Hat niemand eine Idee, wie man das lösen kann?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Dezember 2014, 18:57:19
Zitat von: Spartacus am 27 Dezember 2014, 17:28:54
Hallo,
ich möchte noch einmal versuchen diese Frage loszuwerden, da ich mir seit tagen den Kopf zerbreche, wie ich das lösen kann:
Wie kann ich in einem DOIF auf ein Event aus einem notify reagieren?
Ich will einen Tasterklick im DOIF auswerten, aber dieser "Klick" wird mittels sequence zwischen "Kurz-" und "Langdruck" unterschieden. Daraus entstehen dann die notifies "trigger" und "partial_x" Und genau dieses Event muss ich irgendwie in einem DOIF weiterverarbeiten...ein Reading gibt es leider nicht!

Hat niemand eine Idee, wie man das lösen kann?
Christian

Trigger verändert keinen Wert im Reading oder Status, den man abfragen kann. Beim trigger muss man allerdings ein Device angeben. Wenn es nur einen Trigger auf das Device gibt und dieser eindeutig ist, dann kann man den auch mit DOIF ([<Device>])... abfragen.
Ansonsten kannst du in deinen notifies statt zu triggern, dummys mit set setzen, die du dann im DOIF abfragen kannst.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 27 Dezember 2014, 19:05:18
ein simpler trigger auf das DOIF selbst geht nicht?
so wie es bei einem notify möglich ist?

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 27 Dezember 2014, 19:13:10
Zitat von: der-Lolo am 27 Dezember 2014, 19:05:18
ein simpler trigger auf das DOIF selbst geht nicht?
so wie es bei einem notify möglich ist?

DOIF wertet keine Events aus - hat bisher offenbar noch keiner vermisst. Es wird allerdings durch einen Trigger geweckt, wenn das entsprechende Device angegeben wird.

Eine Auswertung von Events ließe sich aber relativ leicht einbauen.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Dezember 2014, 12:08:10
Hallo,


folgendes Problem muss ich noch mal auf die Tagesordnung bringen.

http://forum.fhem.de/index.php/topic,23833.msg233617.html#msg233617

Und zwar sahen meine DOIFs für die einzelnen Jallousien so aus:

(([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Terrasse:state] eq "closed") and ([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru:state]) and  ([{ReadingsVal("du_Rollo_Zeit_ru_start","state","00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende","state","00:00")}]) or
  ([du_Rollo_Master:state] eq "an") and [{ReadingsVal("du_Rollo_Zeit_ru_ende","state","00:00")}])
(set du_EG_wz_RO_TerrasseLinks off)
DOELSEIF ((([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Terrasse:state] eq "open")) or
(([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Terrasse:state] eq "closed") and ([EG_dr_TS_Terrasse:luminosity] > [du_Rollo_Luminosity_ru:state]) and  ([{ReadingsVal("du_Rollo_Zeit_ho_start","state","00:00")}-{ReadingsVal("du_Rollo_Zeit_ho_ende","state","00:00")}]) or
  ([du_Rollo_Master:state] eq "an") and [{ReadingsVal("du_Rollo_Zeit_ho_ende","state","00:00")}]))
(set du_EG_wz_RO_TerrasseLinks on)


Dort habe ich mit mittels {ReadingsVal("....")} Zeitangaben aus Dummies geholt um meine DOIFs durch Eingabe neuer Werte direkt zu aktualisieren.
Klappt(e) auch soweit ganz gut.
Nun habe ich mal ein Update gemacht.

Wenn ich nun in meinem Dummy, wo ich eine Zeiteingabe tätige den Wert ändere und meine DOIFs aktualisiert werden, sieft die Definition des DOIFs auf einmal so aus:
"Lustigerweise" hat der die {ReadingsVal("...")} Befehle wohl direkt durch die aktuellen Werte ausgetauscht und in die Definition des DOIFs übernommen.
Somit kann ich nun Änderungen aus meinen Zeitdummies nicht mehr in die DOIFs übernehmen lassen.

(([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Terrasse:state] eq "closed") and ([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru:state]) and  ([10:00-21:30]) or
  ([du_Rollo_Master:state] eq "an") and [21:30])
(set du_EG_wz_RO_TerrasseLinks off)
DOELSEIF ((([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Terrasse:state] eq "open")) or
(([du_Rollo_Master:state] eq "an") and ([EG_wz_TK_Terrasse:state] eq "closed") and ([EG_dr_TS_Terrasse:luminosity] > [du_Rollo_Luminosity_ru:state]) and  ([06:45-10:00]) or
  ([du_Rollo_Master:state] eq "an") and [10:00]))
(set du_EG_wz_RO_TerrasseLinks on)


Mit dieser Version aus einem Backup werden die Ersetzungen nicht durchgeführt.

$Id: 98_DOIF.pm 7147 2014-12-06 15:48:42Z damian-s $

Das DOIF, welches auf die Eingaben in den Feldern von den Dummies reagiert sieht so aus:

DEF        ([du_Rollo_Luminosity_ru] or [du_Rollo_Zeit_ru_start] or [du_Rollo_Zeit_ru_ende] or [du_Rollo_Zeit_ho_start] or [du_Rollo_Zeit_ho_WE_start] or [du_Rollo_Zeit_ho_ende]) (modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF])
   NAME       di_Rollo_SetTime
   NR         27
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2014-12-29 12:02:21   cmd_event       du_Rollo_Zeit_ru_start
     2014-12-29 12:02:21   cmd_nr          1
     2014-12-22 17:12:39   e_du_Rollo_Zeit_ho_WE_start_STATE 08:30
     2014-12-29 12:02:21   e_du_Rollo_Zeit_ru_start_STATE 10:15
     2014-12-29 12:02:21   state           cmd_1
   Condition:
     0          InternalDoIf('du_Rollo_Luminosity_ru','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_start','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_ende','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_start','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_WE_start','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_ende','STATE','')
   Devices:
     0           du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende du_Rollo_Zeit_ho_start du_Rollo_Zeit_ho_WE_start du_Rollo_Zeit_ho_ende
     all         du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende du_Rollo_Zeit_ho_start du_Rollo_Zeit_ho_WE_start du_Rollo_Zeit_ho_ende
   Do:
     0          modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE du_Rollo_Zeit_ho_start:STATE du_Rollo_Zeit_ho_WE_start:STATE du_Rollo_Zeit_ho_ende:STATE
     all         du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE du_Rollo_Zeit_ho_start:STATE du_Rollo_Zeit_ho_WE_start:STATE du_Rollo_Zeit_ho_ende:STATE
   State:
Attributes:
   do         always
   group      z_doif
   room       Licht/Rollo

   
Ist das Verhalten ggf so gewollt?
Wenn ja, frage ich hier mal, wie ich mich denn dazu anstellen müsste, diese Parametrierung meiner DOIFs wieder zu ermöglichen?  :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Dezember 2014, 13:10:27
Zitat von: maxritti am 29 Dezember 2014, 12:08:10
 
Ist das Verhalten ggf so gewollt?
Wenn ja, frage ich hier mal, wie ich mich denn dazu anstellen müsste, diese Parametrierung meiner DOIFs wieder zu ermöglichen?  :)

Ich glaube nicht, dass DOIF damit etwas zu tun hat. Ich habe es gerade mit der aktuell eingecheckten Version bei mir nachgestellt:

Internals:
   CFGFN
   DEF        ([{ReadingsVal("test_d","state","00:00")}])(set bla on)
   NAME       di_test
   NR         395
   NTFY_ORDER 50-di_test
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2014-12-29 13:02:00   cmd_event       timer_1
     2014-12-29 13:02:00   cmd_nr          1
     2014-12-29 13:02:00   error           set bla on: Please define bla first
     2014-12-29 13:02:00   state           cmd_1
     2014-12-29 13:02:00   timer_1_c1      30.12.2014 13:02:00
   Condition:
     0          DOIF_time_once($hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0          set bla on
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
   Readings:
   Realtime:
     0          13:02:00
   State:
   Time:
     0          {ReadingsVal("test_d","state","00:00")}
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
Attributes:


Im Dummy test_d stand 13:02. Die aktuelle Version verhält sich wie die alte. Unter Time sieht man den angegebenen Reading und auch die Deklaration wurde nicht verändert (siehe DEF). Das Kommando wurde um 13:02 Uhr ausgeführt und die Zeit auf den nächsten Tag gesetzt.

Ich würde bei dir auf eine alte Konfiguration tippen, die du selbst mal so definiert hast.

Gruß

Damian




Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Dezember 2014, 13:48:26
Danke Dir schon mal für die Hilfe.
Wo ich das ganze so geschrieben habe, kam mir das auch ein wenig komisch vor, dies auf das DOIF zu schieben.
Noch komischer ist es ja, dass durch das einspielen des "alten" DOIFs, die Definition nicht mehr verändert wird.

Gerade eben habe ich mal in einer neuen VM Ware ein Debian aufgesetzt und dort ein frisch installiertes FHEM an den Start gebracht.
Dann brav ein "update" in FHEM eingegeben und neu gestartet.

DOIF ist dann mit der Version vorhanden:

$Id: 98_DOIF.pm 7338 2014-12-27 22:26:00Z damian-s $

Dann habe ich folgende 4 Devices angelegt:

1. Eingabe einer Zeit über diesen Dummy

define du_Eingabe dummy
attr du_Eingabe setList state:textField
attr du_Eingabe webCmd state

   
2. Dieser Dummy dient mal zu Ausgabe, wenn das DOIF zuschlägt

define du_Ausgabe dummy

3. Hier das DOIF welches zu der im Dummy eingegebenen Zeit losrennen soll

define di_Rollo DOIF ([{ReadingsVal("du_Eingabe", "state", "00:00")}]) (set du_Ausgabe "DOIF executed")
   
4. Dieses DOIF triggert auf das in 1. definierte Textfeld und aktualisiert die Definition des in 3. definierten DOIFs
 
define di_SetTime DOIF ([du_Eingabe]) (modify di_Rollo [di_Rollo:&DEF])
attr di_SetTime do always


Wenn nun in dem Dummy du_Eingabe eine Zeit eingegeben wird und das Feld gewechselt wird, dann schlägt das di_SetTime zu und ändert die Definition des DOIF di_Rollo.
Dann steht dort in eckigen Klammern der eingegebene Zeitwert drin und nicht mehr ReadingsVal(..)

Ich weiss gar nicht ob ich hoffen soll, dass es bei Dir auch so ist.  ;)
Eine grossartige Konfiguration habe ich ja in dem Test FHEM nicht wirklich. Ausser den o.a. 4 Devices.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Dezember 2014, 14:29:31
OK.
Dass du

define di_SetTime DOIF ([du_Eingabe]) (modify di_Rollo [di_Rollo:&DEF])

definiert hast, hast du nicht geschrieben.

Das hat tatsächlich etwas mit dem Update zu tun.

Vorher wurde Code in geschweiften Klammern bei einem FHEM-Befehl ausgeführt, wenn er zusätzlich in runde Klammern gepackt wurde, nun wird er auch ohne runde Klammern ausgeführt. Das führt zu diesem Verhalten.

Tja, sollte eine Vereinfachung sein - dann werde ich wohl das alte Verhalten wieder einbauen müssen.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Dezember 2014, 14:36:22
Zitat von: Damian am 29 Dezember 2014, 14:29:31
OK.
Dass du

define di_SetTime DOIF ([du_Eingabe]) (modify di_Rollo [di_Rollo:&DEF])

definiert hast, hast du nicht geschrieben.

Sorry.
Das nächste mal gebe ich hoffentlich vollständige Infos ab.

Zitat von: Damian am 29 Dezember 2014, 14:29:31Das hat tatsächlich etwas mit dem Update zu tun.

Vorher wurde Code in geschweiften Klammern bei einem FHEM-Befehl ausgeführt, wenn er zusätzlich in runde Klammern gepackt wurde, nun wird er auch ohne runde Klammern ausgeführt. Das führt zu diesem Verhalten.

Tja, sollte eine Vereinfachung sein - dann werde ich wohl das alte Verhalten wieder einbauen müssen.

Gruß

Damian

Dafür wäre ich Dir sehr dankbar.
Wobei ich das eh schon bin für dieses Modul DOIF.
Das macht etliches erheblich einfacher.
Titel: Antw:neues Modul DOIF
Beitrag von: Sany am 29 Dezember 2014, 15:03:32
Hi Damian,

erst mal auch von mir ganz ganz herzlichen Dank für das DOIF-Modul. Als Umsteiger von Homeputer/FS20/php habe ich mich durch alle möglichen Ebenen von fhem und Perl "gegraben" und verschiedenste Dinge realisiert, aber mit DOIF kann man wirklich sehr schön auch komplexe Dinge verwirklichen.

Das von maxritti eben beschriebene Problem habe ich auch, nicht nur readingsVal wird ersetzt, sondern auch alle sunset/sunrise Funktionen.
Gut daß ich immer über die DEF programmiere und alles per notepad++ vorschreibe. Da steht noch die letzte funktionierende Version. :)

Ich nehme an, Du schreibst hier kurz wenn Du das wieder umgestellt hast?

Schon mal einen guten Rutsch und erfolgreiches 2015!

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Dezember 2014, 15:22:55
Korrigierte Version wurde eingecheckt. Morgen per Update verfügbar oder hier downloaden:

http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 29 Dezember 2014, 20:14:28
Zitat von: Damian am 27 Dezember 2014, 19:13:10
DOIF wertet keine Events aus - hat bisher offenbar noch keiner vermisst. Es wird allerdings durch einen Trigger geweckt, wenn das entsprechende Device angegeben wird.

Eine Auswertung von Events ließe sich aber relativ leicht einbauen.

Gruß

Damian
Hallo Damian,
Ja, das mit dem Dummy habe ich auch schon probiert,  Aber so trivial ist das auch nicht, da das Dummy-Device "pressed" nur so lange zeigen darf, wie die Taste gedrückt ist.... habe noch keine Ahnung, wie ich das Event "trigger" oder "partial_n dafür nutzen kann.
Besteht die Chance, dass Event-Auswertungen  mit ins DOIF kommen?

Danke und Gruß,
Christian

Dann werde ich den Taster zunächst ohne sequence betreiben....
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Dezember 2014, 21:16:54
Zitat von: Spartacus am 29 Dezember 2014, 20:14:28
Hallo Damian,
Ja, das mit dem Dummy habe ich auch schon probiert,  Aber so trivial ist das auch nicht, da das Dummy-Device "pressed" nur so lange zeigen darf, wie die Taste gedrückt ist.... habe noch keine Ahnung, wie ich das Event "trigger" oder "partial_n dafür nutzen kann.
Besteht die Chance, dass Event-Auswertungen  mit ins DOIF kommen?

Danke und Gruß,
Christian

Dann werde ich den Taster zunächst ohne sequence betreiben....

Kann ich auf die todo-Liste setzen, allerdings würde mit

define seq sequence BT1:on 1 BT1:on

define di DOIF ([seq:?trigger]) (set...)

nichts anderes sein als:

define ny notify  seq:trigger set dum on
define di DOIF ([dum] eq "on") (set ...)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 30 Dezember 2014, 08:28:38
Zitat von: Damian am 29 Dezember 2014, 21:16:54
Kann ich auf die todo-Liste setzen, allerdings würde mit

define seq sequence BT1:on 1 BT1:on

define di DOIF ([seq:?trigger]) (set...)

nichts anderes sein als:

define ny notify  seq:trigger set dum on
define di DOIF ([dum] eq "on") (set ...)


Gruß

Damian
Moin Damian,
M.E. ist das doch ein Unterschied. Vielleicht durchschaue ich es nicht ganz, aber der Trigger der Sequenz ist ein Impuls( off-on-off), der dann die Aktion im DOIF auslöst. Im zweiten Beispiel bleibt der Dummy auf "on"  Das Dummy-Device müsste quasi direkt wieder auf "off" gesetzt werden, damit der Langdruck als Impuls verstanden wird.

([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [?rp.02.EG.ku.SD.Kochinsel] eq "off")
(set rp.02.EG.ku.SD.Kochinsel on)
DOELSEIF ([PTM210.Gira.01:state] eq "A0" and [rp.02.EG.ku.SD.Kochinsel] eq "off")
(set rp.02.EG.ku.SD.Kochinsel on)
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [rp.02.EG.ku.SD.Kochinsel] eq "on" and [diEingangsLicht] eq "sensor_on")
(set rp.02.EG.ku.SD.Kochinsel off)
DOELSEIF ([PTM210.Gira.01:state] eq "A0" and [rp.02.EG.ku.SD.Kochinsel] eq "on")
(set rp.02.EG.ku.SD.Kochinsel off)

PTM210 ist hier der Taster um den es geht. Und das Kriege ich mit dem Dummy so nicht hin.

...noch eine Frage in anderer Sache:
ich möchte Neujahr von 0:00 bis 02:00 eine Lampe einschalten. Das Holiday Modul wird erst um 00:00:02 aktualisiert, sodass ich mit
[00:00-02:00] and [hl.01.Feiertag] eq "Neujahr"
nichts anfangen kann. Stattdessen würde ich
[24:00-02:00] and [hl.01.Feiertag] eq "Silvester" nehmen wollen, Wertet das DOIF den Zeitraum 24:00 Uhr - 02:00 aus?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Dezember 2014, 18:14:39
Zitat von: Spartacus am 30 Dezember 2014, 08:28:38
Moin Damian,
M.E. ist das doch ein Unterschied. Vielleicht durchschaue ich es nicht ganz, aber der Trigger der Sequenz ist ein Impuls( off-on-off), der dann die Aktion im DOIF auslöst. Im zweiten Beispiel bleibt der Dummy auf "on"  Das Dummy-Device müsste quasi direkt wieder auf "off" gesetzt werden, damit der Langdruck als Impuls verstanden wird.
Ein Trigger ist immer als ein Zeitpunkt zu verstehen - einen dauerhaften Zustand gibt es hier nicht. Das würde sich auch nicht ändern, wenn ich Triggerauswertung in DOIF einbauen würde. Der Dummy hat zwar den Zustand "on", getriggert wird das DOIF-Modul allerdings immer nur wenn seq:trigger triggert. Der Zustand des Dummys ist unerheblich an dieser Stelle, wenn man es sonst nirgendwo abfragt.

Zitat
...noch eine Frage in anderer Sache:
ich möchte Neujahr von 0:00 bis 02:00 eine Lampe einschalten. Das Holiday Modul wird erst um 00:00:02 aktualisiert, sodass ich mit
[00:00-02:00] and [hl.01.Feiertag] eq "Neujahr"
nichts anfangen kann. Stattdessen würde ich
[24:00-02:00] and [hl.01.Feiertag] eq "Silvester" nehmen wollen, Wertet das DOIF den Zeitraum 24:00 Uhr - 02:00 aus?
Christian

Ob 00:00 oder 24:00 ist egal, das sieht man an den gesetzten Timern. Getriggert wird immer zum Zeitpunkt der gesetzten Timer und wenn hl.01.Feiertag sich ändert. Von 00:00 bis 02:00 ist die Abfrage logisch als wahr zu sehen.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 30 Dezember 2014, 18:51:49
ZitatOb 00:00 oder 24:00 ist egal, das sieht man an den gesetzten Timern. Getriggert wird immer zum Zeitpunkt der gesetzten Timer und wenn hl.01.Feiertag sich ändert. Von 00:00 und 02:00 ist die Abfrage logisch als wahr zu sehen.

Hallo Damian,
vielen Dank, dann würde das Licht ca. 2s nach Mitternacht angehen (Feiertag ändert sich von Silvester auf Neujahr), wenn ich die Abfrage auf Neujahr lasse, richtig?
Das wäre zu verkraften.
ZitatEin Trigger ist immer als ein Zeitpunkt zu verstehen - einen dauerhaften Zustand gibt es hier nicht. Das würde sich auch nicht ändern, wenn ich Triggerauswertung in DOIF einbauen würde. Der Dummy hat zwar den Zustand "on", getriggert wird das DOIF-Modul allerdings immer nur wenn seq:trigger triggert. Der Zustand des Dummys ist unerheblich an dieser Stelle, wenn man es sonst nirgendwo abfragt.
Das ist interessant! Bedeutet, dass "on" hier keinerlei Bedeutung hat? Wenn ich also ein zweites mal den Taster betätige, wäre das Dummy-Device ja bereits auf "on". Der Trigger aus der Sequence würde das Dummy Device erneut auf "on" setzten, obwohl es auf "on"  ist, und das würde dann tatsächlich die Aktion im DOIF auslösen?

Christian

Gruß,
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Dezember 2014, 19:00:36
Zitat von: Spartacus am 30 Dezember 2014, 18:51:49
Hallo Damian,
vielen Dank, dann würde das Licht ca. 2s nach Mitternacht angehen (Feiertag ändert sich von Silvester auf Neujahr), wenn ich die Abfrage auf Neujahr lasse, richtig?
Das wäre zu verkraften.Das ist interessant! Bedeutet, dass "on" hier keinerlei Bedeutung hat? Wenn ich also ein zweites mal den Taster betätige, wäre das Dummy-Device ja bereits auf "on". Der Trigger aus der Sequence würde das Dummy Device erneut auf "on" setzten, obwohl es auf "on"  ist, und das würde dann tatsächlich die Aktion im DOIF auslösen?

Christian

Gruß,
Christian.

ja und ja.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Rammlet am 30 Dezember 2014, 19:21:09
Hallo zusammen

Habe Jetzt mal wieder ein wenig umgebaut und mein Flur mit einem RGB WIFI modul ausgerüstet.
dieses wird über 2 Bewegungsmelder eingeschaltet. jetzt möchte ich noch gerne einen Taster einbinden der das Licht Weiß also RGB FFFFFF Schaltet wenn es mal Hell sein soll.
Wenn sich in der zeit im Flur bewegt wird soll es Weiß Bleiben. Es soll unterschieden werden bei Kurtzem Tasten duck geht das licht 60sek an bei langem 1800sek wenn die zeit um ist und sich immer noch im flur bewegt wird soll das licht dann Weiß bleiben bis nach Ablauf einer zeit keine Bewegung mehr erkannt wird.

Leider hänge ich dort etwas Bewegungs melder geht leider der rest nicht komme nur nicht auf den Fehler



define RGB_Floor_Motion_d dummy
attr RGB_Floor_Motion_d room Test
#
define di_RGB_Floor_Motion_SchalterS DOIF ([MD_FloorS] eq "motion" ) (set RGB_Floor_Motion_d on, set RGB_Floor_Motion_d off)
attr di_RGB_Floor_Motion_SchalterS do always
attr di_RGB_Floor_Motion_SchalterS room Test
#
define di_RGB_Floor_Motion_SchalterB DOIF ([MD_FloorB] eq "motion" ) (set RGB_Floor_Motion_d on, set RGB_Floor_Motion_d off)
attr di_RGB_Floor_Motion_SchalterB do always
attr di_RGB_Floor_Motion_SchalterB room Test
#
define di_RGB_Floor_Motion_Licht DOIF ([RGB_Floor_Motion_d] eq "on")  (set AKT_RGB_Floor1 RGB 0000FF) DOELSE  (set AKT_RGB_Floor1 RGB 000000)
attr di_RGB_Floor_Motion_Licht room Test
attr di_RGB_Floor_Motion_Licht wait 0:120
######################################################################################################################################
define SEN_SWI_Floor1_FloorLightWhite_d dummy
attr SEN_SWI_Floor1_FloorLightWhite_d room Test
define di_SEN_SWI_Floor1_FloorLightWhite DOIF ([SEN_SWI_Floor1_FloorLightWhite] =~/short/ )   (set SEN_SWI_Floor1_FloorLightWhite_d short, set SEN_SWI_Floor1_FloorLightWhite_d short_off) DOELSEIF ([SEN_SWI_Floor1_FloorLightWhite] =~/long/)  (set SEN_SWI_Floor1_FloorLightWhite_d long, set SEN_SWI_Floor1_FloorLightWhite_d long_off)
attr di_SEN_SWI_Floor1_FloorLightWhite do always
attr di_SEN_SWI_Floor1_FloorLightWhite room Test
define di_AKT_RGB_Floor1 DOIF ([SEN_SWI_Floor1_FloorLightWhite_d] eq "short" or [SEN_SWI_Floor1_FloorLightWhite_d] eq "long")   (set AKT_RGB_Floor1 RGB FFFFFF) DOELSEIF ([SEN_SWI_Floor1_FloorLightWhite_d] eq "short_off")   (set AKT_RGB_Floor1 RGB 000000) DOELSEIF ([SEN_SWI_Floor1_FloorLightWhite_d] eq "long_off")   (set AKT_RGB_Floor1 RGB 000000) DOELSEIF ([MD_FLOORB] eq "on" and [AKT_RGB_Floor1] eq "off")  (set AKT_RGB_Floor1 RGB FFFFFF) DOELSEIF ([MD_FLOORB] eq "off")  (set AKT_RGB_Floor1 RGB 000000)
attr di_AKT_RGB_Floor1 room Test
attr di_AKT_RGB_Floor1 wait 0:60:1800:0:10
Titel: Antw:neues Modul DOIF
Beitrag von: DC am 30 Dezember 2014, 19:31:09
Hallo !

Ich finde das neue Modul toll und habe es auch schon zur Waschmaschinen-Überwachung siehe auch hier (http://forum.fhem.de/index.php/topic,30057.0.html) eingesetzt. Allerdings ist es recht mühsam, alle 67 Seiten dieses Threads durchzulesen, um zu verstehen, was man da eigentlich macht (mich irritiert z.B., dass man alle Befehle bei einer Verschachtelung "Case" in eine Zeile schreiben muss - es sei den, ich hab was überlesen - und was ist aktuell und was nicht...). Es wäre toll, wenn der aktuelle Status im Wiki oder auf der Startseite dieses Threads gepflegt werden könnte... Hab gerade die neue Commandref gefunden, in sofern hat sich das gerade erledigt, Danke !

Allerdings möchte ich trotzdem vorschlagen, diesen Thread hier zu schließen und den Support auf einzelne Themen aufzuteilen: so kann man vermeiden, dass viele Fragen oft gestellt werden.

Danke !
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 31 Dezember 2014, 09:51:22
Zitat von: Damian am 30 Dezember 2014, 19:00:36
ja und ja.

Gruß

Damian
Super!
Besten Dank.

Eine Sache habe ich noch! Heute Nacht hat meine Gartenbeleuchtung eingeschaltet. Das sollte so nicht passieren und ich glaube, den Fehler auch gefunden zu haben, bin mir aber nicht sicher! Deshalb wäre es prima, wenn noch einmal jemand drüber guckt....

(
([16:30-22:30|56] or
[16:30-22:30] and  [hl.01.Feiertag:tomorrow] ne "none" or
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or
[16:30-02:00] and [hl.01.Feiertag] eq "Silverster"
) and [Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)

M.E. hat das Umschalten auf "Silvester" um kurz nach 0:00 Uhr zugeschlagen.

Eigentlich soll das Licht erst heute Nacht, also von Silvester, 16:00 Uhr bis Neujahr 02:00 einschalten.
Reicht es aus, den Trigger für "Feiertag" zu entfernen?
  [16:30-02:00] and [?hl.01.Feiertag] eq "Silverster"
Oder funktioniert das nicht?

Danke,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 31 Dezember 2014, 10:01:18
Zitat von: Spartacus am 31 Dezember 2014, 09:51:22
Super!
Besten Dank.

Eine Sache habe ich noch! Heute Nacht hat meine Gartenbeleuchtung eingeschaltet. Das sollte so nicht passieren und ich glaube, den Fehler auch gefunden zu haben, bin mir aber nicht sicher! Deshalb wäre es prima, wenn noch einmal jemand drüber guckt....

(
([16:30-22:30|56] or
[16:30-22:30] and  [hl.01.Feiertag:tomorrow] ne "none" or
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or
[16:30-02:00] and [hl.01.Feiertag] eq "Silverster"
) and [Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)

M.E. hat das Umschalten auf "Silvester" um kurz nach 0:00 Uhr zugeschlagen.

Eigentlich soll das Licht erst heute Nacht, also von Silvester, 16:00 Uhr bis Neujahr 02:00 einschalten.
Reicht es aus, den Trigger für "Feiertag" zu entfernen?
  [16:30-02:00] and [?hl.01.Feiertag] eq "Silverster"
Oder funktioniert das nicht?

Danke,
Christian
ja, so wird nur um 16:30 und um 02:00 getriggert und nächstes Jahr sollte die Lampe nicht mehr um Mitternacht zu Silvester angehen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 31 Dezember 2014, 10:30:32
Hallo Damian,
super! Danke. Dann muss ich jetzt noch ein Jahr warten.....

Parallel habe ich Deinen Vorschlag mit Sequence und dem Dummy ausprobiert. Aber da baue ich dann ein schönes Blinklicht. Das funktioniert leider nicht so, wie ich mir das vorgestellt habe....

define sKurzerLangerDruck_UR sequence PTM210.Gira.01:BI 0.5 PTM210.Gira.01:buttons:.released
attr sKurzerLangerDruck_UR triggerPartial 1
...
define nLangerDruck_UR notify sKurzerLangerDruck_UR:partial_1 set LangDruck on
---
define LangDruck dummy

und dann das DOIF:
define diEingangsLicht DOIF (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [?rp.02.EG.ku.SD.Kochinsel] eq "off") \
(set rp.02.EG.ku.SD.Kochinsel on)\
DOELSEIF ([LangDruck] eq "on" and [rp.02.EG.ku.SD.Kochinsel] eq "off") \
(set rp.02.EG.ku.SD.Kochinsel on)\
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [rp.02.EG.ku.SD.Kochinsel] eq "on" and [diEingangsLicht] eq "sensor_on") \
(set rp.02.EG.ku.SD.Kochinsel off)\
DOELSEIF ([LangDruck] eq "on" and [rp.02.EG.ku.SD.Kochinsel] eq "on")\
(set rp.02.EG.ku.SD.Kochinsel off)
attr diEingangsLicht cmdState sensor_on|manual_on|sensor_off|manual_off
attr diEingangsLicht wait 0:0:10:0


Wenn ich LangDruck gegen
[PTM210.Gira.01:state] eq "A0" ersetze funzt es wie es soll.
Irgendwie muss das Dummy wieder auf "released" sonst klappt das austasten nicht...
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Papaloewe am 31 Dezember 2014, 10:36:16
@Spartatcus
Schau mal du hast "Silverster" und nicht "Silvester" geschrieben.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 31 Dezember 2014, 11:28:11
Zitat von: Papaloewe am 31 Dezember 2014, 10:36:16
@Spartatcus
Schau mal du hast "Silverster" und nicht "Silvester" geschrieben.

Der Schreibfehler ist ein Folgefehler.  ;)

Steht nämlich auch so in seiner Holiday Datei drin.

http://forum.fhem.de/index.php/topic,30861.msg234256.html#msg234256
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 31 Dezember 2014, 13:05:04
Hallo zusammen,
habe den Fehler korrigiert. Zufall, dass ich es durchgängig falsch geschrieben hatte...
Danke und Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: raimundl am 01 Januar 2015, 14:41:09
Hallo und Danke für all die Möglichkeiten.
Erste Schritte getan, Anwendung funktioniert - trotzdem die Bitte einen Blick darauf zu werfen:

Was:
Anwesenheitssimulation (wenn Handy Nexus4 absent) durch Einschalten einer Beleuchtung mit Verständigung über Pushover ab "sunset" bis zu einer bestimmten Uhrzeit.

Wie (aus fhem.cfg):
define nichtda DOIF ([{sunset("REAL",0,"15:00","22:00")}-23:00] and ([Nexus4] eq "absent")) (set EG_Decke02 on-till 23:09:50, set Pushover1 msg 'Titel' 'Anwesenheitssimulation' '' 0 '')\

Frage:
Wieso wird bei "sunset" und "absent" der Befehl für die Einschaltung der Beleuchtung und die Verständigung zweimal (Abstand ca. 1 Minute) ausgeführt:

2014-12-31_16:03:35 EG_Decke02 set_on-till 23:09:50
2014-12-31_16:03:36 EG_Decke02 level: 100
2014-12-31_16:03:36 EG_Decke02 pct: 100
2014-12-31_16:03:36 EG_Decke02 deviceMsg: on (to CUL0)
2014-12-31_16:03:36 EG_Decke02 on
2014-12-31_16:03:36 EG_Decke02 timedOn: running
2014-12-31_16:05:20 EG_Decke02 set_on-till 23:09:50
2014-12-31_16:05:22 EG_Decke02 level: 100
2014-12-31_16:05:22 EG_Decke02 pct: 100
2014-12-31_16:05:22 EG_Decke02 deviceMsg: on (to CUL0)
2014-12-31_16:05:22 EG_Decke02 on
2014-12-31_16:05:22 EG_Decke02 timedOn: running

Die Funktion ist dadurch nicht gestört!

LG

Edit: Heute mit "sunset_abs()" probiert - auch zweimal ausgeführt. Es dürfte jeweils mit neuem "sunset-Zeitpunkt" zu tun haben (jeden Tag jetzt ca. 1 Min. später)?
Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 01 Januar 2015, 20:34:30
Hallo,


da ich mit meinen Notifys und AT Befehlen ein paar Schwierigkeiten bei der richtigen Abfolge meiner Befehle hatte, bin ich dabei auf das tolle DOIF Modul um zu steigen.

Es gefällt mir sehr gut und vereinfacht die Sache auch enorm aus meiner Sicht.

Ein kleine kleines Problem habe ich allerdings mit einer Uhrzeit die in einem Dummy gespeichert ist:

define wk.Waschzeit_change dummy
attr wk.Waschzeit_change icon icoUhr
attr wk.Waschzeit_change room Waschkeller
attr wk.Waschzeit_change setList state:time
attr wk.Waschzeit_change userReadings update {return 1}
attr wk.Waschzeit_change webCmd state


In dem Dummy speichere ich die Zeit, wann die Waschmaschine laufen soll.
Ich habe ein userReading "update" angelegt, damit ich im doif darauf eine Bedingung setzen kann

Die ensprechende DOIF Anbrage läuft dann erst mal auf das UserReading mit dem Namen "update" und die Zeit hole ich über die Perl Funktion ReadingsVal.

DOELSEIF ([wk.Waschzeit_change:update]>0 && [{ReadingsVal("wk.Waschzeit_change","state","00:00")}] && [wk.WaschmaschineWartemodus] eq "on" ) (set wk.WaschmaschineWartemodus off,set wk.Waschmaschine_Betrieb on,set wk.PwrSw_Switch on)


Ich hatte gehofft, dass die Uhrzeit durch das Prüfung auf das userReading bei jedem Ändern der Uhrzeit im dummy Waschzeit_change geändert wird. Leider klappt das aber nicht.

Wie könnte ich das bewerkstelligen, dass die Uhrzeit in der DOIF aktualisiert wird?

Grüße Sidey


Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 01 Januar 2015, 20:59:24
Hi Sidey,

schau mal hier (Punkt 4), da habe ich das auch realisiert:

http://forum.fhem.de/index.php/topic,23833.msg236727.html#msg236727

Du musst ein zusätzliches DOIF definieren, welches auf Änderungen Deiner Uhrzeit in dem Dummy wk.Waschzeit_change reagiert und dann die Definition deines DOIFs neu schreibt.
Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 01 Januar 2015, 22:51:51
Hi Maxritti,

hatte schon gedacht, dass es die Fragestellung schon mal gab, es aber einfach nicht gefunden.
Danke dir. So was in der Art habe ich schon mal über ein Notify gemacht. Aber das Notify kommt nicht auf das Internal so einfach wie das DOIF, verstehe jetzt wieso Du das verwendet hast.

Ich habe nun ein wenig gerätselt, wieso

modify wk.Waschmaschine_DI {InternalVal("wk.Waschmaschine_DI","DEF","")}

nicht geht, aber keine Antwort gefunden. Wenn die Zeile so gehen würde, dann könnte man die ja in das dummy als userReading einbauen.

define wk.WamaSetTime DOIF ([wk.Waschzeit_change]) (modify wk.Waschmaschine_DI [wk.Waschmaschine_DI:&DEF])
aktualsiert das DOIF  "wk.Waschmaschine_DI"

Allerdings wird der Abschnitt ReadingsVal nicht durch die Zeit ersetzt, wüsste auch nicht wieso.
Das ginge doch nur, wenn ich ReadingsVal in eine Variable speichere und dann an dieser Stelle den Wert der Varialble einsetze oder?

Grüße Sidey
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 01 Januar 2015, 23:13:56
Hi,

ich verstehe jetzt nicht ganz, auf was Du raus willst?
Klappt das nicht mit dem DOIF, welches auf die Änderung in Deinem Zeitdummy reagiert und die DEF des anderen DOIFs ändert?

Zitat von: Sidey am 01 Januar 2015, 22:51:51
Allerdings wird der Abschnitt ReadingsVal nicht durch die Zeit ersetzt, wüsste auch nicht wieso.
Das ginge doch nur, wenn ich ReadingsVal in eine Variable speichere und dann an dieser Stelle den Wert der Varialble einsetze oder?

Grüße Sidey

Es braucht auch nicht wirklich etwas ersetzt werden. Denn genau das wäre ja falsch, so wie es in der letzten Version war.

Es geht darum, dass das DOIF intern Timer verwendet um zu den gewünschten Zeitpunkten zu reagieren.
Diese werden mMn bei der Initialisierung des DOIFs gesetzt und können mit dem modify bewusst aktualisiert werden.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Januar 2015, 23:22:14
Zitat von: raimundl am 01 Januar 2015, 14:41:09
Hallo und Danke für all die Möglichkeiten.
Erste Schritte getan, Anwendung funktioniert - trotzdem die Bitte einen Blick darauf zu werfen:

Was:
Anwesenheitssimulation (wenn Handy Nexus4 absent) durch Einschalten einer Beleuchtung mit Verständigung über Pushover ab "sunset" bis zu einer bestimmten Uhrzeit.

Wie (aus fhem.cfg):
define nichtda DOIF ([{sunset("REAL",0,"15:00","22:00")}-23:00] and ([Nexus4] eq "absent")) (set EG_Decke02 on-till 23:09:50, set Pushover1 msg 'Titel' 'Anwesenheitssimulation' '' 0 '')\

Frage:
Wieso wird bei "sunset" und "absent" der Befehl für die Einschaltung der Beleuchtung und die Verständigung zweimal (Abstand ca. 1 Minute) ausgeführt:

2014-12-31_16:03:35 EG_Decke02 set_on-till 23:09:50
2014-12-31_16:03:36 EG_Decke02 level: 100
2014-12-31_16:03:36 EG_Decke02 pct: 100
2014-12-31_16:03:36 EG_Decke02 deviceMsg: on (to CUL0)
2014-12-31_16:03:36 EG_Decke02 on
2014-12-31_16:03:36 EG_Decke02 timedOn: running
2014-12-31_16:05:20 EG_Decke02 set_on-till 23:09:50
2014-12-31_16:05:22 EG_Decke02 level: 100
2014-12-31_16:05:22 EG_Decke02 pct: 100
2014-12-31_16:05:22 EG_Decke02 deviceMsg: on (to CUL0)
2014-12-31_16:05:22 EG_Decke02 on
2014-12-31_16:05:22 EG_Decke02 timedOn: running

Die Funktion ist dadurch nicht gestört!

LG

Edit: Heute mit "sunset_abs()" probiert - auch zweimal ausgeführt. Es dürfte jeweils mit neuem "sunset-Zeitpunkt" zu tun haben (jeden Tag jetzt ca. 1 Min. später)?
Dein Modul wird zu Beginn und zum Ende des Zeitintervalls getriggert und jedesmal, wenn Nexus4 etwas sendet. Das Zeitintervall ist von sunset bis 23:00 Uhr wahr. D. h. wenn Nexus4 um 16:03:35 "absent" war, dann wird set ausgeführt und immer dann wenn nexus4 zwischen sunset und 23:00 Uhr sich meldet und "absent" ist, hier offenbar um 16:05:20.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: raimundl am 02 Januar 2015, 08:31:56
Zitat von: Damian am 01 Januar 2015, 23:22:14
Dein Modul wird zu Beginn und zum Ende des Zeitintervalls getriggert und jedesmal, wenn Nexus4 etwas sendet. Das Zeitintervall ist von sunset bis 23:00 Uhr wahr. D. h. wenn Nexus4 um 16:03:35 "absent" war, dann wird set ausgeführt und immer dann wenn nexus4 zwischen sunset und 23:00 Uhr sich meldet und "absent" ist, hier offenbar um 16:05:20.

Gruß

Damian

Hallo Damian!

Ich glaube den Grund für das (richtige) Verhalten gefunden zu haben:

"sunset" ist zum Beispiel am 29.12.2014 um 16:35 - bei erreichen dieser Zeit und Nexus4 "absent" wird die Bedingung wahr. Dann jedoch springt "sunset" sofort auf die Zeit vom nächsten Tag, das ist derzeit  ca. 2 Min. später, also 16:37 am 30.12.2014 und die Bedingung wird wieder wahr. Daher das zweimalige Schalten. Das Datum wird ja beim Zeitvergleich nicht berücksichtigt?

Danke und LG
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Januar 2015, 09:12:18
Zitat von: raimundl am 02 Januar 2015, 08:31:56
Hallo Damian!

Ich glaube den Grund für das (richtige) Verhalten gefunden zu haben:

"sunset" ist zum Beispiel am 29.12.2014 um 16:35 - bei erreichen dieser Zeit und Nexus4 "absent" wird die Bedingung wahr. Dann jedoch springt "sunset" sofort auf die Zeit vom nächsten Tag, das ist derzeit  ca. 2 Min. später, also 16:37 am 30.12.2014 und die Bedingung wird wieder wahr. Daher das zweimalige Schalten. Das Datum wird ja beim Zeitvergleich nicht berücksichtigt?

Danke und LG

ja, so ist es wohl. Du kannst neuerdings auch ein Fragezeichen davorsetzen, hier:
[?{sunset("REAL",0,"15:00","22:00")}-23:00], dann wird nur noch getriggert, wenn nexus4 den Status auf sbsent setzt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Januar 2015, 09:37:44
Hallo,
Zunächst wünsche ich allen ein Frohes Neues Jahr und alles Gute für 2015.

Ich bin nun dabei, meine Neujahrs uns Silvester-DOIFs auszuwerrrten. So richtig hat das alles nicht geklappt und versuche nun den Fehler zu finden.   
(
([16:30-22:30|56] or
[16:30-22:30] and  [hl.01.Feiertag:tomorrow] ne "none" or
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or
[16:30-02:00] and [?hl.01.Feiertag] eq "Silvester"
) and [Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)


Irgendwie hatte ich erwartet, dass mein Licht bis 02:00 Uhr brennt, schaltete sich aber um 00:00:03 Uhr ab. Offenbar wird doch auf den Kalender und "Silvester" getriggert.
Das verstehe ich aber nicht.
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Januar 2015, 10:12:23
Zitat von: Spartacus am 02 Januar 2015, 09:37:44
Hallo,
Zunächst wünsche ich allen ein Frohes Neues Jahr und alles Gute für 2015.

Ich bin nun dabei, meine Neujahrs uns Silvester-DOIFs auszuwerrrten. So richtig hat das alles nicht geklappt und versuche nun den Fehler zu finden.   
(
([16:30-22:30|56] or
[16:30-22:30] and  [hl.01.Feiertag:tomorrow] ne "none" or
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or
[16:30-02:00] and [?hl.01.Feiertag] eq "Silvester"
) and [Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)


Irgendwie hatte ich erwartet, dass mein Licht bis 02:00 Uhr brennt, schaltete sich aber um 00:00:03 Uhr ab. Offenbar wird doch auf den Kalender und "Silvester" getriggert.
Das verstehe ich aber nicht.
Christian

ja, die Bedingung wird ja von [hl.01.Feiertag:tomorrow] getriggert. Also auch bei diesen Angaben Fragezeichen davorstellen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Januar 2015, 11:02:41
Hi Damian,
ok, (hoffentlich) verstanden! Das heißt, der Trigger vom Kalender steht über der Zeitangabe. Dann erklären sich auch einige andere Phänomene anderer DOIFs.

Jetzt habe ich in der folgenden Anweisung auch noch einen Fehler. Das Licht wurde gestern an Neujahr durch TK und LS eingeschaltet, aber nicht mehr ausgeschaltet. Ist auch klar, da ich das Abschalten in "cmd2"  durch "Neujahr" verhindere. Das ist natürlich Quatsch! Es darf nur während 00:00 und 02:00 an Neujahr verhindert werden.

((([EG.ss.TK.Haustuer:buttons] eq "pressed") or
   [EG.ss.LS.Eingang:buttons] eq "pressed") and [Tageslicht.dum] eq "dunkel" or
   [00:00-02:00] and [?hl.01.Feiertag] eq "Neujahr")
   (set EI.ss.SA.Licht on)
DOELSEIF
([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [?hl.01.Feiertag] ne "Neujahr" )
   (set EI.ss.SA.Licht off)
DOELSEIF
  (([TK.Notaus.dum] eq "on" or [LS.Notaus.dum] eq "on") and [hl.01.Feiertag] ne "Neujahr")


Muss ich das dann so lösen?
DOELSEIF
([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and
!([00:00-02:00] and [?hl.01.Feiertag] ne "Neujahr") )
   (set EI.ss.SA.Licht off)


Beim Notaus (cmd3) dann identisch, damit auch das während 00:00 und 02:00 verhindert wird, richtig?

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Januar 2015, 11:18:32
Zitat von: Spartacus am 02 Januar 2015, 11:02:41
Hi Damian,
ok, (hoffentlich) verstanden! Das heißt, der Trigger vom Kalender steht über der Zeitangabe. Dann erklären sich auch einige andere Phänomene anderer DOIFs.
Es gibt keine Rangordnung beim Triggern. Entweder wird zu einem bestimmten Zeitpunkt getriggert oder eben nicht - es wird aber immer die ganze Bedingung ausgewertet. Zukünftig wird man mehrere unabhängige Bedingungen zu einem Kommando definieren können, dann haben sich hoffentlich die unabsichtlichen Abhängigkeiten erledigt.

Zitat
Jetzt habe ich in der folgenden Anweisung auch noch einen Fehler. Das Licht wurde gestern an Neujahr durch TK und LS eingeschaltet, aber nicht mehr ausgeschaltet. Ist auch klar, da ich das Abschalten in "cmd2"  durch "Neujahr" verhindere. Das ist natürlich Quatsch! Es darf nur während 00:00 und 02:00 an Neujahr verhindert werden.
Muss ich das dann so lösen?
DOELSEIF
([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and
!([00:00-02:00] and [?hl.01.Feiertag] ne "Neujahr") )
   (set EI.ss.SA.Licht off)


Beim Notaus (cmd3) dann identisch, damit auch das während 00:00 und 02:00 verhindert wird, richtig?

Das macht die Sache unnötig kompliziert und noch mehr unüberschaubar.

Ich würde das Intervall [00:00-02:00] trennen und ohne Intervall zum Einschalten mit "[00:00] and [?...Sylvester]" und zum Abschalten mit "[02:00] and [?... Neujahr]" definieren.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Januar 2015, 11:38:31
Ich würde das Intervall [00:00-02:00] trennen und ohne Intervall zum Einschalten mit "[00:00] and [...Sylvester]" und zum Abschalten mit "02:00 and [... Neujahr]" definieren.
Hi,
das Einschalten ist mir klar! Das sollte so aussehen:
((([EG.ss.TK.Haustuer:buttons] eq "pressed") or
   [EG.ss.LS.Eingang:buttons] eq "pressed") and [Tageslicht.dum] eq "dunkel" or
   [00:00] and [?hl.01.Feiertag] eq "Silvester")
   (set EI.ss.SA.Licht on)
.....


Aber das Abschalten durch die LS und den TK im DOELSEIF muss ich doch in dem Zeitraum 00:00 bis 02:00 verhindern? Wie soll das ohne Intervall gehen? Das verstehe ich nicht!
Das DOELSEIF (cmd2) hat ein wait von 120sec. als Ausschaltverzögerung. Und dieser Fall darf ja dann nicht eintreten..
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Januar 2015, 11:56:36
Zitat von: Spartacus am 02 Januar 2015, 11:38:31
Ich würde das Intervall [00:00-02:00] trennen und ohne Intervall zum Einschalten mit "[00:00] and [...Sylvester]" und zum Abschalten mit "02:00 and [... Neujahr]" definieren.
Hi,
das Einschalten ist mir klar! Das sollte so aussehen:
((([EG.ss.TK.Haustuer:buttons] eq "pressed") or
   [EG.ss.LS.Eingang:buttons] eq "pressed") and [Tageslicht.dum] eq "dunkel" or
   [00:00] and [?hl.01.Feiertag] eq "Silvester")
   (set EI.ss.SA.Licht on)
.....


Aber das Abschalten durch die LS und den TK im DOELSEIF muss ich doch in dem Zeitraum 00:00 bis 02:00 verhindern? Wie soll das ohne Intervall gehen? Das verstehe ich nicht!
Das DOELSEIF (cmd2) hat ein wait von 120sec. als Ausschaltverzögerung. Und dieser Fall darf ja dann nicht eintreten..
Christian

Ok. Offensichtlich durchschaue ich inzwischen nicht mehr die Intentionen deiner Definition. Die Wait-Definition kenne ich auch nicht. Na ja, du wirst schon besser wissen als ich, was du vorhast. Du kannst den Ausschaltzeitpunkt mit deinen Buttons kombinieren und einfach testen. Ich hoffe, dass dann nicht eine neue Abhängigkeit die Konstruktion wieder zunichte macht.

Das Prinzip des Moduls hast du ja im Wesentlich verstanden.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Januar 2015, 13:23:14
Damian,
ich bin Dir sehr dankbar für Deine Hilfe! Ich versuche jetzt seit fast 2 Monaten dieses ganze Konstrukt ans Fliegen zu kriegen und stolpere immer wieder über neue Probleme. Die ganze Sache ist sehr komplex und ich habe damals, vor 10 Jahren, auch sehr lange getüftelt, bis das mit der CControl mal lief.Der Ansatz mit dem DOIF ist sicherlich korrekt, aber ich komme einfach nicht weiter:

Ich liste hier nochmals alles auf, wäre echt toll, wenn Du Dir das mal ansiehst. Ich verstehe, dass es nicht ganz einfach ist, fremden Code nachzuvollziehen, aber vielleicht ist mein Ansatz auch nicht korrekt und alles ist viel einfacher!

Sensoren/Aktoren:
1. Taster: (später mit Langdruck über Sequence)
2. Lichtschranke: Ruhezustand->buttons:released, betätigt->buttons:pressed
3. Türkontakt: Tür zu->buttons:released, Tür offen-> buttons:pressed
4. Beleuchtung: Aktor
5. Notaus: Dummy

Abhängigkeiten:
- LS oder TK werden betätigt (buttons:pressed) -> Aktor schaltet ein, Ausschaltverzögerung 120s. (Das ist nötig, weil LS und TK nur einen Impuls abgeben ( released-> pressed-> released). Es soll auch nachgetriggert werden, bis die Notabschaltung greift!
- Der Aktor schaltet direkt ab, wenn der Zusatnd "pressed" bei LS oder TK länger als 10min anliegt. Es wird eine Mail verschickt. (Notabschaltung: Tür steht sehr lange auf, LS ist durch Gegenstand blockiert)
Der Aktor darf erst wieder freigegeben werden, wenn LS und TK auf "released" sind. (Tür ist wieder zu und LS nicht mehr blockiert!; das funktioniert noch nicht!)
- Der Aktor schaltet Neujahr von 0:00 Uhr bis 02:00 Uhr unabhängig vom Zusatand der LS und des TK (pressed, released ist egal; das funktioniert nicht korrekt!)
- Der Taster toggelt unabhängig von allen o.a. Bedingungen den Aktor per Klick auf die obere Wippe (Die Funktion läuft bereits mit dem TestCode, allerdings ohne Sequence) Hier ist zu beachten, dass bei eingeschaltetem Aktor, der Klick auf die Wippe diesen direkt (ohne Ausschaltverzögerung) ausschaltet und umgekehrt.

Die Sequece und die Ansteuerung eines TestLampeKurzDruck/TestlampeLangDruck-Dummys habe ich noch nicht in den Testcode einbauen können. Das klappt mit dem Dummy nicht!
siehe auch (http://forum.fhem.de/index.php/topic,23833.msg237801.html#msg237801 (http://forum.fhem.de/index.php/topic,23833.msg237801.html#msg237801))

altueller Code:
define di.02.EI.ss.SA.Licht DOIF ((([EG.ss.TK.Haustuer:buttons] eq "pressed") or \
   [EG.ss.LS.Eingang:buttons] eq "pressed") and [Tageslicht.dum] eq "dunkel" or \
   [00:00-02:00] and [?hl.01.Feiertag] eq "Neujahr")\
   (set EI.ss.SA.Licht on)\
DOELSEIF\
([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [hl.01.Feiertag] ne "Neujahr" )\
   (set EI.ss.SA.Licht off)\
DOELSEIF \
  (([TK.Notaus.dum] eq "on" or [LS.Notaus.dum] eq "on") and [hl.01.Feiertag] ne "Neujahr")\

attr di.02.EI.ss.SA.Licht alias autom. Eingangslicht
attr di.02.EI.ss.SA.Licht cmdState on|off|off
attr di.02.EI.ss.SA.Licht devStateIcon .*on:light_light_dim_100@lightgreen .*off:light_light_dim_00@red
attr di.02.EI.ss.SA.Licht disable 0
attr di.02.EI.ss.SA.Licht initialize cmd_2
attr di.02.EI.ss.SA.Licht room 05-Eingang
attr di.02.EI.ss.SA.Licht wait 0:120:0:0
#
#
# Email senden, wenn Tür länger als 10min auf steht
#
define di.03.EI.ss.SA.Licht DOIF ([EG.ss.TK.Haustuer:buttons] eq "pressed") ({eMail('name@domain.de','Warnung','Haustür steht offen')}, \
set EI.ss.SA.Licht off, set TK.Notaus.dum on)\

attr di.03.EI.ss.SA.Licht alias Warnung Eingang
attr di.03.EI.ss.SA.Licht cmdState Notaus|Leerlauf
attr di.03.EI.ss.SA.Licht room 05-Eingang
attr di.03.EI.ss.SA.Licht wait 600
#
# Email senden, wenn Lichtschranke länger als 10min blockiert ist
#
define di.04.EI.ss.SA.Licht DOIF ([EG.ss.LS.Eingang:buttons] eq "pressed") ({eMail('name@domain.de','WARNUNG! Lichtschranke bockiert!')}, \
set EI.ss.SA.Licht off, set LS.Notaus.dum on)\

attr di.04.EI.ss.SA.Licht alias Warnung Lichtschranke
attr di.04.EI.ss.SA.Licht cmdState Notaus|Leerlauf
attr di.04.EI.ss.SA.Licht room 05-Eingang
attr di.04.EI.ss.SA.Licht wait 600


TestCode:

define diEingangsLicht DOIF (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [?Aktor] eq "off") \
(set Aktor on)\
DOELSEIF ([PTM210.Gira.01:state] eq "A0" and [Aktor] eq "off") \
(set Aktor on)\
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [Aktor] eq "on" and [diEingangsLicht] eq "sensor_on") \
(set Aktor off)\
DOELSEIF ([PTM210.Gira.01:state] eq "A0" and [Aktor] eq "on")\
(set Aktor off)
attr diEingangsLicht cmdState sensor_on|manual_on|sensor_off|manual_off
attr diEingangsLicht disable 0
attr diEingangsLicht room 99-Test
attr diEingangsLicht wait 0:0:10:0
#
# Squence Test
#
define sKurzerLangerDruck_UR sequence PTM210.Gira.01:BI 0.5 PTM210.Gira.01:buttons:.released
attr sKurzerLangerDruck_UR disable 0
attr sKurzerLangerDruck_UR room 99-Test
attr sKurzerLangerDruck_UR triggerPartial 1
#
# Kurzer Druck
#
define nKurzerDruck_UR notify sKurzerLangerDruck_UR:trigger set TestLampeKurzDruck on
attr nKurzerDruck_UR disable 0
attr nKurzerDruck_UR room 99-Test
#
# Langer Druck
#
define nLangerDruck_UR notify sKurzerLangerDruck_UR:partial_1 set TestLampeLangDruck on
attr nLangerDruck_UR disable 0
attr nLangerDruck_UR room 99-Test


Ich hoffe, ich konnte es jetzt verständlich und vollständig darstellen.
Ganz lieben Dank und Gruß,
Christian.

NACHTRAG:
Das mit der Sequence und dem "LangDruck" könnte man so lösen, das ist allerdings nicht sehr elegant, da bei "Dauerdruck" auf die Wippe, der Aktor im Sekundentakt toggelt. Über die Sequence wird das "LangDruck-Dummy"-Device auf "on" gesetzt und zusätzlich mit dem State des Tasters "und" -verknüpft. Der State des Tasters ändert sich beim Druck auf die Wippe von "released" nach "BI" und wieder zurück nach "BI" Der Trigger liegt auf dem Dummy.

# Dummy für Gira Taster, Langdruck
define LangDruck dummy
attr LangDruck room 99-Test
#
#
define diEingangsLicht DOIF (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [?Aktor] eq "off") \
(set Aktor on)\
DOELSEIF ([?PTM210.Gira.01] eq "BI" and [LangDruck] eq "on" and [Aktor] eq "off") \
(set Aktor on)\
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [Aktor] eq "on" and [diEingangsLicht] eq "sensor_on") \
(set Aktor off)\
DOELSEIF ([?PTM210.Gira.01] eq "BI" and [LangDruck] eq "on" and [Aktor] eq "on")\
(set Aktor off)
attr diEingangsLicht cmdState sensor_on|manual_on|sensor_off|manual_off
attr diEingangsLicht disable 0
attr diEingangsLicht room 99-Test
attr diEingangsLicht wait 0:0:10:0
Titel: Antw:neues Modul DOIF
Beitrag von: Rammlet am 02 Januar 2015, 22:37:15
Hallo zusammen
Ich versuche seit mittlerweile 3 Tage mein neues Flur licht in den Griff zu bekommen leider nur mit geringen erfolg.

Früher habe ich die LED Streifen direct mit Relais angesteuert. Habe jetzt ein RGB WiFi Modul verbaut hatte mir erhofft das die Steuerung der einzelnen Farben jetzt einfacher und schöner wird.
Ich habe 2 Bewegungsmelder und einen Schalter.
Die Bewegungsmelder sollen Das Modul ansteuern und für 60sek eine Farbe ausgeben. Über den Schalter soll für 2min Weiß eingeschaltet werden.
Ich bekomme es bin das die Bewegungsmelder das Licht einschalten und es nach 1min aus geht.
Habe dann das gleiche für den schalter aufgebaut bei Kurzem Tasten druck geht das Licht an und dann auch wieder aus.

So das jetzt bei eingeschalten Weißem Licht die Bewegungsmelder das Licht wieder Bund machen habe ich eine Verriegelung eingebaut.

So und Jetzt geht einfach gar nichts mehr weder Weiß noch Bund auch ohne die Verriegelung Laufen Beide DOIF´s nicht zusammen.

Daher bitte ich einmal um Unterstützung (bevor ich von meiner Frau erschlagen werde)

define RGB_Floor_Mo_d dummy
attr RGB_Floor_Mo_d devStateIcon off:li_wht_off on:li_wht_on
attr RGB_Floor_Mo_d eventMap off on
attr RGB_Floor_Mo_d room Test
attr RGB_Floor_Mo_d webCmd off:on

#
define di_RGB_Floor_Mo_Schalter DOIF ([MD_FloorS] eq "motion" or [MD_FloorB] eq "motion") (set RGB_Floor_Mo_d on, set RGB_Floor_Mo_d off)
attr di_RGB_Floor_Mo_Schalter do always
attr di_RGB_Floor_Mo_Schalter room Test
##
define di_RGB_Floor_Mo_Licht DOIF ([RGB_Floor_Mo_d] eq "on" and ([d_RGB_Floor_WhiteB] eq "of")  (set AKT_RGB_Floor1 RGB 0000FF) DOELSE  (set AKT_RGB_Floor1 RGB 000000)
attr di_RGB_Floor_Mo_Licht room Test
attr di_RGB_Floor_Mo_Licht wait 0:60
####
#Dummy für die Steuerrung
define d_Light_RGB_Floor dummy
attr d_Light_RGB_Floor devStateIcon off:li_wht_off RGB:toggle White:li_wht_on WhiteTime:on-for-timer
define d_RGB_Floor_White dummy
attr d_RGB_Floor_White devStateIcon off:li_wht_off on:li_wht_on
attr d_RGB_Floor_White eventMap off on
attr d_RGB_Floor_White room Test
attr d_RGB_Floor_White webCmd off:on
#
define di_RGB_Floor_White_Schalter DOIF ([SEN_SWI_Kitchen1_FloorLightWhite] eq "Short") (set d_RGB_Floor_White on, set d_RGB_Floor_White off, set d_RGB_Floor_WhiteB on)
attr di_RGB_Floor_White_Schalter room Test
#
define d_RGB_Floor_WhiteB dummy
attr d_RGB_Floor_WhiteB devStateIcon off:li_wht_off on:li_wht_on
attr d_RGB_Floor_WhiteB eventMap off on
attr d_RGB_Floor_WhiteB room Test
attr d_RGB_Floor_WhiteB webCmd off:on
#
define di_RGB_Floor_White_Licht DOIF ([d_RGB_Floor_White] eq "on")  (set AKT_RGB_LivingRoom_Deko2 FFFFFF) DOELSE  (set AKT_RGB_Floor1 RGB 000000, set d_RGB_Floor_WhiteB off)
attr di_RGB_Floor_White_Licht room Test
attr di_RGB_Floor_White_Licht wait 0:120


Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 02 Januar 2015, 23:15:45
Hallo maxritti,

Zitat von: maxritti am 01 Januar 2015, 23:13:56
Hi,

ich verstehe jetzt nicht ganz, auf was Du raus willst?
Klappt das nicht mit dem DOIF, welches auf die Änderung in Deinem Zeitdummy reagiert und die DEF des anderen DOIFs ändert?

Doch da das DOIF ja über modify aktualisiert wird, klappt es so. Die Zeit wird aktualisiert, da das 2. DOIF die Definition aktualisiert.  ;D

Nachdem ich verstanden habe, was das 2. DOIF macht (das aktualisieren des Inhaltes des internen Wertes DEF), habe ich nur überlegt, ob man das nicht auch ohne ein DOIF machen kann, quasi direkt aus dem dummy heraus.
Es muss ja gehen, da es das DOIF Modul auch irgendwie schafft. Ich bin halt nur an der syntax verzweifelt.. :-[


Ich habe aber noch eine andere Frage:

Ich prüfe eine Bedingung, welche nur ausgeführt werden soll, wenn das Ereignis 2x hintereinander aufgetreten ist. Das Warten habe ich auf 5 Minuten erst mal gestellt:
waitsame 300:0

Ich habe eine DOELSIF Bedingung die identisch zur 1. DOIF Bedingung ist. Nur ohne waitsame

Hier die 1. Bedingung, welche ausgeführt werden soll, wenn die Bedingungen innerhalb von 5 Minuten 2. erfüllt sind.

([wk.PwrSw_Switch] eq "on" && [wk.PwrSw_Power:power] >= 5 && [wk.WaschmaschineWartemodus] eq "on") (set wk.WaschmaschineWartemodus off)   


Und hier die 2. Bedingung, welche ausgeführt wird, wenn die 1. Bedingung noch nicht zutrifft.
DOELSEIF ([wk.PwrSw_Switch] eq "on" && [wk.PwrSw_Power:power] >= 5 && [wk.WaschmaschineWartemodus] eq "on") (set wk.PwrSw_Switch off) 


Was ich nun beobachtet habe ist, dass die 2. Bedingung eigentlich nie ausgeführt wird.
Ist es so, dass die Prüfung weiterer Bedingungen Abgebrochen wird, wenn die 1. Bedingung erfüllt ist, egal ob nun waitsame aktiv ist oder nicht?


Mit diese Abfragen wollte ich nur eines erreichen.
Schalte ich die Waschmaschine einmal ein, dann soll die Spannung unterbrochen werden und auf den Timer gewartet werden.

Schalte ich dann aber manuell wieder ein (Abstand von max 5 min zum 1. Einschalten), dann soll die Maschine ihr Programm abspulen.

Ich könnte mir das natürlich auch über einen dummy merken. Dachte nur, es würde vielleicht ohne klappen.



Grüße Sidey
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 03 Januar 2015, 09:55:06
Hallo Damian.
Ich verzweifle an 2 DOIF, wobei eines wunderbar klappt, das zweite aber nur bedingt.

Ziel ist , eine Led zu steuern die mir den Status des Wechselrichters anzeigt, aber nur zw. bestimmter Zeit.
Das erste klappt

([Batterielader_aus] eq "on" and [08:01-22:00]) (set LED_15 led red)
DOELSEIF ([Batterielader_aus] eq "off" and [08:01-22:00]) ( set LED_15 led green)
DOELSE (set LED_15 led off)


dieses aber nicht,nur bei statusänderung. warum es nicht die led zündet verstehe ich nicht

([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSE (set LED_14 led off)


state von Netz_Schuetz_aus ist "off"

wo ist der fehler?

lg.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Januar 2015, 10:01:57
Zitat von: Sidey am 02 Januar 2015, 23:15:45

Was ich nun beobachtet habe ist, dass die 2. Bedingung eigentlich nie ausgeführt wird.
Ist es so, dass die Prüfung weiterer Bedingungen Abgebrochen wird, wenn die 1. Bedingung erfüllt ist, egal ob nun waitsame aktiv ist oder nicht?


Mit diese Abfragen wollte ich nur eines erreichen.
Schalte ich die Waschmaschine einmal ein, dann soll die Spannung unterbrochen werden und auf den Timer gewartet werden.

Schalte ich dann aber manuell wieder ein (Abstand von max 5 min zum 1. Einschalten), dann soll die Maschine ihr Programm abspulen.

Ich könnte mir das natürlich auch über einen dummy merken. Dachte nur, es würde vielleicht ohne klappen.

Zwei mal die gleiche Bedingung innerhalb eines DOIF macht keinen Sinn, da die zweite Bedingung nie zum tragen kommt.

Mir ist auch schon aufgefallen, dass das Gegenteil von waitsame noch fehlt.

Das wird zukünftig mit einem weiteren Attribut möglich sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Januar 2015, 10:05:25
Zitat von: satprofi am 03 Januar 2015, 09:55:06
Hallo Damian.
Ich verzweifle an 2 DOIF, wobei eines wunderbar klappt, das zweite aber nur bedingt.

Ziel ist , eine Led zu steuern die mir den Status des Wechselrichters anzeigt, aber nur zw. bestimmter Zeit.
Das erste klappt

([Batterielader_aus] eq "on" and [08:01-22:00]) (set LED_15 led red)
DOELSEIF ([Batterielader_aus] eq "off" and [08:01-22:00]) ( set LED_15 led green)
DOELSE (set LED_15 led off)


dieses aber nicht,nur bei statusänderung. warum es nicht die led zündet verstehe ich nicht

([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSE (set LED_14 led off)


state von Netz_Schuetz_aus ist "off"

wo ist der fehler?

lg.

Das werde ich dir auch nicht beantworten können. Da beide DOIF´s gleich aufgebaut sind, hängt es sicherlich mit den Aktoren bzw. Sensoren zusammen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Januar 2015, 10:09:36
Zitat von: Spartacus am 02 Januar 2015, 13:23:14
Damian,
ich bin Dir sehr dankbar für Deine Hilfe! Ich versuche jetzt seit fast 2 Monaten dieses ganze Konstrukt ans Fliegen zu kriegen und stolpere immer wieder über neue Probleme. Die ganze Sache ist sehr komplex und ich habe damals, vor 10 Jahren, auch sehr lange getüftelt, bis das mit der CControl mal lief.Der Ansatz mit dem DOIF ist sicherlich korrekt, aber ich komme einfach nicht weiter:

Ich liste hier nochmals alles auf, wäre echt toll, wenn Du Dir das mal ansiehst. Ich verstehe, dass es nicht ganz einfach ist, fremden Code nachzuvollziehen, aber vielleicht ist mein Ansatz auch nicht korrekt und alles ist viel einfacher!

Sensoren/Aktoren:
1. Taster: (später mit Langdruck über Sequence)
2. Lichtschranke: Ruhezustand->buttons:released, betätigt->buttons:pressed
3. Türkontakt: Tür zu->buttons:released, Tür offen-> buttons:pressed
4. Beleuchtung: Aktor
5. Notaus: Dummy

Abhängigkeiten:
- LS oder TK werden betätigt (buttons:pressed) -> Aktor schaltet ein, Ausschaltverzögerung 120s. (Das ist nötig, weil LS und TK nur einen Impuls abgeben ( released-> pressed-> released). Es soll auch nachgetriggert werden, bis die Notabschaltung greift!
- Der Aktor schaltet direkt ab, wenn der Zusatnd "pressed" bei LS oder TK länger als 10min anliegt. Es wird eine Mail verschickt. (Notabschaltung: Tür steht sehr lange auf, LS ist durch Gegenstand blockiert)
Der Aktor darf erst wieder freigegeben werden, wenn LS und TK auf "released" sind. (Tür ist wieder zu und LS nicht mehr blockiert!; das funktioniert noch nicht!)
- Der Aktor schaltet Neujahr von 0:00 Uhr bis 02:00 Uhr unabhängig vom Zusatand der LS und des TK (pressed, released ist egal; das funktioniert nicht korrekt!)
- Der Taster toggelt unabhängig von allen o.a. Bedingungen den Aktor per Klick auf die obere Wippe (Die Funktion läuft bereits mit dem TestCode, allerdings ohne Sequence) Hier ist zu beachten, dass bei eingeschaltetem Aktor, der Klick auf die Wippe diesen direkt (ohne Ausschaltverzögerung) ausschaltet und umgekehrt.

Die Sequece und die Ansteuerung eines TestLampeKurzDruck/TestlampeLangDruck-Dummys habe ich noch nicht in den Testcode einbauen können. Das klappt mit dem Dummy nicht!
siehe auch (http://forum.fhem.de/index.php/topic,23833.msg237801.html#msg237801 (http://forum.fhem.de/index.php/topic,23833.msg237801.html#msg237801))


Leider habe ich nicht die Zeit mich in komplexere Probleme der User einzuarbeiten. Vielleicht gibt es hier andere DOIF-User, die etwas mehr Zeit haben und dir helfen können.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 03 Januar 2015, 11:32:01
Zitat von: Damian am 03 Januar 2015, 10:09:36
Leider habe ich nicht die Zeit mich in komplexere Probleme der User einzuarbeiten. Vielleicht gibt es hier andere DOIF-User, die etwas mehr Zeit haben und dir helfen können.

Gruß

Damian
Hi Damian,
das verstehe ich natürlich und hoffe, dass mir jemand weiterhelfen kann...

Ich habe gestern noch lange gebastelt und bin auch ein Stück weiter. Es fehlen zur vollständigen Funktion noch die "Notabschaltung". Das Sequence-Problem, welches ich gestern im Nachtrag beschrieben hatte, ist auch noch nicht gelöst, aber das war es dann m.E. auch. So komplex ist es dann doch nicht geworden, aber erste Tests mit fiktiven Daten (Silvester1 und Neujahr1) haben ganz gut geklappt.

Vielleicht weiß ja jemand, wie ich die beschriebene Notabschaltung hier noch einbauen kann...Damin meinte damals (Oktober) man könne das mit den künftigen Funktionen des DOIFs recht einfach lösen, bin aber noch nicht drauf gekommen...("rp.02.EG.ku.SD.Kochinsel" ist in diesem Fall der Aktor)

define diEingangsLicht DOIF (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [?rp.02.EG.ku.SD.Kochinsel] eq "off") \
   (set rp.02.EG.ku.SD.Kochinsel on)\
DOELSEIF ([?PTM210.Gira.01] eq "BI" and [LangDruck] eq "on" and [rp.02.EG.ku.SD.Kochinsel] eq "off") \
(set rp.02.EG.ku.SD.Kochinsel on)\
DOELSEIF ([17:03] and [?hl.01.Feiertag] eq "Silvester1")\
         (set rp.02.EG.ku.SD.Kochinsel on)\
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and \
          [rp.02.EG.ku.SD.Kochinsel] eq "on" and [diEingangsLicht] eq "sensor_on") \
(set rp.02.EG.ku.SD.Kochinsel off)\
DOELSEIF ([?PTM210.Gira.01] eq "BI" and [LangDruck] eq "on" and [rp.02.EG.ku.SD.Kochinsel] eq "on")\
(set rp.02.EG.ku.SD.Kochinsel off)\
DOELSEIF ([17:10] and [?hl.01.Feiertag] eq "Silvester1")\
         (set rp.02.EG.ku.SD.Kochinsel off)
attr diEingangsLicht cmdState sensor_on|manual_on|Silvester_on|sensor_off|manual_off|Silvester_off
attr diEingangsLicht disable 0
attr diEingangsLicht room 99-Test
attr diEingangsLicht wait 0:0:0:120:0


Vielen Dank,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Sany am 03 Januar 2015, 12:47:02
@satprofi

Zitatdieses aber nicht,nur bei statusänderung. warum es nicht die led zündet verstehe ich nicht
Code: [Auswählen]

([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSE (set LED_14 led off)


state von Netz_Schuetz_aus ist "off"

Hallo Satprofi,

dein 2tes DOIF ist bestimmt in Ordnung, nur ist nicht klar, was dort überhaupt ankommt. Rufe den Eventmonitor auf oder per telnet ein "inform timer" und sorge dafür, dass die Quelle(n) mal ihre Meldungen absetzen ([Netz_Schuetz_aus]). Und wenn Du den wortlaut genau kennst sollte das DOIF anzupassen sein.
Vielleicht schreibt [Netz_Schuetz_aus] ja auch ein logfile, dann kannst Du da auch nachlesen.

Und dann mußt Du diesen Satz nochmal erklären: dieses aber nicht,nur bei statusänderung. warum es nicht die led zündet verstehe ich nicht
Ich würde fast verstehen wollen, dass das DOIF genau das macht, was es soll.
So wie ich das gesamte DOIF verstanden habe muss sich nach dem modify DEF irgendeine der Bedingungen erfüllt werden, um das DOIF von initialized in einen cmd_x Zustand zu versetzen. Es ist nicht so, dass das DOIF von sich aus die Bedingungen durchgeht und bei Erfüllung dann die Ausführung vornimmt. In deinem Beispiel, wenn es zwicheen 8:01 und 22:00 ist, müßte als einmal der Netz_Schuetz_aus seinen Zustand ändern, damit das DOIF in einen cmd_x Zustand kommt und entsprechend schaltet.

Probier das mal und berichte.

Gruß
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 03 Januar 2015, 16:26:48
Hallo Damian,

ich nutze das Modul zur Belueftung meiner Garage:

define Garagenbelueftung_feucht DOIF ([Temperatur_Garage:humidity] > 70 and [Temperatur_Garage:temperature] > 5 and [MyWeather:temperature] > 5 and [Abwesend:state] eq "nein" and [12:00-20:00] and ([MyWeather:humidity] +10 < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen)

Dazu habe ich 2 Fragen, bei denen du mir hoffentlich helfen kannst:

1. wird der Codeteil  ([MyWeather:humidity] +10 < [Temperatur_Garage:humidity]) so funktionieren? Ich will damit erreichen, dass die Bedingung nur erfüllt ist, wenn die Luftfeuchtigkeit draußen mindestens 10% geringer ist als in der Garage.

2. Damit es nicht zu einer Dauerschleife kommt (Garage lüftet für 15 Minuten und dann stellt das Modul fest, dass die Luftfeuchtigkeit immer noch zu hoch ist und belüftet erneut), würde ich die Funktion für x Minuten deaktivieren. Würde das über das disable Attribut funktionieren? Und wenn ja, wie stellt man dann ein Zeitintervall ein?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Januar 2015, 08:37:29
Neue Features morgen per Update

Auszug aus der neuen Commandref:

Löschen des Waittimers nach einer Wiederholung einer Bedingung

Das Gegenstück zum repeatsame-Attribut ist das Attribut waitdel. Die Syntax mit Sekundenangaben pro Kommando entspricht der, des wait-Attributs. Im Gegensatz zum wait-Attribut, wird ein laufender Timer gelöscht, falls eine Bedingung wiederholt wahr wird. Sekundenangaben können pro Kommando ausgelassen oder auf Null gesetzt werden.

Anwendungsbeispiel: Rollladen soll herunter, wenn ein Taster innerhalb von zwei Sekunden nicht wiederholt wird

define di_shuttersdown DOIF ([Button])(set shutters down)
attr di_shuttersdown waitdel 2
attr di_shuttersdown do always

"di_shuttersdown" kann nicht mit dem vorherigen Anwendungsbeispiel "di_shuttersup" innerhalb eines DOIF-Moduls kombiniert werden, da in beiden Fällen die gleiche Bedingung vorkommt.

Die Attribute wait und waitdel lassen sich für verschiedene Kommandos kombinieren. Falls das Attribut für ein Kommando nicht gesetzt werden soll, kann die entsprechende Sekundenzahl ausgelassen oder eine Null angegeben werden.

Beispiel: Für cmd_1 soll wait gelten, für cmd_2 waitdel

attr di_cmd wait 2:0
attr di_cmd waitdel 0:2



Ereignissteuerung über Ereignisse (Events)

Syntax: [<devicename>:?<regexp>]

Eine Alternative zur Auswertung von Stati oder Readings ist das einfache Auswerten von Ereignissen mit Hilfe von regulären Ausdrücken, wie beim notify. Eingeleitet wird die Angabe eines regulären Ausdrucks durch ein Fragezeichen

Anwendungsbeispiel: wie oben, jedoch wird hier nur das Ereignis (welches im Eventmonitor erscheint) ausgewertet und nicht der Status von "remotecontrol" wie im vorherigen Beispiel

define di_garage DOIF ([remotecontrol:?on]) (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)

In diesem Beispiel wird nach dem Vorkommen von "on" innerhalb des Events gesucht. Falls "on" gefunden wird, wird der Ausdruck wahr und der DOIF-Fall wird ausgeführt, ansonsten wird der DOELSEIF-Fall ausgeführt. Die Auswertung von reinen Ereignissen bietet sich dann an, wenn ein Modul keinen Status oder Readings benutzen, die man abfragen kann, wie z. B. beim Modul "sequence". Die Angabe von regulären Ausdrücken kann recht komplex werden und würde die Aufzählung aller Möglichkeiten an dieser Stelle den Rahmen sprengen. Weitere Informationenen zu regulären Ausdrücken sollten in der Perl-Dokumentation nachgeschlagen werden.


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 Januar 2015, 11:50:38
Zitat von: Sany am 03 Januar 2015, 12:47:02
@satprofi

Hallo Satprofi,


So wie ich das gesamte DOIF verstanden habe muss sich nach dem modify DEF irgendeine der Bedingungen erfüllt werden, um das DOIF von initialized in einen cmd_x Zustand zu versetzen. Es ist nicht so, dass das DOIF von sich aus die Bedingungen durchgeht und bei Erfüllung dann die Ausführung vornimmt. In deinem Beispiel, wenn es zwicheen 8:01 und 22:00 ist, müßte als einmal der Netz_Schuetz_aus seinen Zustand ändern, damit das DOIF in einen cmd_x Zustand kommt und entsprechend schaltet.

Probier das mal und berichte.

Gruß

Hallo.
ja, so ist es. Bei statusänderung schaltet ja DOIF, aber warum nicht jetzt?
Um 08:01 wird abgefragt was die Sensoren machen, sehe ich ja in den readings. Vor 08:01 ist die led finster, danach sollte es aber eingeschaltet werden, weil ja um 08:01 der Netzschütz_aus "off" ist. aber er schaltet nicht, sondern meldet "cmd3". Warum? do always ist auch definiert.
Andere Leds klappen ja auch richtig.

([Heizungsmode] eq "auto" and [08:00-22:00]) (set LED_09 led green) DOELSE (set LED_09 led off)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Januar 2015, 11:55:51
Zitat von: satprofi am 04 Januar 2015, 11:50:38
Hallo.
ja, so ist es. Bei statusänderung schaltet ja DOIF, aber warum nicht jetzt?
Um 08:01 wird abgefragt was die Sensoren machen, sehe ich ja in den readings. Vor 08:01 ist die led finster, danach sollte es aber eingeschaltet werden, weil ja um 08:01 der Netzschütz_aus "off" ist. aber er schaltet nicht, sondern meldet "cmd3". Warum? do always ist auch definiert.
Andere Leds klappen ja auch richtig.

([Heizungsmode] eq "auto" and [08:00-22:00]) (set LED_09 led green) DOELSE (set LED_09 led off)


Dann poste mal den Output von list <dein_doif-modul> von diesem Verhalten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 04 Januar 2015, 13:05:35
Mal ne allgemeine Frage: Es war ja die Rede davon, dass das DOIF Modul sehr wenig Ressourcen verbraucht. Macht es Sinn, wenn ich meine ganzen notifies in DOIF ändere?
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 Januar 2015, 13:29:34
Zitat von: Damian am 04 Januar 2015, 11:55:51
Dann poste mal den Output von list <dein_doif-modul> von diesem Verhalten.

Gruß

Damian

Hallo.
habe mal die zeit auf 13:28 wegen Test geändert, und komischerweise klappt es .
kann es sein, das mehrere DOIF , die zur selben zeit schalten sollen, sich in die quere kommen?

trotzdem hier der auszug

nternals:
   DEF        ([Batterielader_aus] eq "on" and [13:28-22:00]) (set LED_15 led red)
DOELSEIF ([Batterielader_aus] eq "off" and [08:01-22:00]) ( set LED_15 led green)
DOELSE (set LED_15 led off)
   NAME       led15rg
   NR         559
   NTFY_ORDER 50-led15rg
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-04 13:28:00   cmd_event       timer_1
     2015-01-04 13:28:00   cmd_nr          1
     2015-01-04 13:28:00   state           cmd_1
     2015-01-04 13:28:00   timer_1_c1      05.01.2015 13:28:00
     2015-01-04 13:26:27   timer_2_c1      04.01.2015 22:00:00
     2015-01-04 13:26:27   timer_3_c2      05.01.2015 08:01:00
     2015-01-04 13:26:27   timer_4_c2      04.01.2015 22:00:00
   Condition:
     0          InternalDoIf('Batterielader_aus','STATE','') eq "on" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
     1          InternalDoIf('Batterielader_aus','STATE','') eq "off" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"")
   Days:
   Devices:
     0           Batterielader_aus
     1           Batterielader_aus
     all         Batterielader_aus
   Do:
     0          set LED_15 led red
     1           set LED_15 led green
     2          set LED_15 led off
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           Batterielader_aus:STATE
     1           Batterielader_aus:STATE
     all         Batterielader_aus:STATE
   Readings:
   Realtime:
     0          13:28:00
     1          22:00:00
     2          08:01:00
     3          22:00:00
   State:
   Time:
     0          13:28:00
     1          22:00:00
     2          08:01:00
     3          22:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   room       DOIF
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Januar 2015, 13:40:30
Zitat von: Michi240281 am 04 Januar 2015, 13:05:35
Mal ne allgemeine Frage: Es war ja die Rede davon, dass das DOIF Modul sehr wenig Ressourcen verbraucht. Macht es Sinn, wenn ich meine ganzen notifies in DOIF ändere?

DOIF braucht mit Sicherheit mehr Ressourcen als ein notify. Allerdings dürften sie auch auf langsamen Rechnern unerheblich sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Januar 2015, 13:42:16
Zitat von: satprofi am 04 Januar 2015, 13:29:34
Hallo.
habe mal die zeit auf 13:28 wegen Test geändert, und komischerweise klappt es .
kann es sein, das mehrere DOIF , die zur selben zeit schalten sollen, sich in die quere kommen?

trotzdem hier der auszug

nternals:
   DEF        ([Batterielader_aus] eq "on" and [13:28-22:00]) (set LED_15 led red)
DOELSEIF ([Batterielader_aus] eq "off" and [08:01-22:00]) ( set LED_15 led green)
DOELSE (set LED_15 led off)
   NAME       led15rg
   NR         559
   NTFY_ORDER 50-led15rg
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-04 13:28:00   cmd_event       timer_1
     2015-01-04 13:28:00   cmd_nr          1
     2015-01-04 13:28:00   state           cmd_1
     2015-01-04 13:28:00   timer_1_c1      05.01.2015 13:28:00
     2015-01-04 13:26:27   timer_2_c1      04.01.2015 22:00:00
     2015-01-04 13:26:27   timer_3_c2      05.01.2015 08:01:00
     2015-01-04 13:26:27   timer_4_c2      04.01.2015 22:00:00
   Condition:
     0          InternalDoIf('Batterielader_aus','STATE','') eq "on" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
     1          InternalDoIf('Batterielader_aus','STATE','') eq "off" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"")
   Days:
   Devices:
     0           Batterielader_aus
     1           Batterielader_aus
     all         Batterielader_aus
   Do:
     0          set LED_15 led red
     1           set LED_15 led green
     2          set LED_15 led off
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           Batterielader_aus:STATE
     1           Batterielader_aus:STATE
     all         Batterielader_aus:STATE
   Readings:
   Realtime:
     0          13:28:00
     1          22:00:00
     2          08:01:00
     3          22:00:00
   State:
   Time:
     0          13:28:00
     1          22:00:00
     2          08:01:00
     3          22:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   room       DOIF


Wenn Batterielader_aus auf "on" stand, dann funktioniert hier alles, wie gewünscht.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 04 Januar 2015, 14:11:06
ja, sagte ich doch. aber als die zeit mit 08:01 eingetragen ist, nicht. ich habe mehrere DOIF mit 08:01, vielleicht deshalb? vor meiner änderung auf 13:28, war die led finster.
Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 04 Januar 2015, 19:25:28
Hallöchen allerseits,


ich habe noch ein Problem. Ich versuche aus einem DOIF eine eMail zu versenden.

Das sieht so aus:


DOELSEIF (BEDINGUNG) (set DEVICE off ,{DebianMail('pushmail@@gmx.de','Mail Header','Mail Text')})   


Der Teil in den geschweiften Klammern wird allerdings nicht ausgeführt. set DEVICE off und andere Befehle die davor kommen klappen.
Was mache ich falsch?


Grüße Sidey
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 04 Januar 2015, 20:37:37
Zitat von: Sidey am 04 Januar 2015, 19:25:28
Hallöchen allerseits,


ich habe noch ein Problem. Ich versuche aus einem DOIF eine eMail zu versenden.

Das sieht so aus:


DOELSEIF (BEDINGUNG) (set DEVICE off ,{DebianMail('pushmail@@gmx.de','Mail Header','Mail Text')})   


Der Teil in den geschweiften Klammern wird allerdings nicht ausgeführt. set DEVICE off und andere Befehle die davor kommen klappen.
Was mache ich falsch?


Grüße Sidey

Einfach nach Fehlermeldungen im Log schauen. Hier dürfte die Dopplung von @ das Problem sein. Das hatten wir hier schon mal ein paar Posts zuvor.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 04 Januar 2015, 22:44:30
Hallo Damian ,

Im log habe ich zwar nichts gefunden, aber Du hattest recht.
Es waren die doppelten @..

Jetzt klappts, vielen Dank.


Grüße Sidey
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 05 Januar 2015, 09:42:40
Hallo Damian.
Heute 08:01 sollte die Led geschaltet werden

([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSE (set LED_14 led off)


, leider aber nicht.sie wurde aber um 22:00 ausgeschaltet. bin am verzweifeln wo ich suchen soll



Internals:
   DEF        25F54701
   NAME       Netz_Schuetz_aus
   NR         549
   STATE      off
   TYPE       CUL_HM
   chanNo     01
   device     HM_4fach_PV
   Readings:
     2015-01-05 07:00:00   CommandAccepted yes
     2014-11-07 10:42:31   R-sign          off
     2014-11-07 10:56:47   RegL_01:        08:00 00:00
     2015-01-05 07:00:00   deviceMsg       off (to HM_Cul)
     2015-01-05 07:00:00   level           0
     2015-01-05 07:00:00   pct             0
     2015-01-05 07:00:00   recentStateType ack
     2015-01-05 07:00:00   state           off
     2015-01-05 07:00:00   timedOn         off
   Helper:
     dlvlCmd    ++A011123ABC25F5470201000000
     Role:
       chn        1
       prs        1
Attributes:
   group      PV_Speicher
   model      HM-LC-SW4-SM
   peerIDs    00000000,
   room       SolarEdge
   webCmd     statusRequest:on:off
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Januar 2015, 09:50:58
Zitat von: satprofi am 05 Januar 2015, 09:42:40
Hallo Damian.
Heute 08:01 sollte die Led geschaltet werden

([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSE (set LED_14 led off)


, leider aber nicht.sie wurde aber um 22:00 ausgeschaltet. bin am verzweifeln wo ich suchen soll



Internals:
   DEF        25F54701
   NAME       Netz_Schuetz_aus
   NR         549
   STATE      off
   TYPE       CUL_HM
   chanNo     01
   device     HM_4fach_PV
   Readings:
     2015-01-05 07:00:00   CommandAccepted yes
     2014-11-07 10:42:31   R-sign          off
     2014-11-07 10:56:47   RegL_01:        08:00 00:00
     2015-01-05 07:00:00   deviceMsg       off (to HM_Cul)
     2015-01-05 07:00:00   level           0
     2015-01-05 07:00:00   pct             0
     2015-01-05 07:00:00   recentStateType ack
     2015-01-05 07:00:00   state           off
     2015-01-05 07:00:00   timedOn         off
   Helper:
     dlvlCmd    ++A011123ABC25F5470201000000
     Role:
       chn        1
       prs        1
Attributes:
   group      PV_Speicher
   model      HM-LC-SW4-SM
   peerIDs    00000000,
   room       SolarEdge
   webCmd     statusRequest:on:off


Ich brauche immer noch list <dein DOIF-Modul> von diesem Vorgang, damit ich etwas dazu sagen kann.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 05 Januar 2015, 10:07:27
sorry, falsches list


Internals:
   DEF        ([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSE (set LED_14 led off)
   NAME       led14rg
   NR         560
   NTFY_ORDER 50-led14rg
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-01-05 08:01:00   cmd_event       timer_1
     2015-01-05 08:01:00   cmd_nr          3
     2015-01-05 07:00:00   e_Netz_Schuetz_aus_STATE off
     2015-01-05 08:01:00   state           cmd_3
     2015-01-05 08:01:00   timer_1_c1      06.01.2015 08:01:00
     2015-01-04 22:00:00   timer_2_c1      05.01.2015 22:00:00
     2015-01-05 08:01:00   timer_3_c2      06.01.2015 08:01:00
     2015-01-04 22:00:00   timer_4_c2      05.01.2015 22:00:00
   Condition:
     0          InternalDoIf('Netz_Schuetz_aus','STATE','') eq "on" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
     1          InternalDoIf('Netz_Schuetz_aus','STATE','') eq "off" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"")
   Days:
   Devices:
     0           Netz_Schuetz_aus
     1           Netz_Schuetz_aus
     all         Netz_Schuetz_aus
   Do:
     0          set LED_14 led red
     1          set LED_14 led green
     2          set LED_14 led off
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           Netz_Schuetz_aus:STATE
     1           Netz_Schuetz_aus:STATE
     all         Netz_Schuetz_aus:STATE
   Readings:
   Realtime:
     0          08:01:00
     1          22:00:00
     2          08:01:00
     3          22:00:00
   State:
   Time:
     0          08:01:00
     1          22:00:00
     2          08:01:00
     3          22:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   do         always
   room       DOIF
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 05 Januar 2015, 10:51:47
Das Problem sind offenbar die überlagerten Timer. Z. Zt. werden intern mehrere Timer angelegt auch wenn sie die gleiche Zeit haben. Das Modul wird also mehrfach getriggert. Die Reihenfolge ist aber nicht gewährleistet - dein DOELSE-Fall schlägt zu und macht den ersten Trigger zunichte. Ich werde zukünftig intern nur einen Timer definieren, wenn mehrere die gleiche Zeit haben. Solange wird das die Lösung für dich sein:

DOIF ([Netz_Schuetz_aus] eq "on" and [08:01-22:00]) (set LED_14 led red)
DOELSEIF ([Netz_Schuetz_aus] eq "off" and [08:01-22:00]) (set LED_14 led green)
DOELSEIF [22:00:05] (set LED_14 led off)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: satprofi am 05 Januar 2015, 11:43:09
aha, danke.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 05 Januar 2015, 12:10:19
Zitat von: Spartacus am 02 Januar 2015, 13:23:14
Damian,
ich bin Dir sehr dankbar für Deine Hilfe! Ich versuche jetzt seit fast 2 Monaten dieses ganze Konstrukt ans Fliegen zu kriegen und stolpere immer wieder über neue Probleme. Die ganze Sache ist sehr komplex und ich habe damals, vor 10 Jahren, auch sehr lange getüftelt, bis das mit der CControl mal lief.Der Ansatz mit dem DOIF ist sicherlich korrekt, aber ich komme einfach nicht weiter:

Ich liste hier nochmals alles auf, wäre echt toll, wenn Du Dir das mal ansiehst. Ich verstehe, dass es nicht ganz einfach ist, fremden Code nachzuvollziehen, aber vielleicht ist mein Ansatz auch nicht korrekt und alles ist viel einfacher!

Sensoren/Aktoren:
1. Taster: (später mit Langdruck über Sequence)
2. Lichtschranke: Ruhezustand->buttons:released, betätigt->buttons:pressed
3. Türkontakt: Tür zu->buttons:released, Tür offen-> buttons:pressed
4. Beleuchtung: Aktor
5. Notaus: Dummy

Abhängigkeiten:
- LS oder TK werden betätigt (buttons:pressed) -> Aktor schaltet ein, Ausschaltverzögerung 120s. (Das ist nötig, weil LS und TK nur einen Impuls abgeben ( released-> pressed-> released). Es soll auch nachgetriggert werden, bis die Notabschaltung greift!
- Der Aktor schaltet direkt ab, wenn der Zusatnd "pressed" bei LS oder TK länger als 10min anliegt. Es wird eine Mail verschickt. (Notabschaltung: Tür steht sehr lange auf, LS ist durch Gegenstand blockiert)
Der Aktor darf erst wieder freigegeben werden, wenn LS und TK auf "released" sind. (Tür ist wieder zu und LS nicht mehr blockiert!; das funktioniert noch nicht!)
- Der Aktor schaltet Neujahr von 0:00 Uhr bis 02:00 Uhr unabhängig vom Zusatand der LS und des TK (pressed, released ist egal; das funktioniert nicht korrekt!)
- Der Taster toggelt unabhängig von allen o.a. Bedingungen den Aktor per Klick auf die obere Wippe (Die Funktion läuft bereits mit dem TestCode, allerdings ohne Sequence) Hier ist zu beachten, dass bei eingeschaltetem Aktor, der Klick auf die Wippe diesen direkt (ohne Ausschaltverzögerung) ausschaltet und umgekehrt.

Die Sequece und die Ansteuerung eines TestLampeKurzDruck/TestlampeLangDruck-Dummys habe ich noch nicht in den Testcode einbauen können. Das klappt mit dem Dummy nicht!
siehe auch (http://forum.fhem.de/index.php/topic,23833.msg237801.html#msg237801 (http://forum.fhem.de/index.php/topic,23833.msg237801.html#msg237801))

altueller Code:
.....


TestCode:

.....


Ich hoffe, ich konnte es jetzt verständlich und vollständig darstellen.
Ganz lieben Dank und Gruß,
Christian.
Hallo,
nachdem ich noch ein paar Tage an meinen Anforderungen geschraubt habe, scheint es einigermassen zu funzen. Gerne hätte ich alles in einem DOIF vereint, aber das habe ich nicht hingekriegt. Wenn hier jemand einen Tipp hat, oder weiß, wie man das Ganze kürzern kann, dann würde ich mich freuen...

Hier der Code:

# Licht in Abhängigkeit vom Türkontakt und Lichtschranke 120sec einschalten
# Taster für manuellen Betrieb des Eingangslichtes
# Neujahrsbeleuchtung im Eingang für 2h unabhängig vom Notaus
# Email wenn Haustür länger offen steht, oder Lichtschranke blockiert ist
#
define di.02.EI.ss.SA.Licht DOIF (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and \
  [?EI.ss.SA.Licht] eq "off" and [?LS.TK.Notaus.dum] eq "off" and [?Tageslicht.dum] eq "dunkel") \
  (set EI.ss.SA.Licht on)\
DOELSEIF ([seq.01.EG.fl.WS.Eingangslicht:?partial_1] and [EI.ss.SA.Licht] eq "off") \
(set EI.ss.SA.Licht on)\
DOELSEIF ([00:00] and [?hl.01.Feiertag] eq "Silvester")\
         (set EI.ss.SA.Licht on)\
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and \
          [EI.ss.SA.Licht] eq "on" and [di.02.EI.ss.SA.Licht] eq "Sensor_on") \
(set EI.ss.SA.Licht off)\
DOELSEIF ([seq.01.EG.fl.WS.Eingangslicht:?partial_1] and [EI.ss.SA.Licht] eq "on")\
(set EI.ss.SA.Licht off)\
DOELSEIF ([02:00] and [?hl.01.Feiertag] eq "Neujahr")\
         (set EI.ss.SA.Licht off)\
DOELSEIF ([LS.TK.Notaus.dum] eq "on")
attr di.02.EI.ss.SA.Licht alias autom. Eingangslicht
attr di.02.EI.ss.SA.Licht cmdState Sensor_on|manual_on|Silvester_on|Sensor_off|manual_off|Silvester_off|Notaus
attr di.02.EI.ss.SA.Licht disable 0
attr di.02.EI.ss.SA.Licht room 05-Eingang
attr di.02.EI.ss.SA.Licht wait 0:0:0:120:0:0:0
#
#
# Email senden, wenn Tür/ LS länger als 10min auf steht/blockiert ist
#
define di.03.EI.ss.SA.Licht DOIF ([EG.ss.TK.Haustuer:buttons] eq "pressed" and [?di.02.EI.ss.SA.Licht] ne "Silvester_on") ({eMail('name@domain.de','Warnung! Haustür auf!')}, \
set  EI.ss.SA.Licht off, set LS.TK.Notaus.dum on)\
DOELSEIF\
([EG.ss.LS.Eingang:buttons] eq "pressed" and [?di.02.EI.ss.SA.Licht] ne "Silvester_on") ({eMail('name@domain.de','WARNUNG! Lichtschranke bockiert!')}, \
set  EI.ss.SA.Licht off, set LS.TK.Notaus.dum on)\
DOELSEIF\
([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released")\
(set LS.TK.Notaus.dum off)
attr di.03.EI.ss.SA.Licht alias Warnung Eingang
attr di.03.EI.ss.SA.Licht cmdState Warnung_Tuer|Warnung_LS|Leerlauf
attr di.03.EI.ss.SA.Licht room 05-Eingang
attr di.03.EI.ss.SA.Licht wait 600:600:0

Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 05 Januar 2015, 16:28:21
Ich habe ein Problem mit meiner Garagenbelueftung. Jetzt gerade sind alle Bedingungen erfüllt, aber das DOIF steht immer noch auf cmd2! Jmd ne Idee, warum das so ist?

define Garagenbelueftung_feucht DOIF ([Temperatur_Garage:humidity] > 70 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 5 and [MyWeather:temperature] > 5 and [Abwesend:state] eq "nein" and [12:00-20:00] and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen)
attr Garagenbelueftung_feucht cmdpause 14400
attr Garagenbelueftung_feucht room Garage




Internals:
   DEF        ([Temperatur_Garage:humidity] > 70 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 5 and [MyWeather:temperature] > 5 and [Abwesend:state] eq "nein" and [12:00-20:00] and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen)
   NAME       Garagenbelueftung_feucht
   NR         564
   NTFY_ORDER 50-Garagenbelueftung_feucht
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-04 23:02:57   cmd_event       Garagentor
     2015-01-04 23:02:57   cmd_nr          2
     2015-01-05 16:02:46   e_Abwesend_state nein
     2015-01-05 16:02:45   e_Garagentor_state closed
     2015-01-05 16:02:41   e_MyWeather_humidity_10 80
     2015-01-05 16:02:41   e_MyWeather_temperature 5
     2015-01-05 16:26:33   e_Temperatur_Garage_humidity 83
     2015-01-05 16:26:33   e_Temperatur_Garage_temperature 6.7
     2015-01-04 23:02:57   state           cmd_2
     2015-01-05 12:00:00   timer_1_c1      06.01.2015 12:00:00
     2015-01-04 23:02:47   timer_2_c1      05.01.2015 20:00:00
   Condition:
     0          ReadingValDoIf('Temperatur_Garage','humidity','') > 70 and ReadingValDoIf('Garagentor','state','') eq "closed" and ReadingValDoIf('Temperatur_Garage','temperature','') > 5 and ReadingValDoIf('MyWeather','temperature','') > 5 and ReadingValDoIf('Abwesend','state','') eq "nein" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and (ReadingValDoIf('MyWeather','humidity_10','') < ReadingValDoIf('Temperatur_Garage','humidity',''))
   Days:
   Devices:
     0           Temperatur_Garage Garagentor MyWeather Abwesend
     all         Temperatur_Garage Garagentor MyWeather Abwesend
   Do:
     0          set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Readings:
     0           Temperatur_Garage:humidity Garagentor:state Temperatur_Garage:temperature MyWeather:temperature Abwesend:state MyWeather:humidity_10
     all         Temperatur_Garage:humidity Garagentor:state Temperatur_Garage:temperature MyWeather:temperature Abwesend:state MyWeather:humidity_10
   Realtime:
     0          12:00:00
     1          20:00:00
   State:
   Time:
     0          12:00:00
     1          20:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   cmdpause   14400
   room       Garage
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Januar 2015, 16:33:43
Hallo,

ZitatJetzt gerade sind alle Bedingungen erfüllt,
Sicher?

Das einzige das mir auffällt.
[MyWeather:temperature] > 5
Zitat2015-01-05 16:02:41   e_MyWeather_temperature 5

5 ist nicht >5 sondern =5.
Sollte in der Zwischenzeit die Temp. auf 5.1 gewandert sein sollte dein DOIF auch gezündet haben.
Wenn nicht muss Damian schauen.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 05 Januar 2015, 16:44:20
Zitat von: Puschel74 am 05 Januar 2015, 16:33:43
Hallo,
Sicher?

Das einzige das mir auffällt.
[MyWeather:temperature] > 5
5 ist nicht >5 sondern =5.
Sollte in der Zwischenzeit die Temp. auf 5.1 gewandert sein sollte dein DOIF auch gezündet haben.
Wenn nicht muss Damian schauen.

Grüße

STIMMT!!!!! Gut gesehen, vielen Dank! Habe mal auf >4 geändert und teste! DANKE!
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 05 Januar 2015, 16:54:13
Geht leider immer noch nicht! :-(

define Garagenbelueftung_feucht DOIF ([Temperatur_Garage:humidity] > 70 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 5 and [MyWeather:temperature] > 4 and [Abwesend:state] eq "nein" and [12:00-20:00] and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen)
attr Garagenbelueftung_feucht cmdpause 14400
attr Garagenbelueftung_feucht room Garage


Internals:
   DEF        ([Temperatur_Garage:humidity] > 70 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 5 and [MyWeather:temperature] > 4 and [12:00-20:00] and [Abwesend:state] eq "nein" and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen)
   NAME       Garagenbelueftung_feucht
   NR         564
   NTFY_ORDER 50-Garagenbelueftung_feucht
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-05 16:52:10   cmd_event       Garagentor
     2015-01-05 16:52:10   cmd_nr          2
     2015-01-05 16:52:19   e_Garagentor_state closed
     2015-01-05 16:51:05   e_MyWeather_humidity_10 80
     2015-01-05 16:51:05   e_MyWeather_temperature 5
     2015-01-05 16:52:09   e_Temperatur_Garage_humidity 83
     2015-01-05 16:52:09   e_Temperatur_Garage_temperature 6.7
     2015-01-05 16:52:10   state           cmd_2
     2015-01-05 16:40:52   timer_1_c1      06.01.2015 12:00:00
     2015-01-05 16:40:52   timer_2_c1      05.01.2015 20:00:00
   Condition:
     0          ReadingValDoIf('Temperatur_Garage','humidity','') > 70 and ReadingValDoIf('Garagentor','state','') eq "closed" and ReadingValDoIf('Temperatur_Garage','temperature','') > 5 and ReadingValDoIf('MyWeather','temperature','') > 4 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf('Abwesend','state','') eq "nein" and (ReadingValDoIf('MyWeather','humidity_10','') < ReadingValDoIf('Temperatur_Garage','humidity',''))
   Days:
   Devices:
     0           Temperatur_Garage Garagentor MyWeather Abwesend
     all         Temperatur_Garage Garagentor MyWeather Abwesend
   Do:
     0          set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:15:00 set Garage_Schalten Schliessen
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Readings:
     0           Temperatur_Garage:humidity Garagentor:state Temperatur_Garage:temperature MyWeather:temperature Abwesend:state MyWeather:humidity_10
     all         Temperatur_Garage:humidity Garagentor:state Temperatur_Garage:temperature MyWeather:temperature Abwesend:state MyWeather:humidity_10
   Realtime:
     0          12:00:00
     1          20:00:00
   State:
   Time:
     0          12:00:00
     1          20:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   cmdpause   14400
   room       Garage
Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 05 Januar 2015, 17:25:01
Hallo,

ich weiß ja nicht was alles in den Readings stehen sollte aber mir fällt noch auf das ich alle Devices finde ausser Abwesend.

Zitat[Garagentor:state] eq "closed"
Zitat2015-01-05 16:52:19   e_Garagentor_state closed

Zitat[Temperatur_Garage:temperature] > 5
Zitat2015-01-05 16:52:09   e_Temperatur_Garage_temperature 6.7

Zitat[Abwesend:state] eq "nein"
???

Aber wie gesagt - Damian (und andere) sind da sicher fitter.

Grüße
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 06 Januar 2015, 14:59:42
Inzwischen gehts! :-)

Offenbar muss das Modul immer erstmal jedes Reading einlesen, bevor es die Bedingung auf wahr oder falsch überprüft. Und der Status für "Abwesend" kam erst ne Weile später! Jetzt tuts! :-)

EDIT: Ich hab die Funktion nochmal ein wenig erweitert (2 Temperaturbereiche) und jetzt ein neues Problem: Der state bleibt dauerhaft auf "initialized"! Woran könnte das denn nu liegen?

define Garagenbelueftung_feucht DOIF ([Temperatur_Garage:humidity] > 60 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 3;
and [Temperatur_Garage:temperature] < 10 and ([Temperatur_Garage:temperature]-[MyWeather:temperature] < 3) and [12:00-20:00] and [Abwesend:state] eq "nein";
and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:25:00 set Garage_Schalten Schliessen);
DOELSEIF ([Temperatur_Garage:humidity] > 60 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 9 and [Temperatur_Garage:temperature] < 25;
and ([Temperatur_Garage:temperature]-[MyWeather:temperature] < 7) and [12:00-20:00] and [Abwesend:state] eq "nein" and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity]));
(set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:25:00 set Garage_Schalten Schliessen)
Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 07 Januar 2015, 09:47:10
Hallo zusammen,

ich habe noch eine Frage.  :)

Ich habe zwei DoIf Abfragen.
In der 1. Abfrage stelle ich einen dummy auf in wenn die Bedingung wahr ist.

In der 2. Abfrage (DoElse) Frage ich die gleichen Werte wie bei der 1. Abfrage und Zusätzlich noch diesen Dummy ab.

Jetzt passiert folgendes. Wenn die Erste Bdingung wahr ist, wird mein dummy auf in gesetzt.
Danach scheint das Doif erneut getriggert zu werden und die 2. Bedingung ist wahr.


([wk.PwrSw_Switch] eq "on" && [wk.PwrSw_Power:power] >= 5 && [wk.WaschmaschineWartemodus] eq "off" && [wk.Waschmaschine_Betrieb] eq "off") (set wk.WaschmaschineWartemodus on,set wk.PwrSw_Switch off)   

DOELSEIF ([wk.PwrSw_Switch] eq "on" && [wk.PwrSw_Power:power] >= 5 && [wk.WaschmaschineWartemodus] eq "on") (set wk.WaschmaschineWartemodus off,set wk.Waschmaschine_Betrieb on)   


Wie schaffe ich es, dass zwischen den Abfragen der Wert für wk.PwrSwitch neu abgefragt wird?

Grüße Sidey
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 07 Januar 2015, 11:41:34
Hallo,

mir ist etwas im FHEM Log aufgefallen.
In meinem FHEM existiert für jeden Rollo ein DOIF, welches aufgrund von Helligkeit, Fensterkontakten etc den Status des Rollos schaltet.

Nun ist mir aufgefallen, dass es u.U. zwei Schaltungen für einen Rollo gibt.

Hier mal einer der Kandidaten, welcher heute morgen auffällig geworden ist:

2015.01.07 06:40:00.030 3: CUL_HM set OG_elt_RO_Strasse on
2015.01.07 06:40:00.029 3: CUL_HM set OG_elt_RO_Strasse on


Zustande gekommen sind diese Schaltvorgänge mMn durch dieses DOIF.

   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([OG_elt_RO_Strasse] ne "on" and [du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_elt_RO_Strasse on)
   NAME       di_OG_elt_RO_Strasse
   NR         176
   NTFY_ORDER 50-di_OG_elt_RO_Strasse
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-07 06:40:00   cmd_event       timer_4
     2015-01-07 06:40:00   cmd_nr          2
     2015-01-07 11:39:36   e_EG_dr_TS_Terrasse_luminosity 146
     2015-01-07 06:40:20   e_OG_elt_RO_Strasse_STATE on
     2015-01-07 06:40:00   state           cmd_2
     2015-01-06 18:32:32   timer_1_c1      07.01.2015 16:10:00
     2015-01-06 21:30:00   timer_2_c1      07.01.2015 21:30:00
     2015-01-06 21:30:00   timer_3_c1      07.01.2015 21:30:00
     2015-01-07 06:40:00   timer_4_c2      08.01.2015 06:40:00
     2015-01-07 09:30:00   timer_5_c2      08.01.2015 09:30:00
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('OG_elt_RO_Strasse','STATE','') ne "on" and InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"") and !$we or DOIF_time_once($hash->{timer}{4},$wday,"") and $we)
   Days:
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           OG_elt_RO_Strasse du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru OG_elt_RO_Strasse
   Do:
     0          set OG_elt_RO_Strasse off
     1          set OG_elt_RO_Strasse on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           OG_elt_RO_Strasse:STATE du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE OG_elt_RO_Strasse:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   

Aufgrund des Timers um 06:40 ist der Rollo hochgefahren worden.
Nur warum stehen im Log von FHEM zwei Schaltvorgänge?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Januar 2015, 16:45:39
Zitat von: maxritti am 07 Januar 2015, 11:41:34
Hallo,

mir ist etwas im FHEM Log aufgefallen.
In meinem FHEM existiert für jeden Rollo ein DOIF, welches aufgrund von Helligkeit, Fensterkontakten etc den Status des Rollos schaltet.

Nun ist mir aufgefallen, dass es u.U. zwei Schaltungen für einen Rollo gibt.

Hier mal einer der Kandidaten, welcher heute morgen auffällig geworden ist:

2015.01.07 06:40:00.030 3: CUL_HM set OG_elt_RO_Strasse on
2015.01.07 06:40:00.029 3: CUL_HM set OG_elt_RO_Strasse on


Zustande gekommen sind diese Schaltvorgänge mMn durch dieses DOIF.

   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([OG_elt_RO_Strasse] ne "on" and [du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_elt_RO_Strasse on)
   NAME       di_OG_elt_RO_Strasse
   NR         176
   NTFY_ORDER 50-di_OG_elt_RO_Strasse
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-07 06:40:00   cmd_event       timer_4
     2015-01-07 06:40:00   cmd_nr          2
     2015-01-07 11:39:36   e_EG_dr_TS_Terrasse_luminosity 146
     2015-01-07 06:40:20   e_OG_elt_RO_Strasse_STATE on
     2015-01-07 06:40:00   state           cmd_2
     2015-01-06 18:32:32   timer_1_c1      07.01.2015 16:10:00
     2015-01-06 21:30:00   timer_2_c1      07.01.2015 21:30:00
     2015-01-06 21:30:00   timer_3_c1      07.01.2015 21:30:00
     2015-01-07 06:40:00   timer_4_c2      08.01.2015 06:40:00
     2015-01-07 09:30:00   timer_5_c2      08.01.2015 09:30:00
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('OG_elt_RO_Strasse','STATE','') ne "on" and InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"") and !$we or DOIF_time_once($hash->{timer}{4},$wday,"") and $we)
   Days:
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           OG_elt_RO_Strasse du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru OG_elt_RO_Strasse
   Do:
     0          set OG_elt_RO_Strasse off
     1          set OG_elt_RO_Strasse on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           OG_elt_RO_Strasse:STATE du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE OG_elt_RO_Strasse:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   

Aufgrund des Timers um 06:40 ist der Rollo hochgefahren worden.
Nur warum stehen im Log von FHEM zwei Schaltvorgänge?

Und du bist sicher, dass du nicht zwei mal einen DOIF definiert hast, der den gleichen Rollladen schaltet?

Da du kein do always definiert  hast, ist es unwahrscheinlich, dass es vom gleichen DOIF kommt, auch wenn sich das Modul durch eine Rekursion selbst triggern würde. Ich habe bei mir einige DOIF´s mit Zeitsteuerung laufen - da wiederholt sich nichts. Ansonsten würde ich versuchen dieses Verhalten einzukreisen. Passiert es z. B. immer beim gleichen Rollladen oder bei verschiedenen?

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 07 Januar 2015, 16:56:13
Ziemlich sicher. Wenn ich ein configdb list mache, kommt die ganze Konfiguration meines FHEMs. Okay bis auf Inhalten von myUtils.pm usw.
In der ganzen Config gibt es ein set OG_elt_RO_Strasse on nur ein einziges mal und zwar genau das in dem DOIF.

Eventuell ist es ja auch ein neues senden vom HMLAN, weil der OG_elt_RO_Strasse auf den ersten Befehl nicht geantwortet hat.
rssi Wert so um die -74.

Könnte man dem DOIF noch mehr Debugging Informationen mit beispielsweise verbose=5 entlocken?

Eigene Antwort:
Das kann ich ja einfach mal setzen und schauen was passiert.

Ich werde das aber mal beobachten und mich ggf noch mal melden.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Januar 2015, 17:55:56
Zitat von: maxritti am 07 Januar 2015, 16:56:13
Ziemlich sicher. Wenn ich ein configdb list mache, kommt die ganze Konfiguration meines FHEMs. Okay bis auf Inhalten von myUtils.pm usw.
In der ganzen Config gibt es ein set OG_elt_RO_Strasse on nur ein einziges mal und zwar genau das in dem DOIF.

Eventuell ist es ja auch ein neues senden vom HMLAN, weil der OG_elt_RO_Strasse auf den ersten Befehl nicht geantwortet hat.
rssi Wert so um die -74.

Könnte man dem DOIF noch mehr Debugging Informationen mit beispielsweise verbose=5 entlocken?

Eigene Antwort:
Das kann ich ja einfach mal setzen und schauen was passiert.

Ich werde das aber mal beobachten und mich ggf noch mal melden.

Auffällig ist auch die sehr kurze Zeitdifferenz von einer Millisekunde. Eine Wiederholung von DOIF müsste mehr brauchen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: juppzupp am 07 Januar 2015, 18:40:30
Ich glaub ich hab knöpfe auf den augen  8)

Es sollte doch jetzt 22 eingestellt sein, ist aber 20 ?

fhem> {TimeNow()}
2015-01-07 18:37:56


fhem> list wz_heizung_absenkung
Internals:
   CFGFN     
   DEF        ([16:00-18:30|8]) (set thr_wz desired 21) DOELSEIF ([18:30-23:00|8]) (set thr_wz desired 22) DOELSEIF ([09:00-11:30|7]) (set thr_wz desired 21) DOELSEIF ([11:30-23:00|7]) (set thr_wz desired 22) DOELSE (set thr_wz desired 20)
   NAME       wz_heizung_absenkung
   NR         66309
   NTFY_ORDER 50-wz_heizung_absenkung
   STATE      cmd_5
   TYPE       DOIF
   Readings:
     2015-01-07 18:30:00   cmd_event       timer_2
     2015-01-07 18:30:00   cmd_nr          5
     2015-01-07 18:30:00   state           cmd_5
     2015-01-07 16:00:00   timer_1_c1      08.01.2015 16:00:00|8
     2015-01-07 18:30:00   timer_2_c1      08.01.2015 18:30:00|8
     2015-01-07 18:30:00   timer_3_c2      08.01.2015 18:30:00|8
     2015-01-06 23:15:25   timer_4_c2      07.01.2015 23:00:00|8
     2015-01-07 09:00:00   timer_5_c3      08.01.2015 09:00:00|7
     2015-01-07 11:30:00   timer_6_c3      08.01.2015 11:30:00|7
     2015-01-07 11:30:00   timer_7_c4      08.01.2015 11:30:00|7
     2015-01-06 23:15:25   timer_8_c4      07.01.2015 23:00:00|7
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8")
     1          DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"8")
     2          DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"7")
     3          DOIF_time($hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"7")
   Days:
     0          8
     1          8
     2          8
     3          8
     4          7
     5          7
     6          7
     7          7
   Devices:
   Do:
     0          set thr_wz desired 21
     1          set thr_wz desired 22
     2          set thr_wz desired 21
     3          set thr_wz desired 22
     4          set thr_wz desired 20
   Helper:
     last_timer 8
     sleeptimer -1
   Internals:
   Readings:
   Realtime:
     0          16:00:00
     1          18:30:00
     2          18:30:00
     3          23:00:00
     4          09:00:00
     5          11:30:00
     6          11:30:00
     7          23:00:00
   State:
   Time:
     0          16:00:00
     1          18:30:00
     2          18:30:00
     3          23:00:00
     4          09:00:00
     5          11:30:00
     6          11:30:00
     7          23:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Januar 2015, 18:45:53
Zitat von: juppzupp am 07 Januar 2015, 18:40:30
Ich glaub ich hab knöpfe auf den augen  8)

Es sollte doch jetzt 22 eingestellt sein, ist aber 20 ?

fhem> {TimeNow()}
2015-01-07 18:37:56


fhem> list wz_heizung_absenkung
Internals:
   CFGFN     
   DEF        ([16:00-18:30|8]) (set thr_wz desired 21) DOELSEIF ([18:30-23:00|8]) (set thr_wz desired 22) DOELSEIF ([09:00-11:30|7]) (set thr_wz desired 21) DOELSEIF ([11:30-23:00|7]) (set thr_wz desired 22) DOELSE (set thr_wz desired 20)
   NAME       wz_heizung_absenkung
   NR         66309
   NTFY_ORDER 50-wz_heizung_absenkung
   STATE      cmd_5
   TYPE       DOIF
   Readings:
     2015-01-07 18:30:00   cmd_event       timer_2
     2015-01-07 18:30:00   cmd_nr          5
     2015-01-07 18:30:00   state           cmd_5
     2015-01-07 16:00:00   timer_1_c1      08.01.2015 16:00:00|8
     2015-01-07 18:30:00   timer_2_c1      08.01.2015 18:30:00|8
     2015-01-07 18:30:00   timer_3_c2      08.01.2015 18:30:00|8
     2015-01-06 23:15:25   timer_4_c2      07.01.2015 23:00:00|8
     2015-01-07 09:00:00   timer_5_c3      08.01.2015 09:00:00|7
     2015-01-07 11:30:00   timer_6_c3      08.01.2015 11:30:00|7
     2015-01-07 11:30:00   timer_7_c4      08.01.2015 11:30:00|7
     2015-01-06 23:15:25   timer_8_c4      07.01.2015 23:00:00|7
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8")
     1          DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"8")
     2          DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"7")
     3          DOIF_time($hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"7")
   Days:
     0          8
     1          8
     2          8
     3          8
     4          7
     5          7
     6          7
     7          7
   Devices:
   Do:
     0          set thr_wz desired 21
     1          set thr_wz desired 22
     2          set thr_wz desired 21
     3          set thr_wz desired 22
     4          set thr_wz desired 20
   Helper:
     last_timer 8
     sleeptimer -1
   Internals:
   Readings:
   Realtime:
     0          16:00:00
     1          18:30:00
     2          18:30:00
     3          23:00:00
     4          09:00:00
     5          11:30:00
     6          11:30:00
     7          23:00:00
   State:
   Time:
     0          16:00:00
     1          18:30:00
     2          18:30:00
     3          23:00:00
     4          09:00:00
     5          11:30:00
     6          11:30:00
     7          23:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7


Ein DOELSE-Fall bei mehreren Bedingungen mit Zeitintervallen macht wenig Sinn, denn es wird jedesmal am Ende des Zeitintervalls getriggert, z. B. zuletzt um 18:30, das Zeitintervall ist dann nicht wahr und es wird immer der DOELSE ausgeführt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: juppzupp am 07 Januar 2015, 18:52:52
ok, danke.
in der commandref hatte ich gelesen, das immer der erste fall der matched genommen wird, und da doelse ganz hinten steht.......
falsch interpretiert.


Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 07 Januar 2015, 19:55:30
Habe immer noch Probleme! Irgendwas scheint mit dem Modul nicht zu stimmen! Habe meinen DOELSEIF Fall mal auf ein Minimum reduziert, dennoch geht der state nur auf initialized!

([Temperatur_Garage:humidity] > 60 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 3 and [Temperatur_Garage:temperature] < 9 and ([Temperatur_Garage:temperature]-[MyWeather:temperature] < 3) and [12:00-20:00] and [Abwesend:state] eq "nein" and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:25:00 set Garage_Schalten Schliessen) DOELSEIF ([Temperatur_Garage:temperature] > 15) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_3 at +00:25:00 set Garage_Schalten Schliessen)

Jmd ne Idee?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Januar 2015, 19:58:07
Zitat von: juppzupp am 07 Januar 2015, 18:52:52
ok, danke.
in der commandref hatte ich gelesen, das immer der erste fall der matched genommen wird, und da doelse ganz hinten steht.......
falsch interpretiert.

ja, wenn er "matched". Aber die Angabe [16:00-18:30] ist genau ab 18:30 nicht wahr, also "matched" nicht. Und die anderen Angaben werden um 18:30 erst gar nicht ausgewertet, weil der gesetzte Timer um 18:30 ja nur für die erste Bedingung gilt.

Als Regel: Es ist immer kritisch bei mehreren Bedingungen den DOELSE-Fall anzugeben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: juppzupp am 07 Januar 2015, 20:08:38
ich steh aufm schlauch. das [16:00-18:30] nicht wahr ist, ist klar, aber warum ist [18:30-23:00|8] dann nicht wahr ?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Januar 2015, 20:10:03
Zitat von: Michi240281 am 07 Januar 2015, 19:55:30
Habe immer noch Probleme! Irgendwas scheint mit dem Modul nicht zu stimmen! Habe meinen DOELSEIF Fall mal auf ein Minimum reduziert, dennoch geht der state nur auf initialized!

([Temperatur_Garage:humidity] > 60 and [Garagentor:state] eq "closed" and [Temperatur_Garage:temperature] > 3 and [Temperatur_Garage:temperature] < 9 and ([Temperatur_Garage:temperature]-[MyWeather:temperature] < 3) and [12:00-20:00] and [Abwesend:state] eq "nein" and ([MyWeather:humidity_10] < [Temperatur_Garage:humidity])) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_2 at +00:25:00 set Garage_Schalten Schliessen) DOELSEIF ([Temperatur_Garage:temperature] > 15) (set Garage_Schalten Lueften, define Garage_wieder_Schliessen_3 at +00:25:00 set Garage_Schalten Schliessen)

Jmd ne Idee?
Der Zustand ist nach der Definition immer "initialized" bis eine Bedingung wahr wird und der Zustand auf cmd.. wechselt und bei dir ist das offenbar bis jetzt nicht der Fall.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 07 Januar 2015, 20:16:11
Zitat von: juppzupp am 07 Januar 2015, 20:08:38
ich steh aufm schlauch. das [16:00-18:30] nicht wahr ist, ist klar, aber warum ist [18:30-23:00|8] dann nicht wahr ?

ok. ich sehe gerade, dass du noch eine Bedingung um 18:30 Uhr hast. Das Problem hatten wir schon mal. Es werden z. Zt. mehrere Time gesetzt auch wenn sie die gleiche Zeit haben. Die Reihenfolge der Abarbeitung ist nicht gewährleistet. Bei dir schlägt offenbar der zweite Timer um 18:30 zuerst zu und dann erst der erste.

Zukünftig werde ich in solchen Fällen nur einen Timer definieren, bei dem die Reihenfolge der Abarbeitung von links nach recht geregelt ist. Als Abhilfe: Definiere den zweiten Timer einfach auf  [18:30:01-23:00|8], dann kommt er ziemlich sicher als zweiter dran.


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: juppzupp am 08 Januar 2015, 18:32:12
Zitat von: Damian am 07 Januar 2015, 20:16:11
Als Abhilfe: Definiere den zweiten Timer einfach auf  [18:30:01-23:00|8], dann kommt er ziemlich sicher als zweiter dran.

klappt perfekt ! danke.
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 09 Januar 2015, 14:58:02
Hallo,
möchte mit einer FS20 Fernbedienung meine Hue Beleuchtung anschalten. Soweit funktioniert das auch, wollte jetzt nach dem einschalten mit einer kleinen Pause den effect colorloop starten. Leider funktioniert das so nicht:
([FS20_S8_B] eq "on" or [FS20_S8_B] eq "dimup") (set huebridge_HUEGroup0 on) wait 3 (set huebridge_HUEGroup0 effect colorloop) DOELSE (set huebridge_HUEGroup0 off)
Wo liegt der Fehler?

Gruß Holgi
Titel: neues Modul DOIF
Beitrag von: MaJu am 09 Januar 2015, 15:16:22
Probiere mal
(set huebridge_HUEGroup0 on, wait 3, set huebridge_HUEGroup0 effect colorloop) DOELSE (set huebridge_HUEGroup0 off)
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 09 Januar 2015, 15:29:22
Supi,
besten Dank. Das klappt so jetzt, es sind zwar scheinbar keine 3 Sekunden Pause aber die Lampe schaltet in den colorloop. Darum ging es ja.

Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 09 Januar 2015, 15:37:00
Sollte man besser sleep verwenden statt wait?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Januar 2015, 16:13:42
Zitat von: MaJu am 09 Januar 2015, 15:37:00
Sollte man besser sleep verwenden statt wait?

Bei sleep in Kombination mit DOIF wird das System für die Zeit stillgelegt. Wait zwischen den Kommandos ist noch nicht realisiert. Z. Zt. ist at die einzige sinnvolle Lösung.

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 Januar 2015, 16:17:14
Zitat von: MaJu am 09 Januar 2015, 15:37:00
Sollte man besser sleep verwenden statt wait?
Weder noch...
sleep in Verbindung mit DOIF ist blocking, sofern sich das mit dem letzten Update nicht behoben wurde.
Und was genau soll das "wait 3" bewirken???

Sinnvoller wäre (ungetestet):

(set huebridge_HUEGroup0 on, define tmp_blah at +00:03 set huebridge_HUEGroup0 effect colorloop) DOELSE (set huebridge_HUEGroup0 off)
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 09 Januar 2015, 16:46:22
Zitat von: Brockmann am 09 Januar 2015, 16:17:14

Und was genau soll das "wait 3" bewirken???


[/code]

Das wait 3 Hatte ich aus dem ersten Beitrag:
define di_test DOIF (<Bedingung>)(<Kommando1>)wait <sec>(<Kommando2>)

Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 Januar 2015, 17:01:29
Zitat von: The-Holgi am 09 Januar 2015, 16:46:22
Das wait 3 Hatte ich aus dem ersten Beitrag:
Und da steht es auf der "ToDo"-Liste, also als für die Zukunft geplantes Feature.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 09 Januar 2015, 17:07:58
Hi,

ich verstehe es momentan nicht.
Ab und zu gehen bei mir der ein und andere Rollo nicht runter, an anderen Tagen geht der dann wieder, dafür bleibt manchmal ein anderer oebn.

Diesmal war es dieser hier:

Der hätte doch mMn eben, als EG_dr_TS_Terrasse_luminosity kleiner als der Schwellwert aus dem Dummy du_Rollo_Luminosity_ru (0,7) geworden ist ein off Signal bekommen sollen.

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([OG_elt_RO_Strasse] ne "on" and [du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_elt_RO_Strasse on)
   NAME       di_OG_elt_RO_Strasse
   NR         176
   NTFY_ORDER 50-di_OG_elt_RO_Strasse
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-07 16:59:54   cmd_event       EG_dr_TS_Terrasse
     2015-01-07 16:59:54   cmd_nr          1
     2015-01-09 17:00:52   e_EG_dr_TS_Terrasse_luminosity 0.43
     2015-01-09 16:58:51   e_OG_elt_RO_Strasse_STATE off
     2015-01-07 16:59:54   state           cmd_1
     2015-01-09 16:10:00   timer_1_c1      10.01.2015 16:10:00
     2015-01-08 21:30:00   timer_2_c1      09.01.2015 21:30:00
     2015-01-08 21:30:00   timer_3_c1      09.01.2015 21:30:00
     2015-01-09 06:40:00   timer_4_c2      10.01.2015 06:40:00
     2015-01-09 09:30:00   timer_5_c2      10.01.2015 09:30:00
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('OG_elt_RO_Strasse','STATE','') ne "on" and InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"") and !$we or DOIF_time_once($hash->{timer}{4},$wday,"") and $we)
   Days:
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           OG_elt_RO_Strasse du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru OG_elt_RO_Strasse
   Do:
     0          set OG_elt_RO_Strasse off
     1          set OG_elt_RO_Strasse on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           OG_elt_RO_Strasse:STATE du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE OG_elt_RO_Strasse:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   
Dieser hier ging einwandfrei runter.

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_ki1_RO_Carport off)
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_ki1_RO_Carport on)
   NAME       di_OG_ki1_RO_Carport
   NR         175
   NTFY_ORDER 50-di_OG_ki1_RO_Carport
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-09 16:52:23   cmd_event       EG_dr_TS_Terrasse
     2015-01-09 16:52:23   cmd_nr          1
     2015-01-09 17:03:57   e_EG_dr_TS_Terrasse_luminosity 0.36
     2015-01-09 16:52:23   state           cmd_1
     2015-01-09 16:10:00   timer_1_c1      10.01.2015 16:10:00
     2015-01-08 21:30:00   timer_2_c1      09.01.2015 21:30:00
     2015-01-08 21:30:00   timer_3_c1      09.01.2015 21:30:00
     2015-01-09 06:40:00   timer_4_c2      10.01.2015 06:40:00
     2015-01-09 09:30:00   timer_5_c2      10.01.2015 09:30:00
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"") and !$we or DOIF_time_once($hash->{timer}{4},$wday,"") and $we)
   Days:
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
   Do:
     0          set OG_ki1_RO_Carport off
     1          set OG_ki1_RO_Carport on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   
Vermutlich sehe ich mal wieder den Wald vor lauter Bäumen nicht.
Es wäre super, wenn da mal einer einen Blick drauf werfen könnte.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 09 Januar 2015, 17:41:17
Zitat von: maxritti am 09 Januar 2015, 17:07:58
Vermutlich sehe ich mal wieder den Wald vor lauter Bäumen nicht.
Es wäre super, wenn da mal einer einen Blick drauf werfen könnte.
Naja, es gibt ja einen kleinen, aber feinen Unterschied zwischen den Defintionen, die Du hier aufgelistet hast. Den kannst Du ja auch selbst leicht herausfinden. Höchstwahrscheinlich macht genau dieser Unterschied den ... hm ... Unterschied aus. Tipp: Er liegt nicht im DOIF, sondern im DOELSEIF-Zweig.

Vielleicht kann der DOELSEIF-Fall dadurch nie eintreten, dann bleibt das DOIF dauerhaft im cmd_1-Status. Ein erneutes Eintreten der DOIF-Bedingungen führt dann nicht zu einer Statusänderung des DOIFs, also passiert auch nichts. Das ist aber nur eine Vermutung, die zum geschilderten Verhalten passen würde. Zumindest aber ist das erste DOIF ja schon seit zwei Tagen im Status cmd_1, seitdem ist also anscheinend der DOELSEIF-Fall nie eingetreten. Folglich konnte es heute auch nicht auf den DOIF-Fall reagieren.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Januar 2015, 18:08:48
Zitat von: Damian am 09 Januar 2015, 16:13:42
Bei sleep in Kombination mit DOIF wird das System für die Zeit stillgelegt. Wait zwischen den Kommandos ist noch nicht realisiert. Z. Zt. ist at die einzige sinnvolle Lösung.

Damian

Ich revidiere meine Aussage.

Man kann tatsächlich sleep in Verbindung mit DOIF ohne Blockade des System nutzen.

Dazu müssen Kommandos, die durch sleep verzögert werden sollen mit einem Semikolon (nicht mit Komma) hinter sleep angegeben werden.

Beispiele:

DOIF (...) (set lamp on, sleep 5; set lamp off)

mehre Kommandos hinter sleep:

DOIF (...) (set lamp on, sleep 5; set lamp1 off; set lamp2 on...)

mehre sleeps:

DOIF (...) (set lamp on, sleep 5; set lamp1 off; sleep 3; set lamp2 on...)

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 09 Januar 2015, 18:42:44
Zitat von: Brockmann am 09 Januar 2015, 17:41:17
Naja, es gibt ja einen kleinen, aber feinen Unterschied zwischen den Defintionen, die Du hier aufgelistet hast. Den kannst Du ja auch selbst leicht herausfinden. Höchstwahrscheinlich macht genau dieser Unterschied den ... hm ... Unterschied aus. Tipp: Er liegt nicht im DOIF, sondern im DOELSEIF-Zweig.

Vielleicht kann der DOELSEIF-Fall dadurch nie eintreten, dann bleibt das DOIF dauerhaft im cmd_1-Status. Ein erneutes Eintreten der DOIF-Bedingungen führt dann nicht zu einer Statusänderung des DOIFs, also passiert auch nichts. Das ist aber nur eine Vermutung, die zum geschilderten Verhalten passen würde. Zumindest aber ist das erste DOIF ja schon seit zwei Tagen im Status cmd_1, seitdem ist also anscheinend der DOELSEIF-Fall nie eingetreten. Folglich konnte es heute auch nicht auf den DOIF-Fall reagieren.

Dann wird das wohl das [OG_elt_RO_Strasse] ne "on" and in dem DOELSEIF sein.
Das hatte ich mal eingebaut um mögliche Schaltungen nach "on" obwohl der Rollo schon auf "on" steht zu vermeiden.
Hatte damals schon nicht funktioniert und ich meinte es bei allen 8 DOIFs wieder ausgebaut zu haben.
Den Fall da oben habe ich dann ganz offensichtlich vergessen.

Danke Dir für's suchen. :)

Wobei ich mir dann doch wieder die Frage stellt, wie ich doppelte Schaltungen vermeiden kann.
Mal angenommen der Rollo geht morgens wie geplant hoch. Dann macht nachmittags jemand den Rollo am Schalter direkt nach unten. Dann wird es abends dunkel und dann würde das DOIF ja triggern und einen "off" Befehl senden. Was ja eigentlich gar nicht notwendig ist.
Daher hatte ich mal ein zusätzliches [OG_elt_RO_Strasse] ne "off" and eingebaut.
Aber da blieben dann wie vorhin der ein und andere Rollo einfach oben und gingen nicht zu.

Mag aber sein, dass ich da etwas durcheinander geworfen hatte.
Ich fange den Test noch mal an.
Titel: Antw:neues Modul DOIF
Beitrag von: Jens_B am 09 Januar 2015, 18:48:27
Dafür gibt's im Modul das Fragezeichen. Schau mal in die commandref.

Du solltest das dann mit
[?OG_elt_RO_Strasse] ne "on

Arbeiten.

Gruß Jens


Gesendet von meinem iPhone mit Tapatalk
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 09 Januar 2015, 19:12:19
Danke Dir für den Tip mit dem ?
Ich würde das dann einfach mal so definieren.
Also zu Beginn bei DOIF und bei DOELSEIF die Abfrage des aktuellen Status des Aktors.

([?OG_elt_RO_Strasse] ne "off" and [du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([?OG_elt_RO_Strasse] ne "on" and [du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_elt_RO_Strasse on)


Mal schauen, ob das funktioniert wie ich das wollte.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Januar 2015, 19:25:12
Zitat von: maxritti am 09 Januar 2015, 19:12:19
Danke Dir für den Tip mit dem ?
Ich würde das dann einfach mal so definieren.
Also zu Beginn bei DOIF und bei DOELSEIF die Abfrage des aktuellen Status des Aktors.

([?OG_elt_RO_Strasse] ne "off" and [du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([?OG_elt_RO_Strasse] ne "on" and [du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}] and !$we or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}] and $we))
  (set OG_elt_RO_Strasse on)


Mal schauen, ob das funktioniert wie ich das wollte.

Zeitabfragen mit $we lassen sich eleganter statt [{timer}] and $we mit  [{timer}|7] angeben.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 09 Januar 2015, 19:32:20
Zitat von: Damian am 09 Januar 2015, 19:25:12
Zeitabfragen mit $we lassen sich eleganter mit statt mit [{timer}] and $we mit  [{timer}|7] angeben.

Gruß

Damian

Aber damit decke ich doch keine Holiday Informationen ab?
Denn $we liefert ja auch 1 zurück, wenn ein Mittwoch ist, dieser aber in einer Holiday Datei hinterlegt ist.

Wobei, da biete Dein DOIF doch bestimmt auch eine coole Lösung oder?  :)


EDIT:

Okay. Commandref lesen und freuen. :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Januar 2015, 19:49:41
Zitat von: maxritti am 09 Januar 2015, 19:32:20
Aber damit decke ich doch keine Holiday Informationen ab?


Natürlich. Es ist identisch das Gleiche, wie die and-Abfrage mit $we, denn es wird intern $we nachgebaut.

Ansonsten nach holiday2we suchen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: bretterknaller am 09 Januar 2015, 20:02:55
Hallo zusammen

Ich habe jetzt schon viel gelesen aber noch keine richtige Lösung für mein vorhaben gefunden.

Es soll wenn es dunkel ist ab 18 Uhr bis 04 Uhr meine Lichterkette angeschaltet werden ab nur wenn mein Kabel Box an ist.
Zurzeit habe ich es so.

define Lichterkette DOIF ([?18:00-04:00] and [QUAD] eq "on" ) (set Steckdose_B on) DOELSEIF ([QUAD] eq "off") (set Steckdose_B off)
attr Lichterkette do always


Was auch sehr gut funktioniert. :D
Da es aber bald Sommer wird ist es ja um 19 noch nicht dunkel.

{sunset(0,"17:00","21:00")}
Wenn ich es mit sunset mache habe ich ja auch eine feste Schaltzeit z.b 19:34

Gibt es da noch eine gute Lösung für mein Problem.


mfg. Bretterknaller
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Januar 2015, 20:22:04
Zitat von: bretterknaller am 09 Januar 2015, 20:02:55

{sunset(0,"17:00","21:00")}
Wenn ich es mit sunset mache habe ich ja auch eine feste Schaltzeit z.b 19:34

Die Zeit ist nicht fest, sondern variiert jeden Tag. Das funktioniert bei DOIF auch mit Fragezeichen :) Probier mal aus. Bei dir dann:


define Lichterkette DOIF ([?{sunset(0,"17:00","21:00")}-04:00] and [QUAD] eq "on" ) (set Steckdose_B on) DOELSEIF ([QUAD] eq "off") (set Steckdose_B off)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Sidey am 09 Januar 2015, 23:09:55
Hallo,

habe mein Problemchen selbst gelöst:

Zitat von: Sidey am 07 Januar 2015, 09:47:10
..
Jetzt passiert folgendes. Wenn die Erste Bedingung wahr ist, wird mein dummy auf in gesetzt.
Danach scheint das Doif erneut getriggert zu werden und die 2. Bedingung ist wahr.


([wk.PwrSw_Switch] eq "on" && [wk.PwrSw_Power:power] >= 5 && [wk.WaschmaschineWartemodus] eq "off" && [wk.Waschmaschine_Betrieb] eq "off") (set wk.WaschmaschineWartemodus on,set wk.PwrSw_Switch off)   

DOELSEIF ([wk.PwrSw_Switch] eq "on" && [wk.PwrSw_Power:power] >= 5 && [wk.WaschmaschineWartemodus] eq "on") (set wk.WaschmaschineWartemodus off,set wk.Waschmaschine_Betrieb on)   



Festellung:
Das Kommando "set wk.WaschmaschineWartemodus on" habe ich vor "set wk.PwrSw_Switch off" ausgeführt.
Das führt dazu und das finde ich komisch, wird die 2. Bedingung Wahr und auch ausgeführt.
Laut Logile kann ich das zwar nicht nachweisen, aber drehe ich die Befehle um, also 1. "set wk.PwrSw_Switch off", dann kann ich im logfile nachvollziehen, dass erst der Schalter auf OFF geht und danach mein Dummy auf on.

Resultat: Es wird keine weitere Bedingung getriggert, da nicht zutreffend.

Solltet ihr also, so wie ich in DOELSEIF Abfragen auf Readings oder Stati prüfen, welche ihr in der Bedingung zuvor verändert, achtet auf die Reihenfolge euer Befehle.


Grüße Sidey
Grüße Sidey
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 09 Januar 2015, 23:16:34
Du hast in deinem ersten DOIF-Fall eine Rekursion drin: Schalten eines Devices, welches die Bedingung triggert ist ungünstig. Siehe Lösungsvorschlag mit Fragezeichen zur Rekursion  in der Commandref von DOIF.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: bretterknaller am 10 Januar 2015, 06:20:32
Zitat von: Damian am 09 Januar 2015, 20:22:04
Die Zeit ist nicht fest, sondern variiert jeden Tag. Das funktioniert bei DOIF auch mit Fragezeichen :) Probier mal aus. Bei dir dann:


define Lichterkette DOIF ([?{sunset(0,"17:00","21:00")}-04:00] and [QUAD] eq "on" ) (set Steckdose_B on) DOELSEIF ([QUAD] eq "off") (set Steckdose_B off)

Gruß

Damian

Danke!

So hat es geklappt.  :)
Titel: Antw:neues Modul DOIF
Beitrag von: blueberry63 am 10 Januar 2015, 15:55:00
Hallo,

ich möchte eine Funktion mit DOIF bauen, die mir einen Klingelton auf meinem Fritzfon abspielt, wenn das Badfenster in der kalten Jahreszeit zu lange auf ist. Hier ist meine Definition:


define di_BadU DOIF ([FensterBadU] eq "open") (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
attr di_BadU do resetwait
attr di_BadU repeatsame 3
attr di_BadU room BadU
attr di_BadU wait 420


Nach meinem Verständnis sollte die Aktion nach 7 Min. und danach noch 2x ausgeführt werden, falls das Fenster zwischenzeitlich nicht geschlossen wurde. ES FUNKTIONIERT ABER NUR EINMAL :-(

Was mache ich falsch?

Gruß
Blueberry63
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Januar 2015, 17:32:55
Zitat von: blueberry63 am 10 Januar 2015, 15:55:00
Hallo,

ich möchte eine Funktion mit DOIF bauen, die mir einen Klingelton auf meinem Fritzfon abspielt, wenn das Badfenster in der kalten Jahreszeit zu lange auf ist. Hier ist meine Definition:


define di_BadU DOIF ([FensterBadU] eq "open") (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
attr di_BadU do resetwait
attr di_BadU repeatsame 3
attr di_BadU room BadU
attr di_BadU wait 420


Nach meinem Verständnis sollte die Aktion nach 7 Min. und danach noch 2x ausgeführt werden, falls das Fenster zwischenzeitlich nicht geschlossen wurde. ES FUNKTIONIERT ABER NUR EINMAL :-(

Was mache ich falsch?

Gruß
Blueberry63

wozu das do resetwait?

Für eine Wiederholung müsste FensterBadU immer wieder "open" senden, das tut er wahrscheinlich nicht. repeatsame macht nur Sinn bei zyklich sendenden Sensoren.

Deine Lösung sieht dann eher so aus:

define di_BadU DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!",sleep 420;set WLANAP2 ring 610 20 Alert show:Fenster zumachen!";sleep 420;set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
attr di_BadU wait 420


Allerdings werden die folgenden Klingeltöne immer ausgeführt, auch wenn das Fenster zwischendurch geschlossen wird.

Alternativ dazu kannst du jeweils ein DOIF mit einem Klingelton definieren.


define di_BadU1 DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
attr di_BadU1 wait 420

define di_BadU2 DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
attr di_BadU2 wait 840

define di_BadU3 DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
attr di_BadU3 wait 1260


Bei dieser Lösung kommt kein Klingelton, sobald das Fenster wieder geschlossen wird.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: blueberry63 am 10 Januar 2015, 18:28:45
Hallo Damian,

die Lösung mit den 3 DOIFs werde ich ausprobieren. Ursprünglich hatte ich es mit einem Watchdog probiert, aber das funktionierte nicht.

Danke
Blueberry63
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Januar 2015, 08:28:24
Zitat von: blueberry63 am 10 Januar 2015, 18:28:45
die Lösung mit den 3 DOIFs werde ich ausprobieren. Ursprünglich hatte ich es mit einem Watchdog probiert, aber das funktionierte nicht.
Drei DOIFs sind mindestes zwei zuviel.  ;)

Folgende Variante müsste es eigentlich auch alleine schaffen, indem sie sich über den cmdstate noch zweimal selbst triggert:

define di_Bad DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N1")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N2")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
DOELSEIF ([FensterBadU] eq "closed")
attr di_Bad cmdState N1|N2|N3|N0
attr di_Bad wait 420:420:420
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 Januar 2015, 08:45:03
Zitat von: Brockmann am 11 Januar 2015, 08:28:24
Drei DOIFs sind mindestes zwei zuviel.  ;)

Folgende Variante müsste es eigentlich auch alleine schaffen, indem sie sich über den cmdstate noch zweimal selbst triggert:

define di_Bad DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N1")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N2")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
DOELSEIF ([FensterBadU] eq "closed")
attr di_Bad cmdState N1|N2|N3|N0
attr di_Bad wait 420:420:420


ja, ist ein schönes Beispiel, wie man mit DOIF einen endlichen Automaten bauen kann. :)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Michi240281 am 11 Januar 2015, 16:40:37
Hallo,

ist es möglich, in Verbindung mit dem DOIF Modul jeden 1. eines Monats ein KOmmando zu triggern?

Ich habe folgendes als Ausgangsbasis genommen:

define Licht_25_Januar_an at *07:15:00 {if($year==2011 && $month==1 && $mday==25) {fhem("set Licht1 on")} }

Also habe ich mir das &mday==25 rausgepickt und folgendes getestet:

define test99 DOIF ([{$mday==1}]) (set Vitrine an)

Habe gedacht, das müsste vllt gehen, weil in der command ref zum DOIF Modul folgendes steht:

+ Zeitangaben in der Bedingung: [HH:MM:SS] oder [HH:MM] oder [{<perl-function>}]

Aber irgendwie tuts das nicht!

Jmd ne Idee?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 11 Januar 2015, 16:57:36
Zitat von: Michi240281 am 11 Januar 2015, 16:40:37
Hallo,

ist es möglich, in Verbindung mit dem DOIF Modul jeden 1. eines Monats ein KOmmando zu triggern?

Ich habe folgendes als Ausgangsbasis genommen:

define Licht_25_Januar_an at *07:15:00 {if($year==2011 && $month==1 && $mday==25) {fhem("set Licht1 on")} }

Also habe ich mir das &mday==25 rausgepickt und folgendes getestet:

define test99 DOIF ([{$mday==1}]) (set Vitrine an)

Habe gedacht, das müsste vllt gehen, weil in der command ref zum DOIF Modul folgendes steht:

+ Zeitangaben in der Bedingung: [HH:MM:SS] oder [HH:MM] oder [{<perl-function>}]

Aber irgendwie tuts das nicht!

Jmd ne Idee?

Soll $mday==1 eine Perlfunktion sein? Und wann soll das Modul getriggert werden?

$mday ist eine Variable, die du abfragen willst und die wird dein Modul mit Sicherheit nicht triggern.

Wenn schon, dann eher so:

define test99 DOIF ([07:15] and $mday==1) (set Vitrine an)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 12 Januar 2015, 09:38:50
Hallo,
überlege gerade, wie ich eine Steckdose in einem bestimmten Zeitraum mit Dauersaft versorge. Wenn man den Trigger nicht auf den perl code legen kann!

Der Verbraucher soll zwischen 01.02. und 31.11. dauernd auf "on" sein. Danach schaltet er ab!

das macht man dann ja so...
.....
and (($mday>=01 and $month==2) or ($mday<=11 and $month==30))

nur wo lege ich den Trigger hin?
muss ich das dann mit [00:00-24:00] and ... lösen?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: blueberry63 am 12 Januar 2015, 10:46:24
Zitat
define di_Bad DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N1")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N2")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
DOELSEIF ([FensterBadU] eq "closed")
attr di_Bad cmdState N1|N2|N3|N0
attr di_Bad wait 420:420:420

Das werde ich heute mal ausprobieren. Kann man eigentlich "Wildcarts" verwenden? In diesem Fall würde ich gerne auf "Fenster*" abfragen.

Gruß
Blueberry63
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 12 Januar 2015, 10:55:48
Probiere mal:
Fenster.*
(Mit Punkt vorm Stern)
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Januar 2015, 11:41:33
Zitat von: MaJu am 12 Januar 2015, 10:55:48
Probiere mal:
Fenster.*
(Mit Punkt vorm Stern)
Hä? Was soll das denn sein?  :o

Prinzipiell sind "Wildcards" bei DOIF nicht möglich.
Seit kurzem kann man DOIFs von einem Ereignis triggern lassen und dabei RegEx verwenden. Aber nach meinen Verständnis (hab es selbst noch nicht getestet) muss man dabei auch ein konkretes Device angeben, auf dessen Events die RegEx angewendet werden soll.
Alternative wäre eine Structure für alle Fenstersensoren, die jeweils den Status des zuletzt geänderten Mitglieds annimmt.
Titel: Antw:neues Modul DOIF
Beitrag von: blueberry63 am 12 Januar 2015, 12:58:03
ZitatHä? Was soll das denn sein?

Du hast Recht: das war eine blöde Idee. Natürlich geht das nur über Trigger  :-[ :-[ :-[

Gruß
Blueberry63
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 12 Januar 2015, 13:25:09
Die blöde Idee kam von mir, da brauchst du dich doch nicht entschuldigen ;-)

Grundsätzlich habe ich eine Fenster-offen-Warnung auch in Planung, aber noch nicht umgesetzt. Ich möchte dir das nur als Denkanstoß mitgeben.

Eine Warnung stur nach Zeit halte ich bei meinem Einsatzzweck nicht für sinnvoll, denn dann würde es im Sommer irgendwann anfangen mit nerven, wenn man einfach länger am Abend frische Luft in die Wohnung lässt. Wenn du im Bad auch die Raumtemperatur misst, würde ich es damit verbinden (das ist bei mir zumindest der Plan).
Denn bei -20 Grad Außentemperatur ist die Lüftungszeit doch eine andere als bei über +20 Grad.

Das müsste dann ungefähr so aussehen: Wenn die Temperatur im Bad unter 12 Grad ist UND das Fenster ist offen, dann sende eine Nachricht.

Mit do=always müsste dann eigentlich bei jedem erneuten Empfang eines Temperaturwertes die Warnung ausgegeben werden, jedes Mal, bis das Fenster geschlossen wurde.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Januar 2015, 13:27:19
Zitat von: Spartacus am 12 Januar 2015, 09:38:50
Hallo,
überlege gerade, wie ich eine Steckdose in einem bestimmten Zeitraum mit Dauersaft versorge. Wenn man den Trigger nicht auf den perl code legen kann!

Der Verbraucher soll zwischen 01.02. und 31.11. dauernd auf "on" sein. Danach schaltet er ab!

das macht man dann ja so...
.....
and (($mday>=01 and $month==2) or ($mday<=11 and $month==30))

nur wo lege ich den Trigger hin?
muss ich das dann mit [00:00-24:00] and ... lösen?
Christian

Wie in der commandref bereits erwähnt, sollte man Intervalle über mehrere Tage in einen Einschaltzeitpunkt und einen Ausschaltzeitpunkt aufsplitten, hier z. B.:

DOIF ([08:00] and $mday == 1 and $month==2) (set lamp on) DOELSEIF ([20:00] and $mday ==30 and $month==11) (set lamp off)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 12 Januar 2015, 13:38:37
Hi Damian,
danke! Das ist logisch! Hätte ich auch selber drauf kommen müssen! Habe die Beschreibung in der commandRef diesbezüglich nicht mit meinem Anwendungsfall in Verbindung gebracht.

Vielen Dank,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 12 Januar 2015, 16:08:51
Hallo,

ich bin gerade dabei Stück für Stück meine notifys mit DOIF zusammen zu fassen und zu vereinfachen.

Bei meiner Batterieüberwachung hänge ich gerade  :(

Folgenden notify habe ich:
.*:[Bb]attery:.* { if(($EVENT !~ m/ok/) && (time > $main::NewMailtime)) {
my $alias = AttrVal($NAME,"alias",$NAME);
fhem ("set Pushover msg 'FHEM-WARNUNG' '$alias $EVENT'");
$main::NewMailtime = time + 14400;
Log 3, "$NAME: Batteriewarnung $EVENT";
}
}


Folgendes habe ich probiert:
define BatterieCheck DOIF ([*:[Bb]attery.*]) !=~ "ok") (set Pushover msg 'FHEM-WARNUNG' '$NAME $EVENT')

Wird aber, vermutlich wegen den Klammern, nicht angenommen.

Fehler:
BatterieCheck DOIF: expected DOELSEIF or DOELSE:  !=~ "ok") (set Pushover msg 'FHEM-WARNUNG' '$NAME $EVENT')

Kann ich mit DOIF überhaupt alle Devices überwachen?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Januar 2015, 16:28:52
Zitat von: Mitch am 12 Januar 2015, 16:08:51
Folgendes habe ich probiert:
define BatterieCheck DOIF ([*:[Bb]attery.*]) !=~ "ok") (set Pushover msg 'FHEM-WARNUNG' '$NAME $EVENT')

Wird aber, vermutlich wegen den Klammern, nicht angenommen.

Kann ich mit DOIF überhaupt alle Devices überwachen?
Wie wenige Posts zuvor gerade schon mal geschrieben: "Wildcards" sind bei DOIF nicht möglich.
Man könnte statt dessen eine Structure verwenden, die jeweils den Status des zuletzt geänderten Device annimmt.
Ich meine auch, das Thema Batterieüberwachung ist hier im Thread schon mal behandelt worden - Suchfunktion?
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 12 Januar 2015, 16:29:58
Danke - SuFu hatte nichts gefunden  ???
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 13 Januar 2015, 17:23:03
Nochmal eine Frage dazu:

wenn ich mehrere Bedingungen verketten möchte, wie bekomme ich das hin?
Es soll quasi folgendes gelten:

Wenn SCHALTER=off UND DEVICE1=on ODER SCHALTER=off UND DEVICE2=on ODER ....

Also immer wieder der Schalter, aber immer mit einem anderen Device.

Ich hatte folgendes probiert:

define test DOIF ([SCHALTER] eq "off" and [DEVICE1] eq "on" or [DEVICE2] eq "on"...

und

define test DOIF ([SCHALTER] eq "off" and [DEVICE1] eq "on" or [SCHALTER] eq "off" and [DEVICE2] eq "on" or [SCHALTER] eq "off" and ...

Geht so eine "Verschachtelung" überhaupt in einen DOIF??

Wollte damit eine Vielzahl notifys löschen.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 13 Januar 2015, 17:36:01
Da musst du mMn einfach ein paar Klammern spendieren:

define test DOIF ([SCHALTER] eq "off" and ([DEVICE1] eq "on" or [DEVICE2] eq "on" or [DEVICE3] eq "on"...))
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 13 Januar 2015, 17:36:48
Hallo,
ich möchte mit einem LangDruck auf einen Taster einen Aktor toggeln. Allerdings soll dieser in der Einschaltzeit begrenzt sein und automatisch abschalten, falls man es vergisst.

([sKurzerLangerDruck_UL:?partial_1] and [outdoorlight] eq "off") (define later at +00:05:00 set outdoorlight off, set outdoorlight on)
DOELSEIF ([sKurzerLangerDruck_UL:?partial_1] and [outdoorlight] eq "on") (delete later, set outdoorlight off)


Soweit geht das auch mit dem "define later", allerdings hat das Ganze einen Haken. Wenn cmd1 ausgeführt wird und das "later" den Aktor abschaltet, bleibt das DOIF im cmd1 stehen. Das heißt, das erneute Einschalten wird nicht getriggert.

Hat jemand einen Tipp, bzw. kann man das auch einfacher lösen, ohne ein "later" zu definieren?

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 13 Januar 2015, 18:44:27
Zitat von: maxritti am 13 Januar 2015, 17:36:01
Da musst du mMn einfach ein paar Klammern spendieren:

define test DOIF ([SCHALTER] eq "off" and ([DEVICE1] eq "on" or [DEVICE2] eq "on" or [DEVICE3] eq "on"...))

Danke, das war der richtige Hinweis.

Allerdings habe ich noch ein kleines Problem.

Dies ist die DEF:
(([dunkel] eq "on" and [geofency:currLoc_Mitch] =~ "arrived") or ([dunkel] eq "on" and [CUL_HM_HM_RC_Key4_2_26DDB3_open]) or ([dunkel] eq "on" and [CUL_HM_HM_RC_Key4_2_24BFB1_open]) or ([dunkel] eq "on" and [CUL_HM_HM_RC_Key4_2_26DCB2_open]) or ([dunkel] eq "on" and [FS21_5b090]) or ([dunkel] eq "on" and [Klingel1])) (set CUL_HM_Gartenlicht on)

Nun schaltet aber das Gartenlicht auch ein, wenn NUR "dunkel" angeht.
(Zur Info: dunkel wird von sunset/sunrise geschalten.)

Darf doch eigentlich nicht sein? dunkel ist ja immer mit einer zweiten Bedingung mit AND verknüpft?
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 13 Januar 2015, 18:49:46
Mach doch mal ein "list meinDOIF" wenn nur "dunkel" auf "on" ist.
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 13 Januar 2015, 18:57:12
gemacht:

Internals:
   CFGFN
   DEF        (([dunkel] eq "on" and [geofency:currLoc_Mitch] =~ "arrived") or ([dunkel] eq "on" and [CUL_HM_HM_RC_Key4_2_26DD4F_open]) or ([dunkel] eq "on" and [CUL_HM_HM_RC_Key4_2_24BFB5_open]) or ([dunkel] eq "on" and [CUL_HM_HM_RC_Key4_2_26DC6A_open]) or ([dunkel] eq "on" and [FS21_5b090]) or ([dunkel] eq "on" and [Klingel1])) (set CUL_HM_Gartenlicht on)
   NAME       Gartenlicht.Activator
   NR         4439
   NTFY_ORDER 50-Gartenlicht.Activator
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2015-01-13 18:56:52   cmd_event       dunkel
     2015-01-13 18:56:52   cmd_nr          1
     2015-01-13 18:56:52   e_dunkel_STATE  on
     2015-01-13 18:56:52   state           cmd_1
   Condition:
     0          (InternalDoIf('dunkel','STATE','') eq "on" and ReadingValDoIf('geofency','currLoc_Mitch','') =~ "arrived") or (InternalDoIf('dunkel','STATE','') eq "on" and InternalDoIf('CUL_HM_HM_RC_Key4_2_26DD4F_open','STATE','')) or (InternalDoIf('dunkel','STATE','') eq "on" and InternalDoIf('CUL_HM_HM_RC_Key4_2_24BFB5_open','STATE','')) or (InternalDoIf('dunkel','STATE','') eq "on" and InternalDoIf('CUL_HM_HM_RC_Key4_2_26DC6A_open','STATE','')) or (InternalDoIf('dunkel','STATE','') eq "on" and InternalDoIf('FS21_5b090','STATE','')) or (InternalDoIf('dunkel','STATE','') eq "on" and InternalDoIf('Klingel1','STATE',''))
   Devices:
     0           dunkel geofency CUL_HM_HM_RC_Key4_2_26DD4F_open CUL_HM_HM_RC_Key4_2_24BFB5_open CUL_HM_HM_RC_Key4_2_26DC6A_open FS21_5b090 Klingel1
     all         dunkel geofency CUL_HM_HM_RC_Key4_2_26DD4F_open CUL_HM_HM_RC_Key4_2_24BFB5_open CUL_HM_HM_RC_Key4_2_26DC6A_open FS21_5b090 Klingel1
   Do:
     0          set CUL_HM_Gartenlicht on
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           dunkel:STATE CUL_HM_HM_RC_Key4_2_26DD4F_open:STATE CUL_HM_HM_RC_Key4_2_24BFB5_open:STATE CUL_HM_HM_RC_Key4_2_26DC6A_open:STATE FS21_5b090:STATE Klingel1:STATE
     all         dunkel:STATE CUL_HM_HM_RC_Key4_2_26DD4F_open:STATE CUL_HM_HM_RC_Key4_2_24BFB5_open:STATE CUL_HM_HM_RC_Key4_2_26DC6A_open:STATE FS21_5b090:STATE Klingel1:STATE
   Readings:
     0           geofency:currLoc_Mitch
     all         geofency:currLoc_Mitch
   State:
   Timerfunc:
   Trigger:
Attributes:
   DbLogExclude .*
   do         always
   verbose    0


und jetzt?  :-[
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 13 Januar 2015, 20:08:29
Zitat von: Mitch am 13 Januar 2015, 18:57:12
und jetzt?  :-[

Jetzt machst Du daraus erstmal:

([dunkel] eq "on" and ([geofency:currLoc_Mitch] =~ "arrived" or [CUL_HM_HM_RC_Key4_2_26DD4F_open] or [CUL_HM_HM_RC_Key4_2_24BFB5_open] or [CUL_HM_HM_RC_Key4_2_26DC6A_open] [FS21_5b090]) or [Klingel1]) (set CUL_HM_Gartenlicht on)


Ist das gleiche in kürzer und lesbarer.
Dann hast Du da jede Menge Bedingungen der Form ([CUL_HM_HM_RC_Key4_2_26DD4F_open] or [CUL_HM_HM_RC_Key4_2_24BFB5_open] or [CUL_HM_HM_RC_Key4_2_26DC6A_open] [FS21_5b090]) or [Klingel1]) ohne einen Vergleich oder ähnliches drin. Die sind doch eigentlich immer wahr, egal was für einen State das Device hat. Was willst Du damit erreichen?
Titel: Antw:neues Modul DOIF
Beitrag von: cotecmania am 13 Januar 2015, 20:25:33
Hallo,

wie kann man denn aus einem Ereignis, das einen String liefert, nur einen bestimmten Teil (Zahl) davon verwenden ?
define DI_StromNOK DOIF ([CUL_EM_1:cum_day] > 10) ...
cum_day liefert "CUM_DAY: 6.542 CUM: 63610.375 COST: 0.00"

Ich habe mit split versucht den Teil2 des strings (6.542) zu extrahieren, bin aber klaeglich gescheitert ...

Folgende regexp wuerde mir die Zahl filtern : (?<=CUM_DAY: )(.*)(?= CUM:)

Wie baue ich das ein ?

Das Beispiel in der commandref (:d) verstehe ich nicht :
ZitatFiltern nach Zahlen
Es soll aus einem Reading, das z. B. ein Prozentzeichen beinhaltet, nur der Zahlenwert für den Vergleich genutzt werden:
define di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)
Gruss
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 13 Januar 2015, 20:43:46
Zitat von: Brockmann am 13 Januar 2015, 20:08:29
Jetzt machst Du daraus erstmal:

([dunkel] eq "on" and ([geofency:currLoc_Mitch] =~ "arrived" or [CUL_HM_HM_RC_Key4_2_26DD4F_open] or [CUL_HM_HM_RC_Key4_2_24BFB5_open] or [CUL_HM_HM_RC_Key4_2_26DC6A_open] [FS21_5b090]) or [Klingel1]) (set CUL_HM_Gartenlicht on)


Ist das gleiche in kürzer und lesbarer.
Dann hast Du da jede Menge Bedingungen der Form ([CUL_HM_HM_RC_Key4_2_26DD4F_open] or [CUL_HM_HM_RC_Key4_2_24BFB5_open] or [CUL_HM_HM_RC_Key4_2_26DC6A_open] [FS21_5b090]) or [Klingel1]) ohne einen Vergleich oder ähnliches drin. Die sind doch eigentlich immer wahr, egal was für einen State das Device hat. Was willst Du damit erreichen?

Im Prinzip will ich folgendes machen:

die eine Bedingung muss sein, dass dunkel an ist
wenn dann enweder einer der Fernbedienungen (CUL_HM_HM_RC_Key4_2_xxxxxx_open) gedrückt wird ODER mein Handy am Eingang ODER der Schalter FS21_xxx ODER die Klingel gedrückt wird
soll das Licht angehen.

Ich möchte also jedes Event von den FBs, der Klingel und dem Schalter abfangen.

Gerade beim Schalter kann on, off, dim up, dim down oder toggle kommen (je nach dem, wer wie lange und wie oft drückt)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Januar 2015, 21:02:12
Zitat von: cotecmania am 13 Januar 2015, 20:25:33
Hallo,

wie kann man denn aus einem Ereignis, das einen String liefert, nur einen bestimmten Teil (Zahl) davon verwenden ?
define DI_StromNOK DOIF ([CUL_EM_1:cum_day] > 10) ...
cum_day liefert "CUM_DAY: 6.542 CUM: 63610.375 COST: 0.00"

Ich habe mit split versucht den Teil2 des strings (6.542) zu extrahieren, bin aber klaeglich gescheitert ...

Folgende regexp wuerde mir die Zahl filtern : (?<=CUM_DAY: )(.*)(?= CUM:)

Wie baue ich das ein ?

Das Beispiel in der commandref (:d) verstehe ich nicht :Gruss

define DI_StromNOK DOIF ([CUL_EM_1:cum_day:d] > 10) ...

Hast du bestimmt noch nicht probiert, sonst hättest du die regexp-Überlegung sparen können.

:d entspricht (-?\d+(\.\d+)?)

Was das bedeutet wirst du schon selbst herausfinden, da du dich mit regexp offensichtlich schon beschäftigt hast  ;) .

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Januar 2015, 21:46:12
Zitat von: Spartacus am 13 Januar 2015, 17:36:48
Hallo,
ich möchte mit einem LangDruck auf einen Taster einen Aktor toggeln. Allerdings soll dieser in der Einschaltzeit begrenzt sein und automatisch abschalten, falls man es vergisst.

([sKurzerLangerDruck_UL:?partial_1] and [outdoorlight] eq "off") (define later at +00:05:00 set outdoorlight off, set outdoorlight on)
DOELSEIF ([sKurzerLangerDruck_UL:?partial_1] and [outdoorlight] eq "on") (delete later, set outdoorlight off)


Soweit geht das auch mit dem "define later", allerdings hat das Ganze einen Haken. Wenn cmd1 ausgeführt wird und das "later" den Aktor abschaltet, bleibt das DOIF im cmd1 stehen. Das heißt, das erneute Einschalten wird nicht getriggert.

Hat jemand einen Tipp, bzw. kann man das auch einfacher lösen, ohne ein "later" zu definieren?

Christian

Was spricht gegen do always in diesem Fall?

Die Abfrage:

[outdoorlight] eq "off" bzw. [outdoorlight] eq "on"

würde ich mit [?outdoorlight] ... definieren (wegen unnötiger Selbsttriggerung)

Was spricht gegen on-for-timer statt at?

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 13 Januar 2015, 22:10:48
Hallo Damian,
vielen Dank für Deine Antwort. Das "do always" hatte ich eigentlich eingebaut, aber offenbar das Attribut nicht gespeichert! Es geht jetzt!

Ich toggle testweise das Dummy device "outdoorlight" und damit funzt ein "on-for-timer" nicht, da der state bei eingeschaltetem Device nicht "on" , sondern "on-for-timer 60" ist.

([sKurzerLangerDruck_UL:?partial_1] and [?outdoorlight] eq "off") (set outdoorlight on-for-timer 60)
DOELSEIF ([sKurzerLangerDruck_UL:?partial_1] and [?outdoorlight] eq "on") (outdoorlight off)


Ein richtiges Device scheint aber den state "on" zu vergeben...also sollte das jetzt auch funktionieren!
Ich denke immer noch zu kompliziert....aber mit DOIF kann man (fast) jedes Problem lösen!

Schönen Abend noch,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 14 Januar 2015, 09:25:19
Zitat von: Mitch am 13 Januar 2015, 20:43:46
die eine Bedingung muss sein, dass dunkel an ist
wenn dann enweder einer der Fernbedienungen (CUL_HM_HM_RC_Key4_2_xxxxxx_open) gedrückt wird ODER mein Handy am Eingang ODER der Schalter FS21_xxx ODER die Klingel gedrückt wird
soll das Licht angehen.

Genau das macht der Code ja auch. Problem ist nur: Wenn dunkel angeht, sind die anderen Bedingungen immer wahr, weil es eben keine echten Bedingungen sind. Deshalb wird die Aktion ausgeführt, wenn dunkel auf an geht.

Zitat von: Mitch am 13 Januar 2015, 20:43:46
Ich möchte also jedes Event von den FBs, der Klingel und dem Schalter abfangen.

Dann schau Dir in der Commandref zu DOIF mal den Abschnitt "Ereignissteuerung über Auswertung von Events an". Das sollte genau die Lösung für diese Aufgabe sein.
Beachte aber, dass manche Devices auch von sich aus zyklisch senden bzw. Batteriemeldung absetzen usw. Eventuell sollte man also nicht wirklich auf ALLE Events reagieren, sondern nur auf bestimmte. Dazu musst Du Dir ggf. eine passende Regular Expression basteln.
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 14 Januar 2015, 09:45:51
Versuche mal, deine umständlichen Bezeichnungen umzubenennen. Damit blickst du vor allem selbst besser durch.
Einfach rename CUL_HM_HM_RC_Key4_2_26DD4F_open Lass_dir_einen_neuen_Namen_einfallen

Das mit dem _open am Ende wundert mich. Ist das schon ein Event/Befehl, oder tatsächlich der Name des Device? Ansonsten kannst du dir auch mit einer Gegenteil-Auswertung helfen, damit wird auf alles reagiert was nicht diesem Status entspricht: ([Klingel1] ne "mausetot")

Welche Events werden denn erzeugt? Insbesondere auch bei FS21_5b090 und Klingel1? Mit dem Fragezeichen werden nur Events getriggert, kein Status. Wenn Geräte häufiger senden, solltest du den Status auswerten.

Als Denkanstoß von mir (bitte die Events anpassen):
([dunkel] eq "on" and ([geofency:currLoc_Mitch] =~ "arrived" or [CUL_HM_HM_RC_Key4_2_26DD4F_open:?open] or [CUL_HM_HM_RC_Key4_2_24BFB5_open:?open] or [CUL_HM_HM_RC_Key4_2_26DC6A_open:?open] [FS21_5b090:?on]) or [Klingel1:?on]) (set CUL_HM_Gartenlicht on)
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 14 Januar 2015, 10:23:20
Danke euch vielmals.

Habe jetzt etwas umgebaut:
(([dunkel] eq "on" and [geofency:currLoc_Mitch] eq "Garten") or ([dunkel] eq "on" and [CUL_HM_FB_Leoni_light:?to]) or ([dunkel] eq "on" and [CUL_HM_FB_Markus_light:?to]) or ([dunkel] eq "on" and [CUL_HM_FB_Simone_light:?to]) or ([dunkel] eq "on" and [FS21_5b090:?toggle]) or ([dunkel] eq "on" and [Klingel1:?on])) (set CUL_HM_Gartenlicht on)

Werde dann mal heute Abend testen, wenn ich Zuhause bin.
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 14 Januar 2015, 10:29:53
Dann kannst du es auch zusammenfassen und kürzer schreiben:
([dunkel] eq "on" and ([geofency:currLoc_Mitch] eq "Garten" or [CUL_HM_FB_Markus_light:?to] or [CUL_HM_FB_Simone_light:?to] or [FS21_5b090:?toggle] or [Klingel1:?on])) (set CUL_HM_Gartenlicht on)
Beachte, dass das Licht IMMER eingeschalten ist/wird, wenn bei Dunkelheit dein Geafancy-Status "Garten" ist. Du musst also für "zu Hause" einen anderen Geofancy-Status haben. Und: Soll das Licht auch angehen, wenn du aus dem Haus raus in den Garten gehst? Das wäre aktuell der Fall. Wie geht das Licht dann aber aus?
Titel: Antw:neues Modul DOIF
Beitrag von: Mitch am 14 Januar 2015, 11:56:51
Zitat von: MaJu am 14 Januar 2015, 10:29:53
Dann kannst du es auch zusammenfassen und kürzer schreiben:
([dunkel] eq "on" and ([geofency:currLoc_Mitch] eq "Garten" or [CUL_HM_FB_Markus_light:?to] or [CUL_HM_FB_Simone_light:?to] or [FS21_5b090:?toggle] or [Klingel1:?on])) (set CUL_HM_Gartenlicht on)

mit nur OR hat es nicht funktioniert, deswegen die Verknüfungen in Klammern.

Zitat von: MaJu am 14 Januar 2015, 10:29:53
Beachte, dass das Licht IMMER eingeschalten ist/wird, wenn bei Dunkelheit dein Geafancy-Status "Garten" ist. Du musst also für "zu Hause" einen anderen Geofancy-Status haben. Und: Soll das Licht auch angehen, wenn du aus dem Haus raus in den Garten gehst? Das wäre aktuell der Fall. Wie geht das Licht dann aber aus?

Der Geofancy Status "Garten" ist auch wirklich nur, wenn ich mit Handy am gartentor stehe (dort ist ein iBeacon), das passt also so.

Das Licht geht automatisch aus. Der entsprechende HM Aktor ist so programmiert, dass er bei einem on immer einen on-for-timer schaltet.
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 14 Januar 2015, 12:58:15
Zitat von: Mitch am 14 Januar 2015, 11:56:51
mit nur OR hat es nicht funktioniert, deswegen die Verknüfungen in Klammern.
Hast du OR auch mit den kompletten Bedingungen getestet? Denn die auf der Vorseite genannte Version war ohne Bedingungen, du hattest dort einfach Devices aufgeführt ohne festzulegen, was geprüft werden soll.

Um die Definitionen übersichtlich zu halten, habe ich bei mir auch eine solche verschachtelte AND-und-OR-Verbindung bei einem DOIF im Einsatz und es funktioniert (nach Anlaufschwierigkeiten).

Das gute ist, dass man in einer DOIF-Definition mit Zeilenumbrüchen arbeiten kann, um es übersichtlich zu halten. Wenn man später nochmal ran muss, guckt es sich einfach leichter, wenn jedes DOELSEIF etc. einer Leerzeile folgt.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 14 Januar 2015, 19:19:14
ich habe mich jetzt auch mal an ein weiteres DOIF gemacht und habe schon ein paar Funktionen integriert, nur so ganz funktioniert es noch nicht und ich weiß nicht wie weiter.

Folgendes soll es können/machen:
Dummy welches mir sagt steuere das DOIF
1. FHEM - automatisch zu sunset/sunreise siehe Definition
2. Beschattung - habe ich in einem 2. DOIF gelöst nach dem Bsp. aus der commandref
3. Aus - Rollladen fährt nicht, bekomme ich irgendwie nicht hin

Code zu FHEM und Aus:
Ich meine es geht alles bis auf das ich die "Aus" Funktion nicht hinbekomme, immer wenn ich das Dummy umschalte, fährt der Rollladen hoch, oder versucht es..!
Was mache ich da falsch mit der Funktion "Aus" oder besser wie löse ich es anders..?

([RolloSZmodus] eq "FHEM" and ([{sunrise_abs(6000,"07:30","08:30")}|12345] or [{sunrise_abs(3600,"08:45","09:20")}|06]))
DOELSEIF ([{sunset("CIVIL",2200,"17:30","22:30")}]) (set RollladenSZ down 30)
DOELSE (set RollladenSZ on)
DOELSEIF([RolloSZmodus] eq "Aus")(set RollladenSZ off)


Code zu Beschattung:
funktioniert soweit, später kommt mein Aussensensor da rein, MeinWetter war nur zum testen
([RolloSZmodus] eq "Beschattung" and ([MeinWetter:temperature] > 24 and [07:00-{sunset_abs()}])) (set RollladenSZ down 80) DOELSE (set RollladenSZ up 40)


Nachtschicht - noch gar nicht integriert, dass möchte ich in ein eigenes DOIF schreiben, weil ich mehrere Fahrten zu verschiedenen Zeiten und verschiedene Prozente haben möchte (kommt danach ran)
Titel: Antw:neues Modul DOIF
Beitrag von: Otto123 am 14 Januar 2015, 19:39:51
kann sein ich durchblicke die Logik nicht auf die Schnelle, aber kommt er überhaupt in das letzte DOELSEIF wenn der Eintritt RolloSZmodus auf "FHEM" steht?
Entweder "FHEM" oder "Aus" -- oder???
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 15 Januar 2015, 07:19:30
@moonsorrox:
Ich glaube nicht das ein DOELSE vor dem letztem DOELSEIF stehen darf
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 10:21:12
Zitat von: der-Lolo am 15 Januar 2015, 07:19:30
@moonsorrox:
Ich glaube nicht das ein DOELSE vor dem letztem DOELSEIF stehen darf

Das glaube ich auch nicht. Zitat aus der Commandref:

+ Es können beliebig viele DOELSEIF-Angaben gemacht werden, sie sind, wie DOELSE am Ende der Kette, optional

Abgesehen davon vermisse ich den Ausführungsteil von der ersten Bedingung.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Otto123 am 15 Januar 2015, 10:36:38
Zitat von: Damian am 15 Januar 2015, 10:21:12
Das glaube ich auch nicht. Zitat aus der Commandref:

+ Es können beliebig viele DOELSEIF-Angaben gemacht werden, sie sind, wie DOELSE am Ende der Kette, optional

Abgesehen davon vermisse ich den Ausführungsteil von der ersten Bedingung.

Gruß

Damian
Das glaube ich auch, ich würde die Bedingung umstellen, so das erstmal was gemacht wird und nicht das nichts gemacht wird. Vielleicht kann man auch die erste Anweisung als leer Klammer setzen. Ich zitiere mal die Commandref:

define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

Die Angaben werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch das Device beinhalten.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 15 Januar 2015, 15:41:57
Zitat von: Damian am 15 Januar 2015, 10:21:12
Abgesehen davon vermisse ich den Ausführungsteil von der ersten Bedingung.

welche Bedingung meintest du..? die 1. ist doch FHEM oder habe ich das jetzt falsch verstanden

Ich war aber nicht untätig und habe nun umgebaut und denke jetzt habe ich es richtig:
Zwei Test mit jetziger Uhrzeit habe ich gemacht

([RolloSZmodus] eq "FHEM" and ([{sunrise_abs(0,"07:30","18:30")}|12345] or [{sunrise_abs(3600,"08:45","09:20")}|06]))
    (set RollladenSZ up 30)
DOELSEIF ( [RolloSZmodus] eq "FHEM" and ([{sunset("CIVIL",14000,"20:30","22:20")}|0123456]))
    (set RollladenSZ down 30)
DOELSEIF([RolloSZmodus] eq "Aus")()


hier könnte ich eigentlich als weiteres DOELSEIF auch die Beschattung dazu bauen, richtig..?
In dem ich einfach dieses drunter setze:
DOELSEIF([RolloSZmodus] eq "Beschattung" and ([MeinWetter:temperature] > 24 and [07:00-{sunset_abs()}])) (set RollladenSZ down 80) DOELSE (set RollladenSZ up 40)
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 15 Januar 2015, 15:46:23
Das DOELSEIF([RolloSZmodus] eq "Aus")() kannst du weglassen. Warum prüfst du, wenn du dann doch nichts ausführen lässt?

Bei deinem vorherigen Beispiel war am Anfang auch nur eine Prüfung, aber nichts was zu tun ist, sondern gleich danach ein DOELSEIF.

Mit dem letzten DOELSE wird IMMER auf 40% gesetzt, wenn keines der anderen Bedingungen wahr ist.

Im Prinzip ist DOIF wie if-then-else bei Excel. Nur dass man hier if-then;if-then;if-then;if-then setzen kann und auch else wegbleiben kann.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 15 Januar 2015, 17:30:17
Zitat von: MaJu am 15 Januar 2015, 15:46:23
Das DOELSEIF([RolloSZmodus] eq "Aus")() kannst du weglassen. Warum prüfst du, wenn du dann doch nichts ausführen lässt?
recht haste, klar wenn keiner der drei FHEM, Beschattung oder Nachtschicht wahr ist macht er auch nichts  ;) Danke
Titel: Antw:neues Modul DOIF
Beitrag von: Otto123 am 15 Januar 2015, 17:45:27
Ich meinte dies (siehe Zitat) da wird in der ersten Zeile viel getestet aber nichts gemacht.
Zitat von: moonsorrox am 14 Januar 2015, 19:19:14
([RolloSZmodus] eq "FHEM" and ([{sunrise_abs(6000,"07:30","08:30")}|12345] or [{sunrise_abs(3600,"08:45","09:20")}|06]))
DOELSEIF ([{sunset("CIVIL",2200,"17:30","22:30")}]) (set RollladenSZ down 30)
DOELSE (set RollladenSZ on)
DOELSEIF([RolloSZmodus] eq "Aus")(set RollladenSZ off)


Jetzt hast Du umgestellt und nach dem Test wird das Rollo auf 30 gesetzt.  :)
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 15 Januar 2015, 17:45:41

@moonsorrox
Bitte schau dir nochmal den Aufbau von DOIF an. So wie du schreibst, hast du das Prinzip noch nicht ganz erfasst.

In die erste Runde Klammer schreibst du eine Bedingung, in die zweite Runde Klammer schreibst du den Befehl der ausgeführt werden soll wenn diese Bedingung wahr ist.

(Nur) Wenn die erste Bedingung nicht wahr ist, kannst du mit DOELSEIF auf eine zweite Bedingung prüfen lassen und wieder einen Befehl geben was zu tun ist wenn die Bedingung erfüllt ist.

Wenn die erste und die zweite Bedingung nicht erfüllt sind, kannst du auf eine dritte prüfen lassen und so weiter.
Und ganz zum Schluss kannst du FHEM mit DOELSE sagen was es tun soll wenn keine der Bedingungen erfüllt ist. Das musst du aber nicht.

Es macht einfach absolut keinen Sinn zu prüfen ob RolloSZmodus auf AUS ist, wenn keine Aufgabe gestellt wird insofern die Bedingung erfüllt wurde.
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 15 Januar 2015, 18:46:44
Das mit den Fahrten in Prozent ist gewollt, der Rollladen soll früh morgens nicht ganz hoch fahren, weil die Sonne da so ungünstig steht...!  ;)

Zitat von: MaJu am 15 Januar 2015, 17:45:41
@moonsorrox
Bitte schau dir nochmal den Aufbau von DOIF an. So wie du schreibst, hast du das Prinzip noch nicht ganz erfasst.
ja das ist auch nicht so einfach, ein wenig habe ich mir aus schon vorhandene DOIF abgeschaut, aber begreifen ist die andere Sache ;)

Zitat von: MaJu am 15 Januar 2015, 17:45:41
(Nur) Wenn die erste Bedingung nicht wahr ist, kannst du mit DOELSEIF auf eine zweite Bedingung prüfen lassen und wieder einen Befehl geben was zu tun ist wenn die Bedingung erfüllt ist.
soweit ich das verstanden habe prüfe ich ja in der ersten Bedingung auf Wochentag und in der zweiten eben ob Wochenende ist, richtig..?
Das funktioniert, eigentlich habe das eben nochmal mit aktueller Zeit probiert

Zitat von: MaJu am 15 Januar 2015, 17:45:41
Wenn die erste und die zweite Bedingung nicht erfüllt sind, kannst du auf eine dritte prüfen lassen und so weiter.
Und ganz zum Schluss kannst du FHEM mit DOELSE sagen was es tun soll wenn keine der Bedingungen erfüllt ist. Das musst du aber nicht.
aber DOELSE wird nicht zwingend am Ende gebraucht, oder.? das habe ich ja bei dem neuen umgestellten Code nicht.
Habe noch mal in der commandref geschaut da ist das auch nicht immer der Fall und in meinen funktionierenden DOIF auch nicht.

Zitat von: MaJu am 15 Januar 2015, 17:45:41
Es macht einfach absolut keinen Sinn zu prüfen ob RolloSZmodus auf AUS ist, wenn keine Aufgabe gestellt wird insofern die Bedingung erfüllt wurde.
ja das ist mir klar, das kann ich  raus nehmen, weil ich erkläre es mal so wie ich es verstanden habe...

Wenn das Dummy auf "Aus" steht und das DOIF fragt ab und findet kein "FHEM" dann sind die Bedingungen nicht wahr und es passiert auch nichts, also wird nichts geschaltet, richtig..?
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 15 Januar 2015, 20:12:04
Hallo,
ich möchte hier erreichen, dass outdoorlight immer mindestens 30min eingeschaltet wird, bzw. nicht einschaltet, wenn zwischen Sonnenuntergang und fixer Abschaltzeit weniger als 30min liegen.

(
[{sunset_abs("HORIZON=-2",0,"16:30","21:30")}-22:30|56] or
[{sunset_abs("HORIZON=-2",0,"16:30","21:30")}-22:30] and [?hl.01.Feiertag:tomorrow] ne "none" or
[{sunset_abs("HORIZON=-2",0,"16:30","21:00")}-21:30|01234] and [?hl.01.Feiertag:tomorrow] eq "none" or
[{sunset_abs("HORIZON=-2",0,"16:30","21:30")}-02:00] and [?hl.01.Feiertag] eq "Silvester")
(set outdoorlight on)
DOELSE (set outdoorlight off)


Das funktioniert so halbwegs mit diesem Code, hat aber einen Haken. Im Sommer ist es um 21:30 teilweise noch zu hell für eine Gartenbeleuchtung und es macht eigentlich keinen Sinn das Licht einzuschalten; hier wird aber spätestens um 21:30 bzw. 21:00 eingeschaltet, egal wie dunkel es ist. Da die Abschaltzeit immer fix sein soll, kann ich nicht mit "wait" arbeiten; geht bei Zeiten m.E. sowieso nicht.

Wichtig ist, dass ich aber eine Mindestbrenndauer erreichen will, die von der Ausschaltzeit abzuziehen ist. Der Trigger zum Einschalten kommt dann, wenn "Ausschaltzeit"-"Mindestbrenndauer"<= "Sonnenuntergang(dunkel)" ist.

Hat jemand eine Idee, wie man das am Besten umsetzt?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Zephyr am 15 Januar 2015, 20:18:18
75 Seiten? Na wenn sich hier jemals wieder eine Lösung anfindet... :-/

Hallo,

ich habe mit einem EnOcean Schalter (PTM 210) in Verbindung mit DOIF ein Problem. Es scheint so auszusehen als würde jedes Mal wenn der Schalter insgesamt irgendeinen Event generiert das DOIF komplett ausgeführt inklusive dem kompletten Neulesen aller Zustände. Das Funktionsprinzip beim EnOcean Schalter ist, dass beim Drücken des Schalters in FHEM ein Event erzeugt wird und beim Loslassen des Schalters. Das Einzige Reading, das sich ändert ist das Reading "buttons:pressed|released". Meine DOIF Konstruktion prüft nun schon ob die Schalter auch wirklich gedrückt wurden. Trotzdem werden zwei Befehle direkt nacheinander ausgeführt.
Mein DOIF sieht so aus:
([wz_licht_stehlampe_schreibtischlampe_sw_01:channelB] eq "BI" and [wz_licht_schreibtisch_ac_01:pct] eq 0 and [wz_licht_stehlampe_schreibtischlampe_sw_01:buttons] eq "pressed") (set wz_licht_schreibtisch_ac_01 pct 50)
        DOELSEIF ([wz_licht_stehlampe_schreibtischlampe_sw_01:channelB] eq "BI" and [wz_licht_schreibtisch_ac_01:pct] ne 0 and [wz_licht_stehlampe_schreibtischlampe_sw_01:buttons] eq "pressed") (set wz_licht_schreibtisch_ac_01 pct 100)
        DOELSEIF ([wz_licht_stehlampe_schreibtischlampe_sw_01:channelB] eq "B0" and [wz_licht_schreibtisch_ac_01:pct] ne 0 and [wz_licht_stehlampe_schreibtischlampe_sw_01:buttons] eq "pressed") (set wz_licht_schreibtisch_ac_01 pct 0)


Und im Eventmonitor passiert folgendes, wenn ich die Taste "BI" drücke und die Lampe vorher ausgeschalten war:
2015-01-15 20:13:43 DOIF di_wz_licht_stehlampe_schreibtischlampe_sw_01 cmd_nr: 2
2015-01-15 20:13:43 DOIF di_wz_licht_stehlampe_schreibtischlampe_sw_01 cmd_event: wz_licht_schreibtisch_ac_01
2015-01-15 20:13:43 DOIF di_wz_licht_stehlampe_schreibtischlampe_sw_01 cmd_2
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 bri: 128
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 onoff: 1
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 pct: 50
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 dim50%
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 bri: 254
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 pct: 100
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 on
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 rgb: 000000
2015-01-15 20:13:43 HUEDevice wz_licht_schreibtisch_ac_01 rgb: 000000
2015-01-15 20:13:43 DOIF di_wz_licht_stehlampe_schreibtischlampe_sw_01 cmd_nr: 1
2015-01-15 20:13:43 DOIF di_wz_licht_stehlampe_schreibtischlampe_sw_01 cmd_event: wz_licht_stehlampe_schreibtischlampe_sw_01
2015-01-15 20:13:43 DOIF di_wz_licht_stehlampe_schreibtischlampe_sw_01 cmd_1
2015-01-15 20:13:43 EnOcean wz_licht_stehlampe_schreibtischlampe_sw_01 buttons: pressed
2015-01-15 20:13:43 EnOcean wz_licht_stehlampe_schreibtischlampe_sw_01 channelB: BI
2015-01-15 20:13:43 EnOcean wz_licht_stehlampe_schreibtischlampe_sw_01 BI
2015-01-15 20:13:43 EnOcean wz_licht_stehlampe_schreibtischlampe_sw_01 buttons: released
2015-01-15 20:13:43 EnOcean wz_licht_stehlampe_schreibtischlampe_sw_01 buttons: released


Wie man sehen kann wird kurz hintereinander Command 1 und dann 2 ausgeführt. Das Resultat ist, dass zuerst die Lampe auf 50% und dann auch 100% gedimmt wird. Das wollte ich nun eigentlich nicht. :-/

Meine defines für die Geräte sehen so aus:

define wz_licht_stehlampe_schreibtischlampe_sw_01 EnOcean 002A7176
attr wz_licht_stehlampe_schreibtischlampe_sw_01 IODev TCM310
attr wz_licht_stehlampe_schreibtischlampe_sw_01 room EnOcean,Wohnzimmer
attr wz_licht_stehlampe_schreibtischlampe_sw_01 subType switch

define wz_licht_schreibtisch_ac_01 HUEDevice 1
attr wz_licht_schreibtisch_ac_01 userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
attr wz_licht_schreibtisch_ac_01 IODev huebridge_orpheus
attr wz_licht_schreibtisch_ac_01 alias Schreibtisch

define di_wz_licht_stehlampe_schreibtischlampe_sw_01 DOIF ([wz_licht_stehlampe_schreibtischlampe_sw_01:state] eq "BI" and [wz_licht_schreibtisch_ac_01:pct] eq 0) (set wz_licht_schreibtisch_ac_01 pct 50)\
        DOELSEIF ([wz_licht_stehlampe_schreibtischlampe_sw_01:state] eq "BI" and [wz_licht_schreibtisch_ac_01:pct] ne 0) (set wz_licht_schreibtisch_ac_01 pct 100)\
        DOELSEIF ([wz_licht_stehlampe_schreibtischlampe_sw_01:state] eq "B0" and [wz_licht_schreibtisch_ac_01:pct] ne 0) (set wz_licht_schreibtisch_ac_01 pct 0)
attr di_wz_licht_stehlampe_schreibtischlampe_sw_01 room EnOcean,Wohnzimmer


Hat von euch einer eine Lösung dafür parat?

Viele Grüße
Zephyr
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 20:51:06
Zitat von: Zephyr am 15 Januar 2015, 20:18:18
75 Seiten? Na wenn sich hier jemals wieder eine Lösung anfindet... :-/

Na ja, ob du in einem Thread mit Tausend Antworten suchst oder in zweihundert mit fünf Antworten macht für die Suchfunktion keinen Unterschied. Bei diesem Thread hier werde ich allerdings angetriggert, bei zweihundert anderen aber nicht. Daher kann ich dir nun recht schnell helfen.

Lösung deines Problems sollte recht einfach sein. Durch das Schalten des Lichtest triggerst du dein Modul selbst. Daher solltest du deine Abfrage für den Lichtstatus mit Fragezeichen beginnen, damit dein Modul nicht erneut getriggert wird (das ist in der commandref des Moduls auch erklärt). Eigentlich reicht der trigger für "buttons", alles andere sind reine Abfragen. Also:

([?wz_licht_stehlampe_schreibtischlampe_sw_01:channelB] eq "BI" and [?wz_licht_schreibtisch_ac_01:pct] eq 0 and [wz_licht_stehlampe_schreibtischlampe_sw_01:buttons] eq "pressed") (set wz_licht_schreibtisch_ac_01 pct 50)
        DOELSEIF ([?wz_licht_stehlampe_schreibtischlampe_sw_01:channelB] eq "BI" and [?wz_licht_schreibtisch_ac_01:pct] ne 0 and [wz_licht_stehlampe_schreibtischlampe_sw_01:buttons] eq "pressed") (set wz_licht_schreibtisch_ac_01 pct 100)
        DOELSEIF ([?wz_licht_stehlampe_schreibtischlampe_sw_01:channelB] eq "B0" and [?wz_licht_schreibtisch_ac_01:pct] ne 0 and [wz_licht_stehlampe_schreibtischlampe_sw_01:buttons] eq "pressed") (set wz_licht_schreibtisch_ac_01 pct 0)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 21:50:17
Zitat von: Spartacus am 15 Januar 2015, 20:12:04
Hallo,
ich möchte hier erreichen, dass outdoorlight immer mindestens 30min eingeschaltet wird, bzw. nicht einschaltet, wenn zwischen Sonnenuntergang und fixer Abschaltzeit weniger als 30min liegen.

(
[{sunset_abs("HORIZON=-2",0,"16:30","21:30")}-22:30|56] or
[{sunset_abs("HORIZON=-2",0,"16:30","21:30")}-22:30] and [?hl.01.Feiertag:tomorrow] ne "none" or
[{sunset_abs("HORIZON=-2",0,"16:30","21:00")}-21:30|01234] and [?hl.01.Feiertag:tomorrow] eq "none" or
[{sunset_abs("HORIZON=-2",0,"16:30","21:30")}-02:00] and [?hl.01.Feiertag] eq "Silvester")
(set outdoorlight on)
DOELSE (set outdoorlight off)


Das funktioniert so halbwegs mit diesem Code, hat aber einen Haken. Im Sommer ist es um 21:30 teilweise noch zu hell für eine Gartenbeleuchtung und es macht eigentlich keinen Sinn das Licht einzuschalten; hier wird aber spätestens um 21:30 bzw. 21:00 eingeschaltet, egal wie dunkel es ist. Da die Abschaltzeit immer fix sein soll, kann ich nicht mit "wait" arbeiten; geht bei Zeiten m.E. sowieso nicht.

Wichtig ist, dass ich aber eine Mindestbrenndauer erreichen will, die von der Ausschaltzeit abzuziehen ist. Der Trigger zum Einschalten kommt dann, wenn "Ausschaltzeit"-"Mindestbrenndauer"<= "Sonnenuntergang(dunkel)" ist.

Hat jemand eine Idee, wie man das am Besten umsetzt?
Christian
Da man mit Zeitangaben der Form HH:MM schlecht rechnen kann, muss man es immer wieder umrechnen, um eine Minutendifferenz zu bilden, um damit schlussendlich den tatsächlichen Einschalt und Ausschaltzeitpunkt zu definieren. Das würde ich in Perl-Routinen auslagern, die man dann mit [{begin}-{end}] in der Bedingung angeben kann. Alles andere dürfte in der Bedingung von DOIF recht unübersichtlich werden.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 15 Januar 2015, 22:15:09
Hallo Damian,

ich habe auch ein Problem mit DOIF. Ist wahrscheinlich ein Anfängerproblem und deshalb war ich auch im Anfängerforum aber da schreibe ich nur mit mir selbst. Ich möchte mein Problem gerne hier schildern.

Ich habe meinen Netatmo im FHEM integriert. Jetzt möchte ich, dass bei überschreiten des Co2 Wertes von 1300 eine Lampe anggeht (WifiLight). und diese erst wieder ausgeht, wenn der Wert 800 erreicht hat. Ich komme aber nicht klar. Mein Code funktioniert nicht und ich komme als Anfänger trotz Lesen der Referenz nicht dahinter. Kannst Du mir auf die Sprünge helfen? Anbei mein Code:


([netatmo_indoor:co2]>"1300") (set LED_CO_Warnung on) DOELSEIF ([netatmo_indoor:co2]<"800") (set LED_CO_Warnung off) DOELSE (set LED_Mediteran on)


VG,
Jörg
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 22:21:28
Zitat von: Ironangel am 15 Januar 2015, 22:15:09
Hallo Damian,

ich habe auch ein Problem mit DOIF. Ist wahrscheinlich ein Anfängerproblem und deshalb war ich auch im Anfängerforum aber da schreibe ich nur mit mir selbst. Ich möchte mein Problem gerne hier schildern.

Ich habe meinen Netatmo im FHEM integriert. Jetzt möchte ich, dass bei überschreiten des Co2 Wertes von 1300 eine Lampe anggeht (WifiLight). und diese erst wieder ausgeht, wenn der Wert 800 erreicht hat. Ich komme aber nicht klar. Mein Code funktioniert nicht und ich komme als Anfänger trotz Lesen der Referenz nicht dahinter. Kannst Du mir auf die Sprünge helfen? Anbei mein Code:


([netatmo_indoor:co2]>"1300") (set LED_CO_Warnung on) DOELSEIF ([netatmo_indoor:co2]<"800") (set LED_CO_Warnung off) DOELSE (set LED_Mediteran on)


VG,
Jörg

Dann poste hier das Ergebnis von: list dein_doif_modul.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 15 Januar 2015, 22:30:41
Das?


Internals:
   DEF        ([netatmo_cojones_indoor:co2] > "1300") (set LED_CO_Warnung on) DOELSE (set LED_Mediteran on)
   NAME       netatmo
   NR         35
   NTFY_ORDER 50-netatmo
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-15 22:07:55   cmd_event       netatmo_cojones_indoor
     2015-01-15 22:07:55   cmd_nr          2
     2015-01-15 22:27:56   e_netatmo_cojones_indoor_co2 837
     2015-01-15 22:07:55   state           cmd_2
   Condition:
     0          ReadingValDoIf('netatmo_cojones_indoor','co2','') > "1300"
   Devices:
     0           netatmo_cojones_indoor
     all         netatmo_cojones_indoor
   Do:
     0          set LED_CO_Warnung on
     1          set LED_Mediteran on
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
   Readings:
     0           netatmo_cojones_indoor:co2
     all         netatmo_cojones_indoor:co2
   State:
   Timerfunc:
Attributes:
   room       Home
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 22:33:57
Zitat von: Ironangel am 15 Januar 2015, 22:30:41
Das?


Internals:
   DEF        ([netatmo_cojones_indoor:co2] > "1300") (set LED_CO_Warnung on) DOELSE (set LED_Mediteran on)
   NAME       netatmo
   NR         35
   NTFY_ORDER 50-netatmo
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-15 22:07:55   cmd_event       netatmo_cojones_indoor
     2015-01-15 22:07:55   cmd_nr          2
     2015-01-15 22:27:56   e_netatmo_cojones_indoor_co2 837
     2015-01-15 22:07:55   state           cmd_2
   Condition:
     0          ReadingValDoIf('netatmo_cojones_indoor','co2','') > "1300"
   Devices:
     0           netatmo_cojones_indoor
     all         netatmo_cojones_indoor
   Do:
     0          set LED_CO_Warnung on
     1          set LED_Mediteran on
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
   Readings:
     0           netatmo_cojones_indoor:co2
     all         netatmo_cojones_indoor:co2
   State:
   Timerfunc:
Attributes:
   room       Home


Bei:

([netatmo_cojones_indoor:co2] > "1300") (set LED_CO_Warnung on) DOELSE (set LED_Mediteran on)

und

e_netatmo_cojones_indoor_co2 837

ist der Zustand

state           cmd_2


funktioniert also, wie programmiert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 15 Januar 2015, 22:36:22
Ja, aber nicht wie gewollt.

Ich möchte das die Lampe bei >1300 angeht und erst wieder ausgeht wenn der Wert <800 erreicht und dann erst wieder bei >1300 usw.... Also die Lampe soll anbleiben bei 1300 - 800 aber nicht schon bei 800 wieder angehen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 22:41:53
Zitat von: Ironangel am 15 Januar 2015, 22:36:22
Ja, aber nicht wie gewollt.

Ich möchte das die Lampe bei >1300 angeht und erst wieder ausgeht wenn der Wert <800 erreicht und dann erst wieder bei >1300 usw....

Das hast du aber, wie du sieht, nicht definiert. Wo soll die 800 sein? Wo soll der Ausschaltbefehl sein?

Du hast doch nur:

([netatmo_cojones_indoor:co2] > "1300") (set LED_CO_Warnung on) DOELSE (set LED_Mediteran on)

definiert. Und nicht das, was du am Anfang gepostet hast.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 15 Januar 2015, 22:45:24
Jo, ich weiss halt nicht wie ich den Bereich von 1300 - 800 definieren soll. Wenn ich


([netatmo_indoor:co2]>"1300") (set LED_CO_Warnung on) DOELSEIF ([netatmo_indoor:co2]<"800") (set LED_CO_Warnung off) DOELSE (set LED_Mediteran on)


schreibe, klappt es nicht.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Januar 2015, 22:51:42
Zitat von: Ironangel am 15 Januar 2015, 22:45:24
Jo, ich weiss halt nicht wie ich den Bereich von 1300 - 800 definieren soll. Wenn ich


([netatmo_indoor:co2]>"1300") (set LED_CO_Warnung on) DOELSEIF ([netatmo_indoor:co2]<"800") (set LED_CO_Warnung off) DOELSE (set LED_Mediteran on)


schreibe, klappt es nicht.

Das kannst du so machen.

Und wenn es nicht so funktionieren sollte, wie du denkst, dann musst du mir genau diesen Fall präsentieren und nicht irgendeinen anderen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 15 Januar 2015, 22:59:22
Hatte vorhin den falschen Code im Zwischenspeicher. Dieser Code definiert mir den Bereich von 1300 - 800?
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 16 Januar 2015, 00:31:31
Ich habe nochmal eine Frage. Wie bekomme ich hier (Stelle im Code mit Sternchen gekennzeichnet):

([netatmo_cojones_indoor:co2]>"1250") (set LED_Mediteran off,set LED_CO_Warnung on) DOELSEIF ([netatmo_cojones_indoor:co2]<"800") (set LED_CO_Warnung off,******set LED_Mediteran on) DOELSEIF ([16:00-23:59]) (set LED_Mediteran on) DOELSE (set LED_Mediteran off)

eine Zeitsteuerung (16:00 - 23:59) rein die nur für

set LED_Mediteran on)

gelten soll und nicht für den Befehl davor

(set LED_CO_Warnung off,
Titel: Antw:neues Modul DOIF
Beitrag von: Bennemannc am 16 Januar 2015, 06:57:16
Hallo,

ich würde das da raus nehmen und in dem DOELSEIF dahinter die erste Bedingung mit "und" dazu fügen.
Deine Abfrage macht so keinen Sinn, das das Licht ohnehin immer zwischen den angegebenen Zeiten an ein würde - egal ob CO2 ok oder nicht.

Gruß Christoph
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 16 Januar 2015, 07:37:32
Hallo Christoph,

danke für Deine Antwort. Das verstehe ich nicht. Ich möchte ja erreichen, wenn der Wert unter 800 fällt, die Warnung ausgeschaltet wird und die mediterane Beleuchtung ein aber nur, wenn die Zeit passt. Wenn ich Deinen Vorschlag umsetze, macht fhem dann nicht bei erreichen der ersten wahren Bedingung schluss?
Titel: Antw:neues Modul DOIF
Beitrag von: MartinMuc am 16 Januar 2015, 08:48:13
Hallo an die Profis des DOIFs,

ich hab ein kleines Problemchen das ich gerade nicht greifen kann.

Das ganze soll meine Presence stabiler steuern, ich will also eine halbe Stunde nachdem ich die Wohnung verlassen habe (iphone weg und türe innerhalb der Zeit geöffnet) mich abwesend setzen.

Den status Türe geöffnet und iphone weg erkennt er er geht in den cmd 2 wait Timer aber es wird dann nach 30 Minuten nicht geschaltet.

folgedes verwende ich :

define hs doif (([sec_eingang:state] eq "open" or [iPhoneWlan:state] eq "present" or [iPhone:state] eq "present") and ([?rr_Martin:state] ne "home")) (set rr_Martin home)
DOELSEIF ([iPhoneWlan:state] eq "absent" and [iPhone:state] eq "absent" and [?rr_Martin:state] eq "home" and [sec_eingang:state:sec]<1900) (set rr_Martin absent)
attr hs wait  0:1800



cmd_event  sec_eingang 2015-01-15 16:56:31
cmd_nr 1  2015-01-15 16:56:31
e_iPhoneWlan_state   absent   2015-01-16 08:10:12
e_iPhone_state  absent  2015-01-16 08:09:27
e_sec_eingang_state  closed  2015-01-16 08:08:21
state  cmd_1  2015-01-15 16:56:31
wait_timer  no timer  2015-01-16 08:40:12


Gruß
Martin
Titel: Antw:neues Modul DOIF
Beitrag von: Zephyr am 16 Januar 2015, 08:56:50
Zitat von: Damian am 15 Januar 2015, 20:51:06
Lösung deines Problems sollte recht einfach sein. Durch das Schalten des Lichtest triggerst du dein Modul selbst. Daher solltest du deine Abfrage für den Lichtstatus mit Fragezeichen beginnen, damit dein Modul nicht erneut getriggert wird (das ist in der commandref des Moduls auch erklärt). Eigentlich reicht der trigger für "buttons", alles andere sind reine Abfragen. Also:

Ich gebe zu: Weil ich nicht verstanden habe, was das mit den Loops / Rekursionen zu bedeuten hat habe ich darüber in der Dokumentation hinweg gelesen. Aber herzlichen Dank für den Hinweis.

Viele Grüße
Zephyr
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 16 Januar 2015, 11:08:22
Zitat von: MartinMuc am 16 Januar 2015, 08:48:13
cmd_event  sec_eingang 2015-01-15 16:56:31
cmd_nr 1  2015-01-15 16:56:31
e_iPhoneWlan_state   absent   2015-01-16 08:10:12
e_iPhone_state  absent  2015-01-16 08:09:27
e_sec_eingang_state  closed  2015-01-16 08:08:21
state  cmd_1  2015-01-15 16:56:31
wait_timer  no timer  2015-01-16 08:40:12

Das Problem dürfte hier liegen:
e_sec_eingang_state  closed  2015-01-16 08:08:21
Die wait-Periode startet um 08:10:12, dieses Reading wurde aber schon um 08:08:21 geschrieben.
Da kommt die Bedingung
[sec_eingang:state:sec]<1900
nicht mehr hin, weil der Wert um 08:40:12 schon >1900 ist.
Titel: Antw:neues Modul DOIF
Beitrag von: MartinMuc am 16 Januar 2015, 11:51:39
Ha ich blinder ;)

das ist es wohl da war mein Puffer zu klein.

Danke Brockmann probier ich aus.

viele Grüße
Martin
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 16 Januar 2015, 17:45:28
Ich nochmal,

ich habe jetzt meinen DOIF-Befehl ein wenig umgestellt. Klappt aber irgendwie nicht. Ich erwarte jetzt die zweite Bedingung. Es kommt aber die dritte. Kann jemand einen Fehler sehen?


Internals:
   DEF        ([netatmo_cojones_indoor:co2]>"1200") (set LED_Mediteran off,set LED_CO_Warnung on) DOELSEIF ([16:00-23:59]) (set LED_Mediteran on) DOELSE (set LED_Mediteran off, set LED_CO_Warnung off)
   NAME       netatmo
   NR         35
   NTFY_ORDER 50-netatmo
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-01-16 16:10:29   cmd_event       netatmo_cojones_indoor
     2015-01-16 16:10:29   cmd_nr          3
     2015-01-16 17:40:29   e_netatmo_cojones_indoor_co2 653
     2015-01-16 16:10:29   state           cmd_3
     2015-01-16 16:00:00   timer_1_c2      17.01.2015 16:00:00
     2015-01-16 12:11:32   timer_2_c2      16.01.2015 23:59:00
   Condition:
     0          ReadingValDoIf('netatmo_cojones_indoor','co2','')>"1200"
     1          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           netatmo_cojones_indoor
     all         netatmo_cojones_indoor
   Do:
     0          set LED_Mediteran off,set LED_CO_Warnung on
     1          set LED_Mediteran on
     2          set LED_Mediteran off, set LED_CO_Warnung off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Readings:
     0           netatmo_cojones_indoor:co2
     all         netatmo_cojones_indoor:co2
   Realtime:
     0          16:00:00
     1          23:59:00
   State:
   Time:
     0          16:00:00
     1          23:59:00
   Timecond:
     0          1
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     1           0  1
Attributes:
   room       Home
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 16 Januar 2015, 19:04:47
Hallo zusammen,


irgendwie stehe ich nach wie vor mit meinen Rollos auf dem Kriegsfuss.
Gerade eben, als mein Helligkeitssensor die definierte Helligkeit unterschritten hat, sind die Rollos im EG alle runter gegangen.
Im OG dagegen sind alle oben geblieben. Und ich weiß nicht wirklich warum.

Hier mal die Definition eines DOIFs von einem im OG befindlichen Rollo:


([du_Rollo_Master] eq "an" and [?OG_elt_RO_Strasse:state] ne "off" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([du_Rollo_Master] eq "an" and [?OG_elt_RO_Strasse:state] ne "on" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}|7]))
  (set OG_elt_RO_Strasse on)

 
Und der Vollständigkeit halber auch mal ein list davon:

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and [?OG_elt_RO_Strasse:state] ne "off" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([du_Rollo_Master] eq "an" and [?OG_elt_RO_Strasse:state] ne "on" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}|7]))
  (set OG_elt_RO_Strasse on)
   NAME       di_OG_elt_RO_Strasse
   NR         176
   NTFY_ORDER 50-di_OG_elt_RO_Strasse
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-15 17:09:42   cmd_event       EG_dr_TS_Terrasse
     2015-01-15 17:09:42   cmd_nr          1
     2015-01-16 18:58:49   e_EG_dr_TS_Terrasse_luminosity 0.14
     2015-01-15 17:09:42   state           cmd_1
     2015-01-16 16:10:00   timer_1_c1      17.01.2015 16:10:00
     2015-01-15 21:30:00   timer_2_c1      16.01.2015 21:30:00
     2015-01-15 21:30:00   timer_3_c1      16.01.2015 21:30:00
     2015-01-16 06:40:00   timer_4_c2      17.01.2015 06:40:00|8
     2015-01-16 09:30:00   timer_5_c2      17.01.2015 09:30:00|7
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ReadingValDoIf('OG_elt_RO_Strasse','state','') ne "off" and ((ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and (DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))) or DOIF_time_once($hash->{timer}{2},$wday,""))
     1          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and ReadingValDoIf('OG_elt_RO_Strasse','state','') ne "on" and (DOIF_time_once($hash->{timer}{3},$wday,"8") or DOIF_time_once($hash->{timer}{4},$wday,"7"))
   Days:
     3          8
     4          7
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
     1           du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru
   Do:
     0          set OG_elt_RO_Strasse off
     1          set OG_elt_RO_Strasse on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
     1           du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo


Meiner Meinung nach hätte der off Befehl doch gesendet werden sollen, als EG_dr_TS_Terrasse:luminosity  kleiner als der Wert im Dummy du_Rollo_Luminosity_ru (ist eingestellt auf 0,7) geworden ist.
Irgendwie habe ich den Eindruck, dass dies an der Teilbedingung [?OG_elt_RO_Strasse:state] ne "off" liegt.
Denn wenn ich diese aus dem DOIF entferne, gehen die Rollos mMn verlässlich hoch und runter.
Sobald dies drin steht, gehts manchmal und manchmal wie vorhin eben nicht.

Nur ich bekomme noch nicht wirklich einen Idee warum es mal und mal nicht geht.
Ist diese [?OG_elt_RO_Strasse:state] nicht so, dass state von OG_elt_RO_Strasse abgefragt wird, sobald das DOIF durch ein anderes im DEF befindliches Event getriggert wird?
Titel: Antw:neues Modul DOIF
Beitrag von: MartinMuc am 16 Januar 2015, 19:42:09
Zitat von: Ironangel am 16 Januar 2015, 17:45:28
Ich nochmal,

ich habe jetzt meinen DOIF-Befehl ein wenig umgestellt. Klappt aber irgendwie nicht. Ich erwarte jetzt die zweite Bedingung. Es kommt aber die dritte. Kann jemand einen Fehler sehen?


Internals:
   DEF        ([netatmo_cojones_indoor:co2]>"1200") (set LED_Mediteran off,set LED_CO_Warnung on) DOELSEIF ([16:00-23:59]) (set LED_Mediteran on) DOELSE (set LED_Mediteran off, set LED_CO_Warnung off)
   NAME       netatmo
   NR         35
   NTFY_ORDER 50-netatmo
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2015-01-16 16:10:29   cmd_event       netatmo_cojones_indoor
     2015-01-16 16:10:29   cmd_nr          3
     2015-01-16 17:40:29   e_netatmo_cojones_indoor_co2 653
     2015-01-16 16:10:29   state           cmd_3
     2015-01-16 16:00:00   timer_1_c2      17.01.2015 16:00:00
     2015-01-16 12:11:32   timer_2_c2      16.01.2015 23:59:00
   Condition:
     0          ReadingValDoIf('netatmo_cojones_indoor','co2','')>"1200"
     1          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           netatmo_cojones_indoor
     all         netatmo_cojones_indoor
   Do:
     0          set LED_Mediteran off,set LED_CO_Warnung on
     1          set LED_Mediteran on
     2          set LED_Mediteran off, set LED_CO_Warnung off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Readings:
     0           netatmo_cojones_indoor:co2
     all         netatmo_cojones_indoor:co2
   Realtime:
     0          16:00:00
     1          23:59:00
   State:
   Time:
     0          16:00:00
     1          23:59:00
   Timecond:
     0          1
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     1           0  1
Attributes:
   room       Home


Bei dir haben die Cojones getriggert, da Bedingung 1 nicht zutrifft und Bedingung 2 keine Cojones hat bleibt nur der Else Fall übrig
Titel: Antw:neues Modul DOIF
Beitrag von: harry66 am 16 Januar 2015, 22:42:10
hallo,

hat jemand eine idee wie ich folgende DOIF ([GDS:a_valid] eq 1 and [GDS:a_count] eq 1 ) (set gds_Warnung [GDS:a_0_event], attr gds_Warnung fp_HOME 430,530,0) DOELSEIF ([GDS:a_valid] eq 1  and [GDS:a_count] eq 2 ) (set gds_Warnung [GDS:a_0_event]+[GDS:a_1_event], attr gds_Warnung fp_HOME 430,530,0) DOELSEIF ([GDS:a_valid] eq 0 ) (deleteattr gds_Warnung fp_HOME)

richtig schreiben muss damit "attr gds_Warnung fp_HOME 430,530,0" funktioniert.
Oder hat jemand eine andere Idee/Lösung um eine Wetterwarnung im Floorplan bei bedarf einzublenden/auszublenden.

Gruß Rolf
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 16 Januar 2015, 23:57:08
@harry:
Was ist denn wenn keine Warnung vorliegt?

Aus einem anderem Thema, das du hier nutzen kannst, so als Denkanstoß:
Ich habe im Floorplan eine Anzeige, wer anruft. Wenn kein Gespräch geführt wird, lasse ich den dummy dafür auf den Status "aufgelegt" setzen.
Dann habe ich widerum ein Bild das "Anrufanzeige.aufgelegt.png" heißt und 1x1 pixel transparent ist. Es wird also ein komplett durchsichtiges 1-Pixel-Bild angezeigt, damit verschwindet es auch vom Floorplan, ohne mit den Attributen zu spielen.

Also lass den dummy gds_Warnung auf "nichts" setzen wenn nix da ist und erstelle dir ein durchsichtiges 1-Pixel-Bild "gds_Warnung.nichts.png"
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 17 Januar 2015, 04:18:12
Zitat von: MartinMuc am 16 Januar 2015, 19:42:09
Bei dir haben die Cojones getriggert, da Bedingung 1 nicht zutrifft und Bedingung 2 keine Cojones hat bleibt nur der Else Fall übrig

Haha, auf dem Arm nehmen kann ich mich selbst. Ich frage hier, da ich eine vernünftige Antwort erwarte und nicht um mich verarschen zu lassen.
Titel: Antw:neues Modul DOIF
Beitrag von: MartinMuc am 17 Januar 2015, 07:50:50
Das war eine vernünftige Antwort Ironangel, netatmo hat mit 653 getriggert das ist nicht größer als 1200 darum ist fall 1 nicht gültig

In Zweig 2 steht keine Bedingung für Netatmo daher ist dieser Fall auch nicht gültig also bleibt dir nur der Else Fall, aber das hab ich ja schon geschrieben
Titel: Antw:neues Modul DOIF
Beitrag von: harry66 am 17 Januar 2015, 11:58:04
@MaJu gute Idee werde ich mal testen

Gruß Rolf
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 17 Januar 2015, 16:21:58
Zitat von: MartinMuc am 17 Januar 2015, 07:50:50
Das war eine vernünftige Antwort Ironangel, netatmo hat mit 653 getriggert das ist nicht größer als 1200 darum ist fall 1 nicht gültig

In Zweig 2 steht keine Bedingung für Netatmo daher ist dieser Fall auch nicht gültig also bleibt dir nur der Else Fall, aber das hab ich ja schon geschrieben

Ups, sorry. Habe ich in den falschen Hals bekommen.

Soll ja auch so sein. Aber ich hatte den zweiten Teil erwartet. Wenn der Co2 nicht höher ist wie 1200 dann soll in der Zeit von 16:00 - 23:59 Uhr die LED_Mediteran angehen. Wenn wir nach 16:00 Uhr haben, trifft dieser Fall doch zu. Gerade traff der zweite Teil zu. Aber um 16:10 hat fhem wieder den dritten Teil aktiviert. Wieso? Wo ist den mein Denkfehler?

VG,
Jörg
Titel: Antw:neues Modul DOIF
Beitrag von: MartinMuc am 17 Januar 2015, 17:01:15
Jedesmal wenn sich der netatmo wert verändert passiert entweder Bedingung 1 oder der elsefall. Packe in das doelse noch einen netatmo <=1200 dann zieht der in der Zeit und nicht der elsefall
Titel: Antw:neues Modul DOIF
Beitrag von: Ironangel am 17 Januar 2015, 17:22:05
Danke, probiere ich.
Titel: Antw:neues Modul DOIF
Beitrag von: HoTi am 19 Januar 2015, 08:31:15
Hallo zusammen,

ich habe mich mal an dem DOIF mit mehreren Kommandos Probiert.

define Rollos_runter DOIF ([BM_Garage:brightness] < 110 ) ((set WZT_dummy zu) wait 2 (set WZFL_dummy zu) wait 2 (set WZFR_dummy zu) wait 2 (set WCF_dummy zu) wait 2 (set KUF_dummy zu) wait 2 (set SZT_dummy zu) wait 2 (set KZT_dummy zu))


Leider wird nur das erste Kommando ausgeführt. Wo habe ich den den Fehler?!
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 19 Januar 2015, 08:37:44
Zitat von: RettungsTim am 19 Januar 2015, 08:31:15
Leider wird nur das erste Kommando ausgeführt. Wo habe ich den den Fehler?!
Klassisches Lesen-und-Verstehen-Problem: "wait" zwischen Befehlen steht auf der ToDo-Liste, soll also in der nächsten DOIF-Version implementiert werden. Zur Zeit kann man es aber noch nicht nutzen.
Wenn Du die Befehle ohne Wartepause ausführen willst, einfach ein Komma dazwischen setzen, also
Befehl 1,Befehl 2,Befehl 3 usw.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Januar 2015, 08:47:35
Du kannst aber auch sleep benutzen, wenn man es "richtig" angibt.

define Rollos_runter DOIF ([BM_Garage:brightness] < 110 ) ((set WZT_dummy zu, sleep;set WZFL_dummy zu; sleep 2;set WZFR_dummy zu; sleep;set WCF_dummy zu;sleep 2;set KUF_dummy zu;sleep 2;set SZT_dummy zu;sleep 2;set KZT_dummy zu)


Hinter sleep muss ein Semikolon (kein Komma stehen), damit wird die Kontrolle der folgenden Befehle von DOIF an sleep übergeben. So wird das System nicht blockiert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: HoTi am 19 Januar 2015, 08:53:48
oh verdammt....

Guter hinweiß mit dem Komma, da war mein zweites Probem ohne "wait".

Dann mach ich auch mal ein "wait" auf "wait"  ;D

Danke euch und sorry für die blöde Frage.-.-. Das habe ich echt nicht gelesen da ich in den 73 Seiten nach einer Lösung für mein Probelem gesucht habe und nicht alle Seiten gelesen habe :-(
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Januar 2015, 08:57:16
Zitat von: RettungsTim am 19 Januar 2015, 08:53:48
oh verdammt....

Guter hinweiß mit dem Komma, da war mein zweites Probem ohne "wait".

Dann mach ich auch mal ein "wait" auf "wait"  ;D

Danke euch und sorry für die blöde Frage.-.-. Das habe ich echt nicht gelesen da ich in den 73 Seiten nach einer Lösung für mein Probelem gesucht habe und nicht alle Seiten gelesen habe :-(

Bei über Tausend Beiträgen kann es mal passieren :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 19 Januar 2015, 08:58:51
Zitat von: RettungsTim am 19 Januar 2015, 08:31:15
ich habe mich mal an dem DOIF mit mehreren Kommandos Probiert.

define Rollos_runter DOIF ([BM_Garage:brightness] < 110 ) ((set WZT_dummy zu) wait 2 (set WZFL_dummy zu) wait 2 (set WZFR_dummy zu) wait 2 (set WCF_dummy zu) wait 2 (set KUF_dummy zu) wait 2 (set SZT_dummy zu) wait 2 (set KZT_dummy zu))


Leider wird nur das erste Kommando ausgeführt. Wo habe ich den den Fehler?!

Alles was auszuführen ist muss in die zweite Klammer.
Auch wenn wait (noch) nicht mit DOIF geht: Du kannst "sleep" verwenden. Setze aber nach dem "sleep" statt Kommas jeweils ein Semikolon, ansonsten bedeutet "sleep" dass sich das gesamte FHEM schlafen legt.

Bei dir sähe die DOIF-Definition dann also so aus:

([BM_Garage:brightness] < 110 ) (set WZT_dummy zu, sleep 2; set WZFL_dummy zu; sleep 2; set WZFR_dummy zu; sleep 2; set WCF_dummy zu; sleep 2; set KUF_dummy zu; sleep 2; set SZT_dummy zu; sleep 2; set KZT_dummy zu)


Wozu aber die "wait" dazwischen? Um dummys mit einem Status zu versehen musst du keine Pause reinsetzen und es abkürzen (dann mit Kommas):
([BM_Garage:brightness] < 110 ) (set WZT_dummy zu, set WZFL_dummy zu, set WZFR_dummy zu, set WCF_dummy zu, set KUF_dummy zu, set SZT_dummy zu, set KZT_dummy zu)
Titel: Antw:neues Modul DOIF
Beitrag von: HoTi am 19 Januar 2015, 09:03:18
Zitat von: MaJu am 19 Januar 2015, 08:58:51
Wozu aber die "wait" dazwischen? Um dummys mit einem Status zu versehen musst du keine Pause reinsetzen und es abkürzen (dann mit Kommas):
([BM_Garage:brightness] < 110 ) (set WZT_dummy zu, set WZFL_dummy zu, set WZFR_dummy zu, set WCF_dummy zu, set KUF_dummy zu, set SZT_dummy zu, set KZT_dummy zu)


Danke.

Zu deiner Frage: Die Dummys sind mit HM Komponeten verknüpft (4-Fach schalter) und ich dachte es ist besser wenn ich nicht gleich alle 7 Rollos zeitgleich runter fahren will.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Januar 2015, 08:30:01
Hallo zusammen,


meine Rollos halten mich nach wie vor auf Trab.
Heute in der Nacht sogar um 0:00:00  ??? . Denn da sind auf einmal 3 von den Rollos einfach hoch gefahren worden.
Und ich habe keine Ahnung warum.

Ein Blick ins fhem Log hat dann allerdings dies hier zu Tage getragen:

2015.01.21 00:00:00.059 3: CUL_HM set EG_ku_RO_StrasseLinks on
2015.01.21 00:00:00.055 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.21 00:00:00.052 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.21 00:00:00.049 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.21 00:00:00.047 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.21 00:00:00.044 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.21 00:00:00.041 3: CUL_HM set OG_ki2_RO_Garten on
2015.01.21 00:00:00.039 3: CUL_HM set OG_ki1_RO_Carport on
2015.01.21 00:00:00.036 3: CUL_HM set EG_wz_RO_TerrasseLinks on
2015.01.21 00:00:00.033 3: CUL_HM set EG_ku_RO_StrasseRechts on
2015.01.21 00:00:00.030 3: CUL_HM set OG_ki1_RO_Garten on
2015.01.21 00:00:00.027 3: CUL_HM set EG_wz_RO_Carport off
2015.01.21 00:00:00.021 3: CUL_HM set OG_elt_RO_Strasse on
2015.01.21 00:00:00.016 3: CUL_HM set EG_wz_RO_Carport on
2015.01.21 00:00:00.006 3: CUL_HM set EG_wz_RO_TerrasseRechts on


Da ist ja mal mächtig etwas passiert. Mit dem Resultat, dass eben 3 Rollos ein "on" und kein "off" bekommen haben.
Nun stellt sich halt die Frage, warum sind diese Befehle gesendet worden?

Ich habe heute morgen mal ein List auf dem EG_ku_RO_StrasseRechts gemacht und da stand als state in der Tat um 00:00:00 "cmd_2".
Also fahre den Rollo um 00:00:00 hoch.

Momentan steht state auf cmd_2 um 06:40:00 weil da die Rollos korrekterweise hoch gefahren wurden.

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and ([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and [du_Rollo_Art] ne "Weihnachten" and [{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}]) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}])
  (set EG_ku_RO_StrasseLinks off)
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}|7]))
  (set EG_ku_RO_StrasseLinks on)
   NAME       di_EG_ku_RO_StrasseLinks
   NR         115
   NTFY_ORDER 50-di_EG_ku_RO_StrasseLinks
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-21 00:00:00   cmd_event       timer_4
     2015-01-21 00:00:00   cmd_nr          2
     2015-01-21 08:27:13   e_EG_dr_TS_Terrasse_luminosity 7.77
     2015-01-21 00:00:00   state           cmd_2
     2015-01-21 00:00:00   timer_1_c1      21.01.2015 16:10:00
     2015-01-21 00:00:00   timer_2_c1      21.01.2015 21:30:00
     2015-01-21 00:00:00   timer_3_c1      21.01.2015 21:30:00
     2015-01-21 06:40:00   timer_4_c2      22.01.2015 06:40:00|8
     2015-01-21 00:00:00   timer_5_c2      21.01.2015 09:30:00|7
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and InternalDoIf('du_Rollo_Art','STATE','') ne "Weihnachten" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")) or DOIF_time_once($hash->{timer}{2},$wday,"")
     1          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"8") or DOIF_time_once($hash->{timer}{4},$wday,"7"))
   Days:
     3          8
     4          7
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru du_Rollo_Art
     1           du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru du_Rollo_Art
   Do:
     0          set EG_ku_RO_StrasseLinks off
     1          set EG_ku_RO_StrasseLinks on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Art:STATE
     1           du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Art:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:10:00
     1          21:30:00
     2          21:30:00
     3          06:40:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "00:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "00:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       LichtRollo

   

Liegt das ggf an der von mir eingesetzten Version?
Ich meine mal hier irgendwo gelesen zu haben, dass die internen Timer umgestellt werden sollen.

$Id: 98_DOIF.pm 7435 2015-01-04 20:40:24Z damian-s $

Damian erwähnte zwar mal, dass die Zeitintervalle für DOIF zu gering sind.
Aber wenn dann bei den DOIFs bei State genau die Zeit steht, dann sind die Commands doch auch von DOIF gesendet worden.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Januar 2015, 09:37:45
Zitat von: maxritti am 21 Januar 2015, 08:30:01
Heute in der Nacht sogar um 0:00:00  ??? . Denn da sind auf einmal 3 von den Rollos einfach hoch gefahren worden.
Und ich habe keine Ahnung warum.

Offenbar hat das DOELSEIF zugeschlagen:
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "00:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "00:00:00")}|7]))
du_Rollo_Master ist vermutlich ohnehin grundsätzlich an. Also kann es nur an du_Rollo_Zeit_ho liegen.
Und da fällt auf, dass Du "00:00:00" als defaultvalue angegeben hast. Darauf wird ja zurückgegriffen, wenn kein anderer sinnvoller Wert aus dem angegebenen Reading ausgelesen werden kann.

Zu dem Zeitpunkt, als der Timer gesetzt worden ist, konnte also kein sinnvoller Wert aus du_Rollo_Zeit_ho generiert werden und deshalb wurde "00:00:00" zurückgeliefert und im Timer programmiert.
Jetzt musst Du "nur noch" rausfinden, wo im Hinblick darauf der Unterschied zwischen den DOIFs liegt, die funktioniert haben und denen, die nicht funktioniert haben. Denn im Prinzip sind die ja alle identisch, oder?

Außerdem stellt sich mir die Frage, ob der Defaultwert für diesen Anwendungsfall so optimal gewählt ist.  ;)
Wäre ja vielleicht sinnvoller, wenn die Rollos zu einer "christlicheren" Zeit hochfahren, falls mal was schiefgeht, so wie in diesem Fall...
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Januar 2015, 10:36:36
Argh.
Du hast natürlich Recht. Da wird der Hase im Pfeffer begraben sein.
Danke für den Schieber in die Richtung.

Erst mal werde ich den wohl wirklich mal auf eine andere Zeit setzen.

Wobei bei den Readings doch die korrekten Werte drin stehen?

2015-01-21 00:00:00   timer_1_c1      21.01.2015 16:10:00
2015-01-21 00:00:00   timer_2_c1      21.01.2015 21:30:00
2015-01-21 00:00:00   timer_3_c1      21.01.2015 21:30:00
2015-01-21 06:40:00   timer_4_c2      22.01.2015 06:40:00|8
2015-01-21 00:00:00   timer_5_c2      21.01.2015 09:30:00|7


Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Januar 2015, 11:37:41
Zitat von: maxritti am 21 Januar 2015, 10:36:36
Wobei bei den Readings doch die korrekten Werte drin stehen?
Ja, JETZT schon. Die Timer werden durch das Triggern neu gesetzt.
Du siehst ja am Datum der Readings, dass diese Timer jeweils um 00:00:00 neu gesetzt wurden. Und da hatte du_Rollo_Zeit_ho dann den richtigen Wert.

Die entscheidende Frage ist: Wann und warum vorher nicht?
Falls Du gestern einen FHEM-Neustart gemacht hast, würde ich mal dessen Ablauf analysieren. Ist sichergestellt, dass du_Rollo_Zeit_ho definiert ist, bevor die fraglichen DOIFs definiert werden?
Dein Vorteil ist, dass Du ja DOIFs hast, die funktionieren. Du musst also nur herausfinden, wo der Unterschied liegt.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Januar 2015, 12:20:24
Ich werde zu alt für die ganze Technik.  :-\

In der Tat habe ich gestern FHEM neu gestartet.
Daraufhin haben sich die DOIFs die 00:00:00 aus den Dummies geholt.
Denn in der ConfigDB stehen die hinter den Definitionen der DOIFs.

Bislang habe ich mir damit geholfen, dass ich bei Änderung eines Dummies mit einem DOIFs die Defintionen der "Rollo-DOIFs" neu initialisiere, damit diese neuen Werte in die Readings kommen.
Dummerweise habe ich das gestern nach dem Neustart vergessen, so ein Dummie zu ändern, damit die DOIFs aktualisiert werden.

CFGFN
   DEF        ([du_Rollo_Master] or [du_Rollo_Zeit_ho] or [du_Rollo_Zeit_ho_WE] or [du_Rollo_Luminosity_ru] or [du_Rollo_Zeit_ru_start] or [du_Rollo_Zeit_ru_ende]) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF])
   NAME       di_Rollo_SetTime
   NR         114
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-17 17:20:34   cmd_event       du_Rollo_Luminosity_ru
     2015-01-17 17:20:34   cmd_nr          1
     2015-01-17 17:20:34   e_du_Rollo_Luminosity_ru_STATE 0.7
     2015-01-11 19:21:26   e_du_Rollo_Master_STATE an
     2015-01-14 08:10:06   e_du_Rollo_Zeit_ho_STATE 06:40
     2015-01-17 17:20:34   state           cmd_1
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') or InternalDoIf('du_Rollo_Zeit_ho','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_WE','STATE','') or InternalDoIf('du_Rollo_Luminosity_ru','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_start','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_ende','STATE','')
   Devices:
     0           du_Rollo_Master du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
     all         du_Rollo_Master du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Zeit_ho:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE
     all         du_Rollo_Master:STATE du_Rollo_Zeit_ho:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE
   State:
Attributes:
   do         always
   room       LichtRollo


[Off-Topic]
MMn wäre es ja schick mit dem global initialized Event die DOIFs zu aktualisieren.
Aber da bin ich irgendwie nicht weiter gekommen.
[/Off-Topic]

Vielleicht hast Du dazu noch eine Idee?
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Januar 2015, 12:42:19
Hm, das war wohl einfacher als gedacht:

Ein Notify auf dem global:INITIALIZED und dieses triggert mein DOIF, welches die anderen DOIFs aus den Dummies aktualisiert.

Vielleicht nicht best practice, aber es scheint zu funktionieren.
Zumindest sind die Readings der DOIFs nun nach einem Neustart korrekt befüllt.  :)

Danke Dir Brockmann für die Hilfe.

Internals:
   CFGFN
   DEF        global:INITIALIZED trigger di_Rollo_SetTime
   NAME       no_GlobalInitialized
   NOTIFYDEV  global
   NR         180
   NTFY_ORDER 50-no_GlobalInitialized
   REGEXP     global:INITIALIZED
   STATE      2015-01-21 12:38:34
   TYPE       notify
Attributes:
   group      notify
   room       LichtRollo

Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Januar 2015, 12:52:55
Zitat von: maxritti am 21 Januar 2015, 12:42:19
Hm, das war wohl einfacher als gedacht:

Ein Notify auf dem global:INITIALIZED und dieses triggert mein DOIF, welches die anderen DOIFs aus den Dummies aktualisiert.
Es geht sogar noch einfach: Du könntest das DOIF direkt durch global:INITIALIZED triggern lassen, ungefähr so:
DOIF ([global:?initialized])(modify di_EG_ku_RO_StrasseLinks ...

Aber wieso verwendest Du überhaupt für jedes Rollo ein eigenes DOIF, wenn die alle identisch sind? Wäre da nicht eine STRUCTURE mit allen Rollos sinnvoller? Ein Befehl (und ein DOIF) und alle Rollos gehen hoch oder runter.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 21 Januar 2015, 13:00:41
Zitat von: Brockmann am 21 Januar 2015, 12:52:55
Es geht sogar noch einfach: Du könntest das DOIF direkt durch global:INITIALIZED triggern lassen, ungefähr so:
DOIF ([global:?initialized])(modify di_EG_ku_RO_StrasseLinks ...
Gute Idee. Das werde ich heute abend mal umbauen.

Zitat von: Brockmann am 21 Januar 2015, 12:52:55
Aber wieso verwendest Du überhaupt für jedes Rollo ein eigenes DOIF, wenn die alle identisch sind? Wäre da nicht eine STRUCTURE mit allen Rollos sinnvoller? Ein Befehl (und ein DOIF) und alle Rollos gehen hoch oder runter.
Die sind nicht wirklich alle gleich.

Und zwar habe ich ein paar Rollos an Türen, dort gibt es dann u.U. Tür/Fensterkontakte, welche noch mit in die DOIFs einfliessen. Also Tür auf oder zu und Rollo war oben oder unten, dann bitte wieder den "alten" Zustand herstellen.
Andere Rollos gehen zur Südseite, wo ich dann anhand des gemittelten Ertrages meiner PV Anlage die Rollos ein wenig  hoch- und runterfahre. Aber nur dann, wenn ein PV-Dummy den Wert "an" hat.
Und andere bleiben oben, wenn der Master Dummy auf bspws. "Weihnachten" steht, damit man die Aussenweihnachtsbeleuchtung begutachten kann  ;D

Schon ein wenig umfangreicher das ganze wie ich finde.
Titel: Antw:neues Modul DOIF
Beitrag von: AHA1805 am 21 Januar 2015, 21:50:38
Hallo

ich habe jetzt auch mal das doif Modul versucht, und irgendwie wird jetzt mein Logfile vollgeschrieben.

LogFile:
2015.01.21 21:34:53 2: doif_le_fk_offen: internal does not exist: [le_fk_Fenster:STATE]
2015.01.21 21:34:53 2: doif_lu_fk_offen: internal does not exist: [lu_fk_Fenster:STATE]
2015.01.21 21:34:53 2: doif_sz_fk_offen: internal does not exist: [sz_fk_Fenster:STATE]
2015.01.21 21:34:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:34:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:34:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:00 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:00 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:00 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:35:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:35:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:35:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:01 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:02 1: Perfmon: possible freeze starting at 21:36:01, delay is 1.869
2015.01.21 21:36:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:27 1: Perfmon: possible freeze starting at 21:36:26, delay is 1.838
2015.01.21 21:36:31 1: Perfmon: possible freeze starting at 21:36:30, delay is 1.263
2015.01.21 21:36:31 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:31 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:31 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:36:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:36:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:36:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:01 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:37:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:37:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:37:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:01 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:06 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:06 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:06 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:38:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:38:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:38:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:00 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:00 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:00 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:36 1: Perfmon: possible freeze starting at 21:39:35, delay is 1.153
2015.01.21 21:39:36 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:36 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:36 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:39:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:39:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:39:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:00 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:00 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:00 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:40:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:40:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:40:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:00 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:00 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:00 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:41:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:41:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:41:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:00 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:00 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:00 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:42:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:42:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:42:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:00 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:00 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:00 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:05 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:10 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:15 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:20 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:25 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:30 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:35 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:40 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:40 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:45 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:50 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:43:55 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:43:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:43:55 1: Error: sz_fk_Fenster has no TYPE


List der DOIF Module:
fhem> list doif_bd_fk_offen
Internals:
   CFGFN
   DEF        ([bd_fk_Fenster] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn5 press long)
   NAME       doif_bd_fk_offen
   NR         855
   NTFY_ORDER 50-doif_bd_fk_offen
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-21 21:39:37   cmd_event       bd_fk_Fenster
     2015-01-21 21:39:37   cmd_nr          2
     2015-01-21 21:39:37   e_bd_fk_Fenster_STATE closed
     2015-01-21 21:34:53   e_te_Sensor_WDS10_TH_temperature 0.3
     2015-01-21 21:39:37   state           cmd_2
     2015-01-21 21:39:36   wait_timer      no timer
   Condition:
     0          InternalDoIf('bd_fk_Fenster','STATE','') eq "open" and ReadingValDoIf('te_Sensor_WDS10_TH','temperature','') < 16 and ($month > 10 or $month < 5)
   Devices:
     0           bd_fk_Fenster te_Sensor_WDS10_TH
     all         bd_fk_Fenster te_Sensor_WDS10_TH
   Do:
     0          set vi_MP3Remote_Btn5 press long
   Helper:
     last_timer 0
     sleepdevice bd_fk_Fenster
     sleeptimer -1
   Internals:
     0           bd_fk_Fenster:STATE
     all         bd_fk_Fenster:STATE
   Readings:
     0           te_Sensor_WDS10_TH:temperature
     all         te_Sensor_WDS10_TH:temperature
   State:
Attributes:
   room       95_Info
   wait       900

list doif_le_fk_offen
Internals:
   CFGFN
   DEF        ([le_fk_Fenster] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn7 press long)
   NAME       doif_le_fk_offen
   NR         857
   NTFY_ORDER 50-doif_le_fk_offen
   STATE      ???
   TYPE       DOIF
   Readings:
     2015-01-21 21:34:53   e_te_Sensor_WDS10_TH_temperature 0.3
     2015-01-21 21:34:53   error           internal does not exist: [le_fk_Fenster:STATE]
     2015-01-21 21:29:07   wait_timer      no timer
   Condition:
     0          InternalDoIf('le_fk_Fenster','STATE','') eq "open" and ReadingValDoIf('te_Sensor_WDS10_TH','temperature','') < 16 and ($month > 10 or $month < 5)
   Devices:
     0           le_fk_Fenster te_Sensor_WDS10_TH
     all         le_fk_Fenster te_Sensor_WDS10_TH
   Do:
     0          set vi_MP3Remote_Btn7 press long
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           le_fk_Fenster:STATE
     all         le_fk_Fenster:STATE
   Readings:
     0           te_Sensor_WDS10_TH:temperature
     all         te_Sensor_WDS10_TH:temperature
   State:
Attributes:
   room       95_Info
   wait       900

list doif_lu_fk_offen
Internals:
   CFGFN
   DEF        ([lu_fk_Fenster] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn31 press long)
   NAME       doif_lu_fk_offen
   NR         858
   NTFY_ORDER 50-doif_lu_fk_offen
   STATE      ???
   TYPE       DOIF
   Readings:
     2015-01-21 21:34:53   e_te_Sensor_WDS10_TH_temperature 0.3
     2015-01-21 21:34:53   error           internal does not exist: [lu_fk_Fenster:STATE]
     2015-01-21 21:29:09   wait_timer      no timer
   Condition:
     0          InternalDoIf('lu_fk_Fenster','STATE','') eq "open" and ReadingValDoIf('te_Sensor_WDS10_TH','temperature','') < 16 and ($month > 10 or $month < 5)
   Devices:
     0           lu_fk_Fenster te_Sensor_WDS10_TH
     all         lu_fk_Fenster te_Sensor_WDS10_TH
   Do:
     0          set vi_MP3Remote_Btn31 press long
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           lu_fk_Fenster:STATE
     all         lu_fk_Fenster:STATE
   Readings:
     0           te_Sensor_WDS10_TH:temperature
     all         te_Sensor_WDS10_TH:temperature
   State:
Attributes:
   room       95_Info
   wait       900

list doif_sz_fk_offen
Internals:
   CFGFN
   DEF        ([sz_fk_Fenster] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn7 press long)
   NAME       doif_sz_fk_offen
   NR         856
   NTFY_ORDER 50-doif_sz_fk_offen
   STATE      ???
   TYPE       DOIF
   Readings:
     2015-01-21 21:34:53   e_te_Sensor_WDS10_TH_temperature 0.3
     2015-01-21 21:34:53   error           internal does not exist: [sz_fk_Fenster:STATE]
     2015-01-21 21:29:07   wait_timer      no timer
   Condition:
     0          InternalDoIf('sz_fk_Fenster','STATE','') eq "open" and ReadingValDoIf('te_Sensor_WDS10_TH','temperature','') < 16 and ($month > 10 or $month < 5)
   Devices:
     0           sz_fk_Fenster te_Sensor_WDS10_TH
     all         sz_fk_Fenster te_Sensor_WDS10_TH
   Do:
     0          set vi_MP3Remote_Btn7 press long
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           sz_fk_Fenster:STATE
     all         sz_fk_Fenster:STATE
   Readings:
     0           te_Sensor_WDS10_TH:temperature
     all         te_Sensor_WDS10_TH:temperature
   State:
Attributes:
   room       95_Info
   wait       900




Vorher ist mir dann auch noch fhem abgestützt mit der Fehlermeldung im Log
2015.01.21 21:02:15 2: doif_sz_fk_offen: internal does not exist: [sz_fk_Fenster:STATE]
2015.01.21 21:02:15 2: doif_le_fk_offen: internal does not exist: [le_fk_Fenster:STATE]
2015.01.21 21:02:15 2: doif_lu_fk_offen: internal does not exist: [lu_fk_Fenster:STATE]
2015.01.21 21:02:17 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:17 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:17 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:22 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:22 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:22 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:27 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:27 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:27 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:32 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:32 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:32 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:37 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:37 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:37 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:42 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:42 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:42 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:47 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:47 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:47 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:52 1: Error: le_fk_Fenster has no TYPE
2015.01.21 21:02:52 1: Error: lu_fk_Fenster has no TYPE
2015.01.21 21:02:52 1: Error: sz_fk_Fenster has no TYPE
2015.01.21 21:02:54 1: PERL WARNING: Argument "05:29:25" isn't numeric in numeric lt (<) at ./FHEM/98_statistics.pm line 541.
2015.01.21 21:02:54 1: PERL WARNING: Argument "15:32:38" isn't numeric in numeric gt (>) at ./FHEM/98_statistics.pm line 543.
Out of memory!
*** glibc detected *** perl: corrupted double-linked list: 0x04d28400 ***


Was könnte das sein, ich habe schon gelesen, dass dies nur eine Warnung sein soll aber diese kommt ziemlich oft.

Nachtrag:
Jetzt habe ich alle doif gelöscht delete doif.* , die Fehlermeldungen kommer aber trotzdem noch im LogFile.


Schöne Grüße
Hannes
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 22 Januar 2015, 08:58:33
Zitat von: AHA1805 am 21 Januar 2015, 21:50:38
Jetzt habe ich alle doif gelöscht delete doif.* , die Fehlermeldungen kommer aber trotzdem noch im LogFile.

Mach mal ein
list TYPE=DOIF
um sicher zu gehen, ob wirklich alle DOIFs weg sind.

Und dann ein
list TYPE=
um Devices zu finden, die nicht explizit definiert wurden und deshalb keinen TYPE haben. Die verursachen typischerweise diese "has no TYPE"-Fehlermeldung.
Solche Devices auch mit delete entfernen.

Sind die Device-Namen in den Definitionen korrekt (Groß-/Kleinschreibung)?
Titel: Antw:neues Modul DOIF
Beitrag von: AHA1805 am 22 Januar 2015, 18:31:54
Hallo

Ja sie waren alle gelöscht.
Ein Neustart von fhem brachte das System "zum Schweigen"

Gleicher Effekt beim wiederholten anlegen der DOIF.

Gruß Hannes

Gesendet von Tapatalk

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 22 Januar 2015, 20:04:52
Zitat von: AHA1805 am 22 Januar 2015, 18:31:54
Hallo

Ja sie waren alle gelöscht.
Ein Neustart von fhem brachte das System "zum Schweigen"

Gleicher Effekt beim wiederholten anlegen der DOIF.

Gruß Hannes

Gesendet von Tapatalk

Arbeitest du mit Aliasnamen oder sind das die echten Devicenamen?

Du kannst es auch mit dem Reading "state" in der Bedingung probieren: [le_fk_Fenster:state] statt  [le_fk_Fenster]

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Roger am 22 Januar 2015, 20:45:31
Hi,
ich möchte auch gern das DOIF Modul einsetzten. Der Code mit vielen Bedingungen und Befehlen kann ja schnell lang und unübersichtlich werden. Hier schreibe ich normalerweise den Code auf mehrere Zeilen, welche ich mit \ abschliesse.
Bei DOIF scheint das nicht zu gehen:
define di_hum DOIF ([outdoor:humidity]>70)\
DOELSEIF ([outdoor:humidity]>50)\
DOELSE

bringt eine Fehlermeldung: di_hum DOIF: expected DOELSEIF or DOELSE: \DOELSEIF ([outdoor:humidity]>50)\DOELSE
In einer Zeile geht der Befehl. Gibt es eine Lösung das DOIF über mehrere Zeilen zu verteilen
Roger
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 22 Januar 2015, 20:49:29
Zitat von: Roger am 22 Januar 2015, 20:45:31
Hi,
ich möchte auch gern das DOIF Modul einsetzten. Der Code mit vielen Bedingungen und Befehlen kann ja schnell lang und unübersichtlich werden. Hier schreibe ich normalerweise den Code auf mehrere Zeilen, welche ich mit \ abschliesse.
Bei DOIF scheint das nicht zu gehen:
define di_hum DOIF ([outdoor:humidity]>70)\
DOELSEIF ([outdoor:humidity]>50)\
DOELSE

bringt eine Fehlermeldung: di_hum DOIF: expected DOELSEIF or DOELSE: \DOELSEIF ([outdoor:humidity]>50)\DOELSE
In einer Zeile geht der Befehl. Gibt es eine Lösung das DOIF über mehrere Zeilen zu verteilen
Roger

Einfach über Weboberfläche auf DEF klicken und einfach mit Enter ohne \ arbeiten und sich freuen - es kann manchmal ganz einfach sein.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 22 Januar 2015, 21:01:15
Hallo Roger,
das funzt schon, mache ich auch so.

1. Am Ende der Zeile ein " \" (Leerzeichen, dann Backslash). Zwischen dem Bedingungsteil und dem Ausführungsteil muss ein Leerzeichen sein.

2. soll dein DOIF nur einen Zustand anzeigen? falls nicht, fehlt der Ausführungsteil.

Gruß
Titel: Antw:neues Modul DOIF
Beitrag von: Roger am 22 Januar 2015, 21:15:42
Hallo Damian,
ja, ein mehrzeiliger DOIF kann aus den cfg-File mit den \ geladen werden.
Aber über Telnet-Kommandozeile nimmt er den gleichen Code leider nicht an  :(
Bei notify geht das zu Beispiel. Ich teste so immer den Code (delete ... define ...)
@automatisierer: auch " \" hilft nicht, Code war nur zur Demonstration der Fehlermeldung
Roger
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 23 Januar 2015, 10:07:53
Zitat von: Roger am 22 Januar 2015, 21:15:42
Hallo Damian,
ja, ein mehrzeiliger DOIF kann aus den cfg-File mit den \ geladen werden.
Aber über Telnet-Kommandozeile nimmt er den gleichen Code leider nicht an  :(
Bei notify geht das zu Beispiel. Ich teste so immer den Code (delete ... define ...)
@automatisierer: auch " \" hilft nicht, Code war nur zur Demonstration der Fehlermeldung
Roger

DOIF selbst kennt kein "\". Alles andere ist Funktionalität außerhalb des Moduls.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 23 Januar 2015, 10:24:29
Zitat von: Roger am 22 Januar 2015, 21:15:42
Ich teste so immer den Code (delete ... define ...)

@Roger:
Testest du neue Codes immer damit, dass du das komplette DOIF löschst und neu anlegst?

Wie auch Damian schon schrieb: Gehe bei der Weboberfläche auf dein DOIF und bearbeite die Definition am besten dort.
Beim DOIF wird dann beim speichern auch gleich eine Prüfung durchgeführt, ob grundlegende Fehler enthalten sind.

Spätestens wenn man noch einige Attribute in seinen angelegten Sachen hat, macht löschen und Neuanlegen kaum noch Sinn.

Ein bereits angelegtes DOIF kannst du auch deaktivieren und zum Testen ein anderes ähnliches anlegen, ohne dir dein funktionierendes DOIF zu versauen.
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 23 Januar 2015, 12:06:31
und wenn du dann noch den codemirror als editor benutzt brauchst du dir kaum noch sorgen um klammerebenen und ähnliches zu machen...
Titel: Antw:neues Modul DOIF
Beitrag von: AHA1805 am 23 Januar 2015, 21:35:53
Zitat von: Damian am 22 Januar 2015, 20:04:52
Arbeitest du mit Aliasnamen oder sind das die echten Devicenamen?

Du kannst es auch mit dem Reading "state" in der Bedingung probieren: [le_fk_Fenster:state] statt  [le_fk_Fenster]

Gruß

Damian

Hallo Damian

danke für die schnelle Antwort.
Das sind meine realen Device Namen.
Ich habe es jetzt mal mit [le_fk_Fenster:state] versucht.
Bis jetzt ohne Fehlermeldungen, hätte ich auch alleine drauf kommen können,
ich hatte das so in einem Forumbetrag gelesen und mir über Sinn (ohne ":state") von der Fensterkontakten keine Gedanken mehr gemacht.

Jetzt laufen Sie auf jeden Fall. :-)
Könnte es auch daran gelegen haben, dass ich alle vier DOIF in einem Aufwasch durch PASTE in einem FHEM Putty Fenster angelegt habe?
define doif_bd_fk_offen DOIF ([bd_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn5 press long)
attr doif_bd_fk_offen room 95_Info
attr doif_bd_fk_offen wait 900
define doif_sz_fk_offen DOIF ([sz_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn7 press long)
attr doif_sz_fk_offen room 95_Info
attr doif_sz_fk_offen wait 900
define doif_le_fk_offen DOIF ([le_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn7 press short)
attr doif_le_fk_offen room 95_Info
attr doif_le_fk_offen wait 900
define doif_lu_fk_offen DOIF ([lu_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn31 press short)
attr doif_lu_fk_offen room 95_Info
attr doif_lu_fk_offen wait 900

Ich kann das Problem heute leider nicht mehr nachstellen  :'(.

Zu früh gefreut  :'(
Hat wunderbar funktioniert, und plötzlich ging es wieder los.
Begonnen hat das ganze mit
2015.01.23 21:47:52 2: doif_le_fk_offen: reading does not exist: [le_fk_Fenster:state]
2015.01.23 21:47:52 2: doif_lu_fk_offen: reading does not exist: [lu_fk_Fenster:state]
2015.01.23 21:47:52 2: doif_sz_fk_offen: reading does not exist: [sz_fk_Fenster:state]
2015.01.23 21:47:55 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:47:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:47:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:01 1: Error: le_fk_Fenster has no TYPE
015.01.23 21:48:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:05 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:10 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:15 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:20 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:25 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:26 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:30 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:35 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:41 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:41 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:41 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:45 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:51 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:51 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:51 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:48:55 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:48:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:48:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:01 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:05 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:10 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:15 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:20 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:25 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:25 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:30 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:30 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:35 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:41 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:41 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:41 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:45 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:50 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:50 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:52 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:52 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:52 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:49:55 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:49:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:49:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:01 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:06 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:06 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:06 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:10 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:15 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:20 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:20 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:25 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:26 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:30 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:30 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:31 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:35 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:35 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:35 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:40 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:40 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:41 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:45 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:45 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:45 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:50 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:50 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:51 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:50:55 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:50:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:50:55 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:01 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:01 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:01 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:05 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:05 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:05 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:10 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:10 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:10 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:15 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:15 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:15 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:20 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:20 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:21 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:25 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:25 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:26 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:30 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:31 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:31 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:35 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:36 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:36 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:40 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:41 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:41 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:45 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:46 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:46 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:50 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:51:51 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:51:51 1: Error: sz_fk_Fenster has no TYPE
2015.01.23 21:51:55 1: Error: le_fk_Fenster has no TYPE


Und seitdem kommen immer die Logeinträge.
Abhilft bringt nur die 4 DOIF löschen und FHEM neu starten.


Gruß und Danke
Hannes
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Januar 2015, 11:43:00
Zitat von: AHA1805 am 23 Januar 2015, 21:35:53

define doif_bd_fk_offen DOIF ([bd_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn5 press long)
attr doif_bd_fk_offen room 95_Info
attr doif_bd_fk_offen wait 900
define doif_sz_fk_offen DOIF ([sz_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn7 press long)
attr doif_sz_fk_offen room 95_Info
attr doif_sz_fk_offen wait 900
define doif_le_fk_offen DOIF ([le_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn7 press short)
attr doif_le_fk_offen room 95_Info
attr doif_le_fk_offen wait 900
define doif_lu_fk_offen DOIF ([lu_fk_Fenster:state] eq "open" and [te_Sensor_WDS10_TH:temperature] < 16 and ($month > 10 or $month < 5))(set vi_MP3Remote_Btn31 press short)
attr doif_lu_fk_offen room 95_Info
attr doif_lu_fk_offen wait 900

Ich kann das Problem heute leider nicht mehr nachstellen  :'(.

Zu früh gefreut  :'(
Hat wunderbar funktioniert, und plötzlich ging es wieder los.
Begonnen hat das ganze mit
2015.01.23 21:47:52 2: doif_le_fk_offen: reading does not exist: [le_fk_Fenster:state]
2015.01.23 21:47:52 2: doif_lu_fk_offen: reading does not exist: [lu_fk_Fenster:state]
2015.01.23 21:47:52 2: doif_sz_fk_offen: reading does not exist: [sz_fk_Fenster:state]
2015.01.23 21:47:55 1: Error: le_fk_Fenster has no TYPE
2015.01.23 21:47:55 1: Error: lu_fk_Fenster has no TYPE
2015.01.23 21:47:55 1: Error: sz_fk_Fenster has no TYPE



Und seitdem kommen immer die Logeinträge.
Abhilft bringt nur die 4 DOIF löschen und FHEM neu starten.


Als erstes musst du herausfinden, warum deine Devices den Typ und  offenbar die Readings verlieren, das sagt die Meldung  "reading does not exist:", die vom DOIF kommt.
Deine DOIFs greifen lesend auf diese Devices zu, deswegen gehe ich davon aus, dass DOIF nicht die Ursache für den Fehler ist. Die Meldung "... has no TYPE" kommt auch nicht aus dem DOIF-Modul.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: AHA1805 am 24 Januar 2015, 11:54:05
Hallo Damian,

danke für die Info.
Hab mal gesucht die Meldung kommt direkt aus der fhem.pl.

Jetzt wird es spannend,...

Danke für den Hinweis und ein schönes  Wochenende
Gruß Hannes

Gesendet von Tapatalk

Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 24 Januar 2015, 12:03:26
Zitat von: Damian am 20 November 2014, 18:06:35
Du kannst auch statt:

fhem("get Schulferien today") eq "none"

eleganter:

[Schulferien:today] eq "none"

angeben.

Das gleiche gilt für tomorrow.

Gruß

Damian


Guten Morgen Damian,


ich versuche mich gerade nochmal an meiner Rolladensteuerung via DOIF.


Wenn ich diesen Tip befolge, bekomme ich aber reading does not exist: [Schulferien:today] zurückgeliefert.

Mit fhem("get Schulferien today") eq "none" klappts.....

Bug oder Feature ?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Januar 2015, 12:08:28
Zitat von: Bartimaus am 24 Januar 2015, 12:03:26

Guten Morgen Damian,


ich versuche mich gerade nochmal an meiner Rolladensteuerung via DOIF.


Wenn ich diesen Tip befolge, bekomme ich aber reading does not exist: [Schulferien:today] zurückgeliefert.

Mit fhem("get Schulferien today") eq "none" klappts.....

Bug oder Feature ?

Dann hast du vielleicht nicht die aktuelle Version des holiday-Moduls - tomorrow wurde später als Reading eingebaut.

Ob das Reading da ist oder nicht kannst du ja selbst nachschauen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 24 Januar 2015, 12:15:09
Zitat von: Damian am 22 Januar 2015, 20:49:29
Einfach über Weboberfläche auf DEF klicken und einfach mit Enter ohne \ arbeiten und sich freuen - es kann manchmal ganz einfach sein.

Gruß

Damian


Cool!!!! Danke für den Tip
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 24 Januar 2015, 12:33:47
Hallo zusammen,

ich bin weiter dabei, meine notifys, Code aus myUtils.pm usw zu vereinfachen.
Da bietet sich DOIF immer besser an. Dafür noch mal vielen Dank an der Stelle für das Modul.

Jetzt gerade bin ich allerdings an einer Stelle, wo ich nicht wirklich weiterkomme.

Folgendes notify:

du_Test:on set myPushover msg 'Notify - Dachfenster' 'Offenes Dachfenster'.$NAME 'iPhone5S' 0 ''

Liefert mir den Namen du_Test in der Pushmessage mit.

Dagegen folgendes DOIF nicht. Da kommt $NAME in der Pushmessage an.

([du_Test:state] eq "on") (set myPushover msg 'Notify - Dachfenster' 'Offenes Dachfenster'.$NAME 'iPhone5S' 0 '')

MMn sollte sich doch <Befehle> aus dem DOIF gleich verhalten wie <Anweisung> aus dem DOIF.
Was habe ich da übersehen?
Geht das noch nicht in DOIF mit dem $NAME?
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 24 Januar 2015, 12:39:28
Zitat von: Damian am 24 Januar 2015, 12:08:28
Dann hast du vielleicht nicht die aktuelle Version des holiday-Moduls - tomorrow wurde später als Reading eingebaut.

Ob das Reading da ist oder nicht kannst du ja selbst nachschauen.

Gruß

Damian


Danke für den Tip. Das war es. Hatte zwar "FHEM update" + "FHEM restart" ausgeführt, aber da das "attr global sendStatistics onUpdate" in meiner fhem.cfg fehlte, wurde FHEM nicht aktualisiert. (Teste auf meinem TestRaspi)


Jetzt habe ich ein "Reading tomorrow und state", damit funktioniert es jetzt
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Januar 2015, 13:29:39
Zitat von: maxritti am 24 Januar 2015, 12:33:47
Hallo zusammen,

ich bin weiter dabei, meine notifys, Code aus myUtils.pm usw zu vereinfachen.
Da bietet sich DOIF immer besser an. Dafür noch mal vielen Dank an der Stelle für das Modul.

Jetzt gerade bin ich allerdings an einer Stelle, wo ich nicht wirklich weiterkomme.

Folgendes notify:

du_Test:on set myPushover msg 'Notify - Dachfenster' 'Offenes Dachfenster'.$NAME 'iPhone5S' 0 ''

Liefert mir den Namen du_Test in der Pushmessage mit.

Dagegen folgendes DOIF nicht. Da kommt $NAME in der Pushmessage an.

([du_Test:state] eq "on") (set myPushover msg 'Notify - Dachfenster' 'Offenes Dachfenster'.$NAME 'iPhone5S' 0 '')

MMn sollte sich doch <Befehle> aus dem DOIF gleich verhalten wie <Anweisung> aus dem DOIF.
Was habe ich da übersehen?
Geht das noch nicht in DOIF mit dem $NAME?
$NAME gibt es bei DOIF nicht, dass ist eine Eigenschaft des notifys.

Bei DOIF musst du im Gegensatz zu notify mit konkreten Devicenamen arbeiten - verallgemeinern geht hier nicht. Daher weißt du doch immer welches Device gemeint ist und das kannst du konkret fest angeben. Ansonsten kannst du im Ausführungsteil beliebige Readings oder Internals in eckigen Klammern, wie in der Bedingung, angeben. Konkret:

set myPushover msg 'Notify - Dachfenster' 'Offenes Dachfenster du_test' 'iPhone5S' 0 '')

oder z. B. für Status:

set myPushover msg 'Notify - Dachfenster' 'Offenes Dachfenster Status von du_test: [du_test]' 'iPhone5S' 0 '')



Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 24 Januar 2015, 13:38:44
Okay, dann weiss ich bescheid.
Ist halt nur ungünstig, wenn ich ein DOIF für mehrere Fensterkontakte habe, welche mit or verknüpft sind.
Die Meldung sollte halt nur den Kontakt beinhalten, welcher getriggert hat.

Ist aber dann halt so.
Kommt vielleicht im Ostergeschenk  ;D
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 24 Januar 2015, 14:26:27
Zitat von: maxritti am 24 Januar 2015, 13:38:44
Ist halt nur ungünstig, wenn ich ein DOIF für mehrere Fensterkontakte habe, welche mit or verknüpft sind.
Die Meldung sollte halt nur den Kontakt beinhalten, welcher getriggert hat.
Theoretisch steht im Reading cmd_event drin, welches Gerät getriggert hat. Aber ich weiß nicht, ob diese Information im Moment der Ausführung schon aktualisiert wurde.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 24 Januar 2015, 16:55:18
Zitat von: Brockmann am 24 Januar 2015, 14:26:27
Theoretisch steht im Reading cmd_event drin, welches Gerät getriggert hat. Aber ich weiß nicht, ob diese Information im Moment der Ausführung schon aktualisiert wurde.

Nein, da zuerst die Ausführung erfolgt und dann erst die Readings des Moduls aktualisiert werden. Vielleicht lasse ich mir da noch was einfallen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 25 Januar 2015, 12:49:46
Ich habe mal ein Frage zu der Formatierung der Anzeige eines DOIF.
Da ja die meisten DOIF immer sehr häufig Zeiten/Werte beinhalten kann man diese ja auch zur Anzeige auf der Weboberfläche darstellen als Information z.B.
Wie habt ihr das gelöst..?
Es gebe z.B. die Möglichkeit nur die Zeiten darzustellen ohne irgendwelchen Status oder Timer der oft nur interessant ist im Fehlerfall, denn läuft das DOIF erst mal sind eigentlich nur die Zeiten zur Information interessant.
Vllt. hat mal jemand ein Beispiel wie er das macht..!
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 25 Januar 2015, 19:10:23
Neues Wochenende, neues Glück mit einem DOIF.

Bislang steuere ich meine Zirkulationspumpe über zwei Bewegungsmelder.
Sobald eine Bewegung erkannt wird, startet ein notify und prüft den Inhalt eines Dummys, ob der auf "unlocked" steht.
Wenn ja, dann setzt der den auf "locked" und schaltet meinen Zwischenstecker für die Zirkulationspumpe für 3 Minuten ein. Gleichzeitig definiert der ein "at", welches nach 20 Minuten den Dummy wieder auf "unlocked" setzt.
Damit bewirke ich, dass die Pumpe minimal alle 20minuten für 3 Minuten eingeschaltet wird.
Klappt auch 1a, aber ich dachte so, dass da ein DOIF geradezu prädestiniert für wäre.

Tjo, nun sitze ich schon die 2 Tage dran und bekomme es nicht hin.
Trotz mehrfachem Studium der DOIF Command Ref und den vielen Beispielen.

Ich habe da nun viel mit do always, wait, repeatsame, cmdpause & Co rumprobiert.
Auch habe ich die Definition mit [BM:state:sec] > 1200 probiert.
Aber nicht mit dem Ergebnis, wie es mein Konstrukt oben erledigt.
Schon gar nicht kann ich hier sagen, wann was ging und wann was nicht, wegen dieser ganzen Testerei  ???

Am besten wird sein, ich mache mal einen geistigen Reset und fange noch mal von vorne an.
Oder aber hier schiebt mich mal einer in die richtige Richtung. :)
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Januar 2015, 21:06:57
Zitat von: maxritti am 25 Januar 2015, 19:10:23
Neues Wochenende, neues Glück mit einem DOIF.

Bislang steuere ich meine Zirkulationspumpe über zwei Bewegungsmelder.
Sobald eine Bewegung erkannt wird, startet ein notify und prüft den Inhalt eines Dummys, ob der auf "unlocked" steht.
Wenn ja, dann setzt der den auf "locked" und schaltet meinen Zwischenstecker für die Zirkulationspumpe für 3 Minuten ein. Gleichzeitig definiert der ein "at", welches nach 20 Minuten den Dummy wieder auf "unlocked" setzt.
Damit bewirke ich, dass die Pumpe minimal alle 20minuten für 3 Minuten eingeschaltet wird.
Klappt auch 1a, aber ich dachte so, dass da ein DOIF geradezu prädestiniert für wäre.

Tjo, nun sitze ich schon die 2 Tage dran und bekomme es nicht hin.
Trotz mehrfachem Studium der DOIF Command Ref und den vielen Beispielen.

Ich habe da nun viel mit do always, wait, repeatsame, cmdpause & Co rumprobiert.
Auch habe ich die Definition mit [BM:state:sec] > 1200 probiert.
Aber nicht mit dem Ergebnis, wie es mein Konstrukt oben erledigt.
Schon gar nicht kann ich hier sagen, wann was ging und wann was nicht, wegen dieser ganzen Testerei  ???

Am besten wird sein, ich mache mal einen geistigen Reset und fange noch mal von vorne an.
Oder aber hier schiebt mich mal einer in die richtige Richtung. :)
z. B.:

define di_zirkulation DOIF ([sensor] eq "motion")(set pumpe on-for-timer 180)
attr di_zirkulation cmdpause 1200
attr di_zirkulation do always


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 25 Januar 2015, 21:28:10
Ich versuche gerade auch meine 5 at mit IF in eine DOIF zur Steuerung meiner Zirkulationspumpe zu packen.
Soweit so gut, alle 5 At habe ich mit Bedingungen verbastelt, was jedoch nicht funktioniert hat ist das folgende:

Hat da jemand mal nen Tip für mich bitte ? Zu verschiedenen Zeiten soll die Pumpe in bestimmten Zyklen laufen, das Beispiel ist eines davon...


({ fhem("define ZirkuPumpe +*{30}00:20:00 set ZirkulationsPumpe on-for-timer 384") })
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 25 Januar 2015, 21:41:13
Zitat von: Damian am 25 Januar 2015, 21:06:57
z. B.:

define di_zirkulation DOIF ([sensor] eq "motion")(set pumpe on-for-timer 180)
attr di_zirkulation cmdpause 1200
attr di_zirkulation do always


Gruß

Damian

Wenn mich nicht alles täuscht hatte ich die Variante auch mal eingegeben.

Aber egal.
Eben noch mal getestest. Mein notify disabled und das DOIF definiert.

Beim ersten mal in den Bewegungsmelderbereich marschiert und die Pumpe ging an.

Ein list bring dann später mal dies:

Internals:
   CFGFN
   DEF        ([EG_wc_BM_Motion] eq "motion" or [OG_bz_BM_Motion] eq "motion") (set DG_hz_SD_Zirkpumpe on-for-timer 180)
   NAME       di_zirkulation
   NR         1302
   NTFY_ORDER 50-di_zirkulation
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-25 21:18:04   cmd_event       EG_wc_BM_Motion
     2015-01-25 21:18:04   cmd_nr          1
     2015-01-25 21:28:13   e_EG_wc_BM_Motion_STATE motion
     2015-01-25 21:30:01   e_OG_bz_BM_Motion_STATE motion
     2015-01-25 21:18:04   state           cmd_1
   Condition:
     0          InternalDoIf('EG_wc_BM_Motion','STATE','') eq "motion" or InternalDoIf('OG_bz_BM_Motion','STATE','') eq "motion"
   Devices:
     0           EG_wc_BM_Motion OG_bz_BM_Motion
     all         EG_wc_BM_Motion OG_bz_BM_Motion
   Do:
     0          set DG_hz_SD_Zirkpumpe on-for-timer 180
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           EG_wc_BM_Motion:STATE OG_bz_BM_Motion:STATE
     all         EG_wc_BM_Motion:STATE OG_bz_BM_Motion:STATE
   Readings:
   State:
   Trigger:
Attributes:
   cmdpause   1200
   do         always
   group      doif
   room       Zirkulation


Dann habe ich mal gewartet und wie ein Schiesshund aufgepasst, dass keiner in den Bereich der BMs maschiert.
Und dann um 21:39:02 ging die Pumpe wieder an. Das DOIF wurde also getriggert.

Internals:
   CFGFN
   DEF        ([EG_wc_BM_Motion] eq "motion" or [OG_bz_BM_Motion] eq "motion") (set DG_hz_SD_Zirkpumpe on-for-timer 180)
   NAME       di_zirkulation
   NR         1302
   NTFY_ORDER 50-di_zirkulation
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-25 21:39:02   cmd_event       EG_wc_BM_Motion
     2015-01-25 21:39:02   cmd_nr          1
     2015-01-25 21:39:02   e_EG_wc_BM_Motion_STATE motion
     2015-01-25 21:35:07   e_OG_bz_BM_Motion_STATE motion
     2015-01-25 21:39:02   state           cmd_1
   Condition:
     0          InternalDoIf('EG_wc_BM_Motion','STATE','') eq "motion" or InternalDoIf('OG_bz_BM_Motion','STATE','') eq "motion"
   Devices:
     0           EG_wc_BM_Motion OG_bz_BM_Motion
     all         EG_wc_BM_Motion OG_bz_BM_Motion
   Do:
     0          set DG_hz_SD_Zirkpumpe on-for-timer 180
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           EG_wc_BM_Motion:STATE OG_bz_BM_Motion:STATE
     all         EG_wc_BM_Motion:STATE OG_bz_BM_Motion:STATE
   Readings:
   State:
   Trigger:
Attributes:
   cmdpause   1200
   do         always
   group      doif
   room       Zirkulation


Was auffällig ist, ist die Tatsache, dass die Readings

e_EG_wc_BM_Motion_STATE
e_OG_bz_BM_Motion_STATE


im 5 Minuten Takt hoch zählen.
Ob das eine Einstellung der BMs ist?
Bei denen finde ich allerdings kein Register oder Readings, was mit 600 Sekunden gesetzt ist.

Hast Du dazu eine Idee?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 25 Januar 2015, 22:01:48
Zitat von: maxritti am 25 Januar 2015, 21:41:13

im 5 Minuten Takt hoch zählen.
Ob das eine Einstellung der BMs ist?
Bei denen finde ich allerdings kein Register oder Readings, was mit 600 Sekunden gesetzt ist.

Hast Du dazu eine Idee?
ja, du kannst auch auf das Ereignis triggern.

statt [EG_wc_BM_Motion] eq "motion" ... [EG_wc_BM_Motion:?motion] ...  angeben. Dann dürfte das DOIF nur auf echte Bewegung reagieren.

Gruß
Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 26 Januar 2015, 16:27:20
Merkwürdigerweise ist das DOIF dann gar nicht angesprungen, als der BM motion gesendet hat.
Als Befehl der ausgeführt werden sollte, habe ich mal einen Dummy mit einem Wert befüllt, weil ich parallel mein notify noch aktiv habe.

CFGFN
   DEF        ([EG_wc_BM_Motion:?motion] or [OG_bz_BM_Motion:?motion]) (set du_Zirkpumpe on, define at_Z-Off at +00:03:00 set du_Zirkpumpe off, attr du_Zirkpumpe room Zirkulation)
   NAME       di_zirkulation
   NR         1302
   NTFY_ORDER 50-di_zirkulation
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-01-26 16:22:17   state           initialized
   Condition:
     0          EventDoIf('EG_wc_BM_Motion',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'motion') or EventDoIf('OG_bz_BM_Motion',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'motion')
   Devices:
     0           EG_wc_BM_Motion OG_bz_BM_Motion
     all         EG_wc_BM_Motion OG_bz_BM_Motion
   Do:
     0          set du_Zirkpumpe on, define at_Z-Off at +00:03:00 set du_Zirkpumpe off, attr du_Zirkpumpe room Zirkulation
   Helper:
     last_timer 0
     sleeptimer -1
   State:
   Timerfunc:
   Trigger:
     all         EG_wc_BM_Motion OG_bz_BM_Motion
Attributes:
   cmdpause   1200
   disable    1
   do         always
   group      doif
   room       Zirkulation

   
CFGFN
   DEF        1F8685
   IODev      myHMLAN
   LASTInputDev myHMLAN
   MSGCNT     328
   NAME       EG_wc_BM_Motion
   NR         128
   STATE      motion
   TYPE       CUL_HM
   lastMsg    No:E4 - t:41 s:1F8685 d:9A234E 01862160
   myHMLAN_MSGCNT 328
   myHMLAN_RAWMSG E1F8685,0000,0655D61B,FF,FFCB,E4A6411F86859A234E01862160
   myHMLAN_RSSI -53
   myHMLAN_TIME 2015-01-26 16:23:45
   protLastRcv 2015-01-26 16:23:45
   protSnd    104 last_at:2015-01-26 16:23:45
   protState  CMDs_done
   rssi_at_myHMLAN avg:-54.37 min:-74 max:-49 lst:-53 cnt:328
   Readings:
     2015-01-25 16:51:15   Activity        alive
     2015-01-18 14:43:21   CommandAccepted yes
     2015-01-18 14:43:20   D-firmware      1.6
     2015-01-18 14:43:20   D-serialNr      KEQ0363099
     2015-01-18 14:43:21   PairedTo        0x9A234E
     2014-11-16 19:14:34   R-brightFilter  7
     2014-11-16 19:14:34   R-captInInterval off
     2014-11-16 19:14:34   R-evtFltrNum    1
     2014-11-16 19:14:34   R-evtFltrPeriod 1 s
     2014-11-16 19:14:34   R-ledOnTime     0 s
     2014-11-16 19:14:34   R-minInterval   60
     2015-01-18 14:43:21   R-pairCentral   0x9A234E
     2014-11-16 19:14:33   R-sabotageMsg   on
     2015-01-18 14:43:21   RegL_00:        02:01 0A:9A 0B:23 0C:4E 10:01 00:00
     2015-01-18 14:43:22   RegL_01:        01:12 02:72 08:00 22:00 00:00
     2015-01-26 16:23:40   battery         ok
     2015-01-26 16:23:45   brightness      33
     2015-01-26 16:23:40   cover           closed
     2015-01-26 16:23:45   motion          on (to myVCCU)
     2015-01-26 16:23:45   motionCount     134_next:29s
     2015-01-26 16:23:40   recentStateType info
     2014-11-07 07:18:30   rssi_at_myHMLAN -44
     2015-01-26 16:23:45   state           motion
     2015-01-18 07:46:16   trigDst_9A234E  noConfig
     2015-01-26 16:23:45   trigDst_myVCCU  noConfig
     2015-01-26 16:23:45   trigger_cnt     134
   Helper:
     mId        004A
     rxType     28
     Io:
       newChn     +1F8685,00,01,1E
       nextSend   1422285825.59603
       rxt        2
       vccu       myVCCU
       p:
         1F8685
         00
         01
         1E
       prefIO:
         myHMLAN
     Mrssi:
       mNo        E4
       Io:
         myHMLAN    -51
     Prt:
       bErr       0
       sProc      0
       sleeping   0
       Rspwait:
     Q:
       qReqConf
       qReqStat
     Role:
       chn        1
       dev        1
     Rpt:
       IO         myHMLAN
       flg        A
       ts         1422285825.50157
       ack:
         HASH(0xa15b4cc)
         E480029A234E1F868501012100
         HASH(0xa15b4cc)
         E480029A234E1F868500
     Rssi:
       At_myhmlan:
         avg        -54.375
         cnt        328
         lst        -53
         max        -49
         min        -74
Attributes:
   IODev      myHMLAN
   IOgrp      myVCCU:myHMLAN
   actCycle   000:20
   actStatus  alive
   alias      WC
   autoReadReg 4_reqStatus
   expert     2_full
   firmware   1.6
   model      HM-SEC-MDIR
   peerIDs    00000000,
   room       Zirkulation
   serialNr   KEQ0363099
   subType    motionDetector
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 26 Januar 2015, 16:35:12
Zitat von: maxritti am 26 Januar 2015, 16:27:20
Merkwürdigerweise ist das DOIF dann gar nicht angesprungen, als der BM motion gesendet hat.

Dann musst du mit Eventmonitor analysieren, welche Events nur bei Bewegung kommen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 28 Januar 2015, 14:19:07
ich bekomme folgendes nicht hin weil ich nicht weiß an welcher Stelle ich eine Zeit in den Code bringen muss..!

Mein DOIF arbeitet mit folgendem Code im DEF:
([ZeitsteuerungTV] eq "FHEM" and ([{sunset("CIVIL",-620,"16:35","22:30")}|12345] or [{sunset("CIVIL",-1220,"16:35","22:20")}|06]))
(set WZ_Lampe_TV on)
DOELSEIF ([ZeitsteuerungTV] eq "FHEM" and ([00:45|12345] or [01:15|06]) or ([Temperatur_Wohnzimmer:luminosity:] < 1.00))
(set WZ_Lampe_TV off)
DOELSEIF([ZeitsteuerungTV] eq "FHEM")(attr ZufallsTimerTVLED disable 1)
DOELSEIF([ZeitsteuerungTV] eq "Zufall")(attr ZufallsTimerTVLED disable 0)


Die zweite DOELSEIF Definition funktioniert so wie sie soll, jetzt habe ich eine automatische Abfrage der Helligkeit im Wohnzimmer eingebaut.
Damit möchte ich erreichen wenn ich Abends raus gehe und eine andere Lampe ausschalte - geht luminosity auf unter 1 - auch die TV Beleuchtung ausgeht und nun das "ABER" dieses soll nicht vor einer bestimmten Uhrzeit (z.B. 23:00 Uhr) passieren.
Das habe ich gestern bemerkt, denn wenn die Beleuchtung einschaltet und die Rollläden runter gehen geht die TV Beleuchtung aus wenn noch keine weitere Lampe an ist das möchte ich vermeiden...

Ich weiß jetzt nicht wo ich diese Zeit rein bringe, habe etliche Versuche hinter mir aber das klappt nicht  :-\
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 28 Januar 2015, 15:03:58
Zitat von: moonsorrox am 28 Januar 2015, 14:19:07
Ich weiß jetzt nicht wo ich diese Zeit rein bringe, habe etliche Versuche hinter mir aber das klappt nicht  :-\

Vielleicht so (ungetestet):

DOELSEIF ([ZeitsteuerungTV] eq "FHEM" and ([00:45|12345] or [01:15|06] or ([Temperatur_Wohnzimmer:luminosity:] < 1.00 and $hms gt "23:00:00")))
Titel: Antw:neues Modul DOIF
Beitrag von: HoTi am 28 Januar 2015, 15:30:58
Hallo zusammen,

ich habe nun von maxritti die Rolloschaltung nachgebaut. Funktioniert Prima! Danke maxritti.

Aber nun hab ich das Problem welches er auch schon hatte und jetzt anscheinend auch wieder.

Beim Speichern der cfg datei, oder bei neustart von FHEM verlieren meine DOIF die Uhrzeiten.
Folgendes Notify sollte es auffangen:

Zitatdefine ni_GlobalInitialized notify global:INITIALIZED trigger di_Rollo_SetTime

Funktioniert aber nicht :-( bzw. der Befehl trigger di_Rollo_SetTime alleine funktioniert nicht.

Jemand eine Idee woran das liegen könnte? Ausserdem wird das notify anscheinendn nicht beim speichern der cfg aufgerufen. Hat da jemand eine idee wie ich das abfange?


Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Januar 2015, 16:18:14
Zitat von: Brockmann am 28 Januar 2015, 15:03:58
Vielleicht so (ungetestet):

DOELSEIF ([ZeitsteuerungTV] eq "FHEM" and ([00:45|12345] or [01:15|06] or ([Temperatur_Wohnzimmer:luminosity:] < 1.00 and $hms gt "23:00:00")))



Schade nur, dass 00:00:00 kleiner ist als 23:00:00 ;)

Es muss erstmal klar sein in welchem Zeitraum (von bis) es passieren soll z. B. [23:00-10:00]. Dann kann man es angeben als:

...  ([Temperatur_Wohnzimmer:luminosity:] < 1.00 and [?23:00-10:00]) ...

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 28 Januar 2015, 17:25:51
Zitat von: Brockmann am 28 Januar 2015, 15:03:58
Vielleicht so (ungetestet):

Ok vielen Dank, ich habe das mal so mit Damians Änderung eingebaut und werde es jetzt testen. Is ja gleich soweit das es angehen sollte, also sollte es auch anbleiben und nicht schon wieder ausgehen, denn der luminosity Wert ist schon unter "1"

@Damian
vielen Dank
die zweite Zeit ist gedacht für was..?
Das er sieht das es für den heutigen Tag gilt und über Mitternacht, dann erst morgen wieder..?
Das habe ich nicht verstanden.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Januar 2015, 17:57:03
Zitat von: moonsorrox am 28 Januar 2015, 17:25:51
Ok vielen Dank, ich habe das mal so mit Damians Änderung eingebaut und werde es jetzt testen. Is ja gleich soweit das es angehen sollte, also sollte es auch anbleiben und nicht schon wieder ausgehen, denn der luminosity Wert ist schon unter "1"

@Damian
vielen Dank
die zweite Zeit ist gedacht für was..?
Das er sieht das es für den heutigen Tag gilt und über Mitternacht, dann erst morgen wieder..?
Das habe ich nicht verstanden.

Es sind Zeitintervalle (es gibt genügend Beispiele zu diesem Thema in der Commandref zu DOIF).

Ein Intervall hat ein Anfang und ein Ende. In diesem Beispiel ist das Zeitintervall von 23:00 Uhr bis 10:00 Uhr wahr in der sonstigen Zeit, also von 10:00 bis 23:00 Uhr ist es nicht wahr.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 28 Januar 2015, 18:03:40
Zitat von: Damian am 28 Januar 2015, 17:57:03
Es sind Zeitintervalle (es gibt genügend Beispiele zu diesem Thema in der Commandref zu DOIF).

Ein Intervall hat ein Anfang und ein Ende. In diesem Beispiel ist das Zeitintervall von 23:00 Uhr bis 10:00 Uhr wahr in der sonstigen Zeit, also von 10:00 bis 23:00 Uhr ist es nicht wahr.
ich lese echt viel in der commandref zu deinem DOIF Modul weil ich es genial finde was man damit alles machen, habe erfolgreich schon mindestens 6 DOIF im Betrieb, aber manchmal ist es nicht so einfach... ;)

OK die Erklärung verstehe ich, dass war auch mein Fehler mit dem Anfang und dem Ende, deshalb habe ich das nicht hinbekommen, ich dachte nicht an Intervall, ich habe an eine feste Zeit gedacht..!! :-\
Danke dir Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 28 Januar 2015, 18:10:29
Zitat von: moonsorrox am 28 Januar 2015, 18:03:40
ich lese echt viel in der commandref zu deinem DOIF Modul weil ich es genial finde was man damit alles machen, habe erfolgreich schon mindestens 6 DOIF im Betrieb, aber manchmal ist es nicht so einfach... ;)

Dann musst du dich dranhalten, im Durchschnitt hat ein DOIF-Nutzer 9 DOIF-Module definiert :)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 28 Januar 2015, 18:15:22
Dann bin ich ja nur Durchschnitt :-[
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 28 Januar 2015, 19:16:10
DOIF ist halt wirklich genial - ich hab nicht gezählt wieviele ich habe, aber vom prinzip her gibt es für jeden Aktor eines. Dann gibt es zwei drei grössere die komplexere Dinge von der HMI aus schalten und z.b. auf zustände der Harmony reagieren.
Ein paar grundsätze muss man beachten - ich habe mir z.b. angewöhnt die DOELSEIFs mit den meisten bedingungen als erste in der DEF stehen zu haben, nach unten hin wirds immer schlanker - es wird ja schliesllich von oben nach unten abgearbeitet. Ausserdem habe ich meist den DOELSE mit einem eintrag in ein readingsHistory belegt damit ich feststellen kann das ein zustand noch nicht abgefangen ist...

Tolles Modul was Du uns hier beschert hast! Dein Dickes Dankeschön von mir dafür!
Titel: Antw:neues Modul DOIF
Beitrag von: Rince am 29 Januar 2015, 05:02:06
ZitatBeim Speichern der cfg datei, oder bei neustart von FHEM verlieren meine DOIF die Uhrzeiten.
Folgendes Notify sollte es auffangen:

Zitat
define ni_GlobalInitialized notify global:INITIALIZED trigger di_Rollo_SetTime

Funktioniert aber nicht :-( bzw. der Befehl
Code: [Auswählen]
trigger di_Rollo_SetTime
alleine funktioniert nicht.

Jemand eine Idee woran das liegen könnte? Ausserdem wird das notify anscheinendn nicht beim speichern der cfg aufgerufen. Hat da jemand eine idee wie ich das abfange?

Trigger dient nicht zum "scharf" stellen, sondern zum auslösen eines Notify.
Und es braucht einen Parameter, der dem Notify vorgespielt werden soll.

Das du nicht in der fhem.cfg rumschreben sollst, sondern über das DEF des Befehls hat dir schon wer nahe gelegt, oder?
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 29 Januar 2015, 06:34:04

Zitat von: RettungsTim am 28 Januar 2015, 15:30:58
Beim Speichern der cfg datei, oder bei neustart von FHEM verlieren meine DOIF die Uhrzeiten.
Auch das "oder" verwirrt mich. Das externe Speichern der fhem.cfg hat auf den laufenden Betrieb keine Auswirkungen, bis FHEM neu gestartet wird.

Wenn DOIFs und auch alles andere über die Weboberfläche erstellt und angepasst werden, können sie unmittelbar danach verwendet werden.

Ich bin der Meinung, aus dem Einsteigerleitfaden sollte man rausnehmen, das man in der Datei selber wildern kann. Das ist nichts für Einsteiger.
Titel: Antw:neues Modul DOIF
Beitrag von: HoTi am 29 Januar 2015, 08:52:11
Das ich darin selber "rumwilder" ist hier jetzt mal nicht mein Problem. Da ich gerade versuche mich daran zu gewöhnen die CFG nicht mehr von Hand zu bearbeiten haben ich das auch über die DEFs versucht.

Aber nochmal. Wenn FHEM neu gestartet wird. Sind die Zeiten auf Standard gestellt und nicht auf die vorherigen Einstellungen (Diese stehen aber noch im Frontend).

Zum zweiten sind die Zeiten ebenfalls weg wenn ich in der CFG "rumwilder" und dann die CFG speicher.

Zitat von: Rince am 29 Januar 2015, 05:02:06
Trigger dient nicht zum "scharf" stellen, sondern zum auslösen eines Notify.
Und es braucht einen Parameter, der dem Notify vorgespielt werden soll.

Heißt? Wie mach es es richtig das DOIF auzulösen?


*off topic*
Und da mich das nun nervt. Lese ich mir das mit der DB mal durch. Dann komm ich nicht mehr in versuchung und die Versionierung finde ich mehr als interessant, da ich das dann nicht mehr von Hand machen muss.
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 29 Januar 2015, 09:00:40
Wenn ich nur über die Web-Oberfläche arbeite, drücke ich vorm FHEM-Neustart immer "save config". Dann werden auch die aktuellen Stati gespeichert. Wenn ich das mal vergesse merke ich das meist recht schnell, dass die Fenster-Anzeige nicht unbedingt stimmt ;-)

Das geht natürlich nicht, wenn man die cfg von Hand bearbeitet, denn dann würden die Änderungen ja durch FHEM wieder überschrieben.

Ich bin der Meinung, DB brauchst du nicht.

Das DOIF löst aus, wenn die Bedingung erfüllt ist. Der Aufbau von DOIF ist immer:
(in erster Klammer steht die Prüfung, die erfüllt sein muss) (in der zweiten Klammer steht der Befehl der ausgeführt werden soll wenn die Bedingung in Klammer 1 wahr ist)
DOELSEIF
(wieder erste Klammer mit Bedingung) (und zweite Klammer mit Befehl wenn die Bedingung2 wahr ist)
DOELSEIF
(es können beliebig viele DOELSEIF-Bedingungen angegeben werden) (und jeweils in der zweiten Klammer der Befehl)
DOELSE
(optional gibt es dann DOELSE, das ausgeführt wird wenn keine der IF/DOELSEIF-Bedingungen wahr ist. DOELSE darf natürlich nur eine Klammer haben, es gibt ja keine eigene Prüfung)
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Januar 2015, 09:11:05
Hallo,


wie RettungsTim geschrieben hat, hat er etwas Code von mir übernommen.
Daher will ich das mal ein wenig erklären.

Ich habe für meine Rollosteuerung ein paar Dummys erzeugt, wo ich manuell Zeiten eingeben kann.
Dies sind Zeitfenster, wenn Rollos hoch und runter gehen sollen.
Auch habe ich dort Schwellwerte für meinen Helligkeitssensor hinterlegt.

Und die DOIFs für die Rolloaktoren lesen nun via ReadingsVal("EingabeDummy", "state", "22:00:00") den Wert aus den Eingabefeldern aus.
Jetzt ist es halt so, dass es nicht definiert ist, dass diese Eingabedummys in der Config von FHEM vor der Definition der DOIFs für die Aktoren der Rollos stehen. Schon gar nicht in der ConfigDB :)

Daher nehmen die DOIFs bei den ReadingsVal den Default Wert an.

Nun suche ich nach wie vor nach einer Möglichkeit bei einem Reboot von FHEM diese Werte mit denen der Eingabefelder zu synchronisieren.

Wie in dem Posting von mir zu lesen hatte das auch mal mit einem Notify funktioniert:

http://forum.fhem.de/index.php/topic,23833.msg249263.html#msg249263

Dummerweise klappt das aber nun nicht mehr.
Eigentlich auch nachvollziehbar, denn wie Rince hier schreibt gilt das Trigger wohl nur für notifys.

http://forum.fhem.de/index.php/topic,23833.msg253389.html#msg253389

Die Idee von Brockmann aus dem Post hier funktioniert auch nicht wirklich.

http://forum.fhem.de/index.php/topic,23833.msg249269.html#msg249269

Nach dem Neustart stehen nach wie vor die Default Werte von ReadingsVal in den DOIFs Definitionen.

@RettungsTim:

ConfigDB kann ich nur empfehlen.
Nutze ich schon was länger und vermisse die fhem.cfg in keinem Fall ;-)
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Januar 2015, 12:38:43
Zitat von: maxritti am 29 Januar 2015, 09:11:05Die Idee von Brockmann aus dem Post hier funktioniert auch nicht wirklich.

http://forum.fhem.de/index.php/topic,23833.msg249269.html#msg249269

Nach dem Neustart stehen nach wie vor die Default Werte von ReadingsVal in den DOIFs Definitionen.

Gerade noch mal in Ruhe getestet.
Es funktioniert doch.

[global:?initialized] mit in die DEF das DOIF, welches auf die Eingaben der Dummys reagiert und dann stehen korrekt die Inhalte der Dummys in den timer  :D der DOIFs.
Titel: Antw:neues Modul DOIF
Beitrag von: HoTi am 29 Januar 2015, 12:46:40
Super, geht! Danke
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 29 Januar 2015, 13:44:33
Hallo,
habe mir folgendes DOIF gebastelt um eine Lampe abhängig von der Helligkeit zu schalten:
([Aussen_Sensor:luminosity:] < 0.90 ) (set FS20_S8_B on) DOELSE ([Aussen_Sensor:luminosity:] > 1.50 ) (set FS20_S8_B off)
Das Einschalten der lampe funktioniert das Ausschalten leider nicht, hier der logeintrag:
2015.01.29 08:24:23 2: Licht_Kugel_an: 1.68 > 1.50 : Unknown command 1.68, try help.
Vielleicht hat jemand einen Tipp für mich.

Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: MaJu am 29 Januar 2015, 13:49:19
Zwei Dinge: Bei DOELSE darf keine weitere Prüfung drin stehen, sondern nur noch eine Ausführung! Also DOELSEIF statt DOELSE
Zum zweiten: Warum der Doppelpunkt am Ende bei [Aussen_Sensor:luminosity:]?

Deine DOIF-Def müsste aussehen:
([Aussen_Sensor:luminosity] < 0.90 ) (set FS20_S8_B on)

DOELSEIF
([Aussen_Sensor:luminosity] > 1.50 ) (set FS20_S8_B off)

(du kannst in der DEF auch so mit Leerzeilen arbeiten wie du willst, das macht es für mich zumindest übersichtlicher die DOELSEIF für mich optisch auseinander zu ziehen)
Titel: Antw:neues Modul DOIF
Beitrag von: moonsorrox am 29 Januar 2015, 13:52:08
Zitat von: maxritti am 29 Januar 2015, 09:11:05
Ich habe für meine Rollosteuerung ein paar Dummys erzeugt, wo ich manuell Zeiten eingeben kann.
Dies sind Zeitfenster, wenn Rollos hoch und runter gehen sollen.
Auch habe ich dort Schwellwerte für meinen Helligkeitssensor hinterlegt.

hast du deinen kompletten Rolllo Code irgendwo hier im Thread hinterlegt..?
ich würde ihn mir gern mal anschauen was du das gebaut hast, vorallem das mit den Zeiten interessiert mich schon... da ich auch herum bastel, werde mal noch ein wenig suchen, aber mittlerweile ist es hier schon ganz schön voll geworden.
Titel: Antw:neues Modul DOIF
Beitrag von: The-Holgi am 29 Januar 2015, 15:49:29
@MaJu Danke für den Tipp. Vor allem die Möglichkeit den Code so auseinander zu schreiben finde ich gut .
Gruß Holgi
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Januar 2015, 19:12:47
Zitat von: maxritti am 29 Januar 2015, 12:38:43
Gerade noch mal in Ruhe getestet.
Es funktioniert doch.

[global:?initialized] mit in die DEF das DOIF, welches auf die Eingaben der Dummys reagiert und dann stehen korrekt die Inhalte der Dummys in den timer  :D der DOIFs.

Und jetzt muss ich das doch widerrufen.
Das klappt zwar, dass bei einem Neustart die DOIFs initialisiert werden.

Allerdings sitze ich hier gerade so schön auf dem Sofa rum und meine HM Aktoren klacken auf einmal alle. In ein paar Minuten Abstand wieder und dann wieder.

2015.01.29 17:51:40.028 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:51:40.026 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:51:40.024 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:51:40.022 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:51:40.020 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:51:40.018 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:51:40.015 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:51:40.012 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:51:40.010 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:43:56.215 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:43:56.213 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:43:56.211 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:43:56.209 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:43:56.207 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:43:56.205 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:43:56.203 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:43:56.201 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:43:56.198 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:32:14.932 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:32:14.930 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:32:14.928 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:32:14.927 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:32:14.925 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:32:14.923 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:32:14.921 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:32:14.919 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:32:14.916 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:29:15.165 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:29:15.163 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:29:15.161 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:29:15.159 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:29:15.157 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:29:15.155 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:29:15.153 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:29:15.151 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:29:15.148 3: CUL_HM set EG_ku_RO_StrasseLinks off

2015.01.29 17:23:38.493 3: CUL_HM set OG_ki2_RO_Garten off
2015.01.29 17:23:38.491 3: CUL_HM set OG_ki1_RO_Garten off
2015.01.29 17:23:38.489 3: CUL_HM set OG_ki1_RO_Carport off
2015.01.29 17:23:38.487 3: CUL_HM set OG_elt_RO_Strasse off
2015.01.29 17:23:38.485 3: CUL_HM set EG_wz_RO_TerrasseRechts off
2015.01.29 17:23:38.483 3: CUL_HM set EG_wz_RO_TerrasseLinks off
2015.01.29 17:23:38.481 3: CUL_HM set EG_wz_RO_Carport off
2015.01.29 17:23:38.478 3: CUL_HM set EG_ku_RO_StrasseRechts off
2015.01.29 17:23:38.476 3: CUL_HM set EG_ku_RO_StrasseLinks off


Daraufhin habe ich mal ein wenig versucht dem Problem auf die Schliche zu kommen.
Ich habe im FHEMWEB ein "define du_Test dummy" gemacht. Kurz danach klackerten die Aktoren wieder.
Dann ein "delete du_Test" und ein erneutes klackern der Aktoren.

Und hier sieht man auch, warum:

Internals:
   CFGFN
   DEF        ([global:?initialized] or [du_Rollo_Zeit_ho] or [du_Rollo_Zeit_ho_WE] or [du_Rollo_Luminosity_ru] or [du_Rollo_Zeit_ru_start] or [du_Rollo_Zeit_ru_ende]) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF])
   NAME       di_Rollo_SetTime
   NR         106
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-29 19:04:31   cmd_event       global
     2015-01-29 19:04:31   cmd_nr          1
     2015-01-29 19:04:31   e_global_events DELETED du_Test
     2015-01-29 19:04:31   state           cmd_1
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or InternalDoIf('du_Rollo_Zeit_ho','STATE','') or InternalDoIf('du_Rollo_Zeit_ho_WE','STATE','') or InternalDoIf('du_Rollo_Luminosity_ru','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_start','STATE','') or InternalDoIf('du_Rollo_Zeit_ru_ende','STATE','')
   Devices:
     0           global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev global
     triggerEvents:
       DELETED du_Test
       MODIFIED di_EG_ku_RO_StrasseLinks
       MODIFIED di_EG_ku_RO_StrasseRechts
       MODIFIED di_EG_wz_RO_Carport
       MODIFIED di_EG_wz_RO_TerrasseLinks
       MODIFIED di_EG_wz_RO_TerrasseRechts
       MODIFIED di_OG_elt_RO_Strasse
       MODIFIED di_OG_ki1_RO_Carport
       MODIFIED di_OG_ki1_RO_Garten
       MODIFIED di_OG_ki2_RO_Garten
   Internals:
     0           du_Rollo_Zeit_ho:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE
     all         du_Rollo_Zeit_ho:STATE du_Rollo_Zeit_ho_WE:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Zeit_ru_start:STATE du_Rollo_Zeit_ru_ende:STATE
   Readings:
   State:
   Timerfunc:
   Trigger:
     all         global
Attributes:
   do         always
   room       LichtRollo


Nur warum ist das ein Grund für das DOIF cmd_1 auszuführen?

So ganz serienreif scheint das noch nicht zu sein, mit meinen Dummys, welche die DOIFs mit dynamischen Werten versorgen sollen.
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 29 Januar 2015, 20:15:19
Was erkennst du denn in deine DOIF, was diesen Fehler verursacht?
Ich habe das bei nämlich auch gerade aufgenommen und hab natürlich jetzt Bammel, dass das bei mir auch passiert. Nur scheint mein DOIF ein wenig schlanker zu sein.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Januar 2015, 20:54:00
Meiner Meinung nach hat mein DOIF cmd_1 ausgeführt, weil global_events aus welchem Grund auch immer eingetreten ist:

     2015-01-29 19:04:31   cmd_event       global
     2015-01-29 19:04:31   cmd_nr          1
     2015-01-29 19:04:31   e_global_events DELETED du_Test
     2015-01-29 19:04:31   state           cmd_1


Es gab um 19:04:31 eigentlich für keines DOIF den Grund hier cmd_1 auszuführen.
Weder die Helligkeit ist unter den definierten Wert gefallen, noch ist irgendeine Zeit erreicht worden.

Hier mal die Def eines verdächtigen DOIFs:
Und das ist nur eines der 9 DOIFs, welche auf einmal loslegen.

([du_Rollo_Master] eq "an" and (([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and ([{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "22:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}])) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}]))
  (set OG_elt_RO_Strasse off)
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "10:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "10:00:00")}|7]))
  (set OG_elt_RO_Strasse on)


Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 29 Januar 2015, 21:10:55
Das ganze ist auch reproduzierbar.
Man definiert folgenden Dummy:

define du_Zeit dummy
attr du_Zeit setList state:textField
attr du_Zeit webCmd state


und diesen Dummy:

define du_Rollo dummy

Dieses DOIF:

define di_Rollo DOIF ([{ReadingsVal("du_Zeit", "state", "22:00:00")}]) (set du_Rollo on)

und dieses DOIF:

define di_SetTime DOIF ([global:?initialized] or [du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])
attr di_SetTime do always


Nun kann man in dem Dummy du_Zeit einen Zeitwert eingeben und den Focus aus dem Textfeld bewegen.
Dann sieht man im DOIF di_Rollo als internet Timer den eingegebenen Zeitwert.

Soweit so gut.

Gibt man in Fhem Web nun ein define du_test dummy sieht man bei den Readings vom DOIF di_SetTime, dass cmd_1 mit e_global_events
DEFINED du_test
eben zu dem Zeitpunkt der Eingabe von define du_Test dummy ausgeführt wurde.

ZitatInternals:
   CFGFN
   DEF        ([global:?initialized] or [du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])
   NAME       di_SetTime
   NR         45
   NTFY_ORDER 50-di_SetTime
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-29 21:06:03   cmd_event       global
     2015-01-29 21:06:03   cmd_nr          1
     2015-01-29 21:04:31   e_du_Zeit_STATE 09:30
     2015-01-29 21:04:31   e_du_Zeit_events 09:30
     2015-01-29 21:06:03   e_global_events DEFINED du_test
     2015-01-29 21:06:03   state           cmd_1
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or InternalDoIf('du_Zeit','STATE','')
   Devices:
     0           global du_Zeit
     all         global du_Zeit
   Do:
     0          modify di_Rollo [di_Rollo:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev global
     triggerEvents:
       DEFINED du_test
       MODIFIED di_Rollo
   Internals:
     0           du_Zeit:STATE
     all         du_Zeit:STATE
   Readings:
   State:
   Trigger:
     all         global
Attributes:
   do         always

Das dürfte meiner Meinung nach nicht sein oder?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 29 Januar 2015, 21:45:26
Zitat von: maxritti am 29 Januar 2015, 21:10:55
Das ganze ist auch reproduzierbar.
Man definiert folgenden Dummy:

define du_Zeit dummy
attr du_Zeit setList state:textField
attr du_Zeit webCmd state


und diesen Dummy:

define du_Rollo dummy

Dieses DOIF:

define di_Rollo DOIF ([{ReadingsVal("du_Zeit", "state", "22:00:00")}]) (set du_Rollo on)

und dieses DOIF:

define di_SetTime DOIF ([global:?initialized] or [du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])
attr di_SetTime do always


Nun kann man in dem Dummy du_Zeit einen Zeitwert eingeben und den Focus aus dem Textfeld bewegen.
Dann sieht man im DOIF di_Rollo als internet Timer den eingegebenen Zeitwert.

Soweit so gut.

Gibt man in Fhem Web nun ein define du_test dummy sieht man bei den Readings vom DOIF di_SetTime, dass cmd_1 mit e_global_events
DEFINED du_test
eben zu dem Zeitpunkt der Eingabe von define du_Test dummy ausgeführt wurde.

Das dürfte meiner Meinung nach nicht sein oder?

Das ist ganz einfach. Durch das define ... triggert global. Da es in der ersten Bedingung vorkommt, wird diese ausgewertet. global ist zwar nicht initialized dafür ist aber dein or-Fall  mit [du_Zeit] wahr und das führt zu cmd1.

Edit: Zukünftig wird man unabhängige Ereignisse bei DOIF angeben können (steht bereits auf der todo-Liste im ersten Post). Das wird dann in diesem Fall so aussehen:

define di_SetTime DOIF ([global:?initialized])|([du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])

Damit wird man solche Abhängigkeiten in den Griff bekommen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 29 Januar 2015, 23:21:48
Kann mir bitte jemand helfen?
Ich möchte mit DOIF und vielleicht waitdel oder so etwas folgendes Problem lösen:

Ich habe eine Struktur, die zur Anwesenheitskontrolle 2 Handys abgfragt. Ist mindestens eines davon prsent, wird nichts unternommen, sind aber beide absent, wird die Bude abgeschaltet.
Das kann lästig werden, wenn mal wieder kurz das WLAN spinnt. Daher möchte ich vor der Abschaltung aller Geräte (mache ich mit DOIF), dass ich über Sprachausgabe aufgefordert werde, innerhalb einer Minute einen Taster zu drücken. Erfolgt der Druck auf die Taste, soll der Abschaltvorgang abgebrochen oder nicht eingeleitet werden, ansonsten soll abgeschaltet werden.

Das habe ich bereits:
Die Struktur
define BinIchDa structure s_structure s3 s5
und den Schaltbefehl (DOIF)
[code]define di_allesAusBeiAbwesend DOIF ([BinIchDa] eq "absent") \
(set TVLICHT_hinten off,\
set TVLICHT_vorne off,\
und so weiter......)
[/code]

Momentan habe ich da echt einen Knoten im Hirn.
Waitdel könnte der richtige Ansatz sein, trotzdem sehe ich die Lösung nicht.
Wie bekomme ich die Sicherheitsabfrage dazwischen?
Wäre für Hilfe echt dankbar.
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 30 Januar 2015, 06:35:23
Guten Morgen Invers,
Ich glaube ich habe einen ähnlichen anwendungsfall bereits in meiner config, Damian half mir damals dabei - aber schau selbst...

DEF=
Zitat
([pl_soBad] eq "on") (
IF ([pr_soBad] eq "present")
   (IF ([player:config] eq "auto") (set sonos_Bad Volume 12,
   set sonos_Wohnzimmer AddMember sonos_Bad, attr pr_soBad disable 1,
   set EntertainmentEvents add Bad Lautsprecher im Automatikmode angeschaltet und zur Wohnzimmer Wiedergabe hinzugefügt...)
   ELSE (set EntertainmentEvents add Der Bad Lautsprecher ist im Sonossystem zur Wiedergabe bereit...,
   attr pr_soBad disable 1)
   )
ELSE
   (set pl_soBad off,set EntertainmentEvents add Netzwerkeinbindung missglückt - ich versuche den Player neu zu starten.,
   define at_pl_soBad at +00:00:05 set pl_soBad on)
)
Dazu die attribute wait und do always...

Es ist also ein geschachtel mit IF.
Als eingangsbedingung nimmst du deinen abwesend Trigger, wait time sollte die zeit sein die du dir selbst gibst einen tastendruck auszulösen.
Sollte während der wait Time nicht der Tastendruck ausgelöst werden springt das konstruckt in den unteren ELSE zweig - in meinem fall der mit dem timer, dort solltest du dann alles ausschalten.
Das zweite IF konstrukt brauchst du wahrscheinlich gar nicht, bei mir wird in diesem fall anhand von player:config entschieden ob sich der player automatisch gruppieren soll - oder ob er sich als standalone ins sonos netz integriert.
Also das zweite if weglassen und dort deinen vorgang für anwesed trotz presence absent schalten.
Deine tts ausgabe mit der aufforderung eine taste zu drücken solltest du seperat auslösen.
In meinem Fall ist pl_ ein aktor (plug), pr_ ein presence Device, sonos ein player und EntertainmentEvents ein readingshistory als userlog.

Die möglichkeit in den ausführungsteile ein IF zu integrieren eröffnet allerdings auch neue Möglichkeiten für gebastel ;-)

Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 30 Januar 2015, 07:30:40
Zitat von: Damian am 29 Januar 2015, 21:45:26
Das ist ganz einfach. Durch das define ... triggert global. Da es in der ersten Bedingung vorkommt, wird diese ausgewertet. global ist zwar nicht initialized dafür ist aber dein or-Fall  mit [du_Zeit] wahr und das führt zu cmd1.

Edit: Zukünftig wird man unabhängige Ereignisse bei DOIF angeben können (steht bereits auf der todo-Liste im ersten Post). Das wird dann in diesem Fall so aussehen:

define di_SetTime DOIF ([global:?initialized])|([du_Zeit]) (modify di_Rollo [di_Rollo:&DEF])

Damit wird man solche Abhängigkeiten in den Griff bekommen.

Gruß

Damian
Kann es sein, dass das global auch noch durch andere Dinge getriggert wird?
Denn wie gesagt. Ich lungerte auf dem Sofa rum und auf einmal klackten die Aktoren alle willkürlich rum.
In unterschiedlichen Zeitintervallen.

Ich vermute da mal in der Tat das global:?initialized.
Denn wenn das raus ist, ist ruhe.
Nur was kann das noch alles initiieren?

Aber wenn es auf deinem ToDo Zettel steht ist es ja nur eine Frage der Zeit. :)

Danke schon mal dafür.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Januar 2015, 09:27:47
Zitat von: maxritti am 30 Januar 2015, 07:30:40
Kann es sein, dass das global auch noch durch andere Dinge getriggert wird?
ja, siehe mein letzter Beitrag

ZitatIch vermute da mal in der Tat das global:?initialized.
nein, siehe mein letzter Beitrag

ZitatDenn wenn das raus ist, ist ruhe.
ist logisch

ZitatNur was kann das noch alles initiieren?
hier gibt es nichts, was initialisiert

ZitatAber wenn es auf deinem ToDo Zettel steht ist es ja nur eine Frage der Zeit. :)

Kommt, sobald ich einen Tag Zeit habe.

Du kommst aber auch ohne aus:

define di_SetTime DOIF ([global:?initialized] or [du_Zeit:?]) (modify di_Rollo [di_Rollo:&DEF])

ZitatDanke schon mal dafür.

Bitte schön.


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 30 Januar 2015, 13:35:20
Irgendwie habe ich immer mehr ? vor der Stirn stehen.  ;)

Heisst das nun, dass ich bei allen Dummys, welche in meinem di_Rollo_SetTime abgefragt werden das :? einfügen sollte?
Das hat dann aber zur Folge, dass das DOIF gar nicht mehr reagiert.
Also wenn ich eine Zeit eines Dummys ändere, andern sich die DEFs der DOIFs nicht mehr.
Das wäre aber der eigentliche Sinn gewesen.

Internals:
   CFGFN
   DEF        ([global:?initialized] or [du_Rollo_Zeit_ho:?] or [du_Rollo_Zeit_ho_WE:?] or [du_Rollo_Luminosity_ru:?] or [du_Rollo_Zeit_ru_start:?] or [du_Rollo_Zeit_ru_ende]:?) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF])
   NAME       di_Rollo_SetTime
   NR         106
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-01-30 13:33:39   e_du_Rollo_Luminosity_ru_events 0.92
     2015-01-30 13:33:50   e_du_Rollo_Zeit_ho_events 06:35
     2015-01-30 13:33:17   e_global_events MODIFIED di_Rollo_SetTime
     2015-01-30 13:33:50   error           perl error in condition: EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or EventDoIf('du_Rollo_Zeit_ho',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ho_WE',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Luminosity_ru',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ru_start',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or InternalDoIf('du_Rollo_Zeit_ru_ende','STATE',''):?: Search pattern not terminated or ternary operator parsed as search pattern at (eval 23168) line 1.

     2015-01-30 13:33:17   state           initialized
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or EventDoIf('du_Rollo_Zeit_ho',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ho_WE',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Luminosity_ru',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ru_start',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or InternalDoIf('du_Rollo_Zeit_ru_ende','STATE',''):?
   Devices:
     0           global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev du_Rollo_Zeit_ho
     triggerEvents:
       06:35
   Internals:
     0           du_Rollo_Zeit_ru_ende:STATE
     all         du_Rollo_Zeit_ru_ende:STATE
   Readings:
   State:
   Timerfunc:
   Trigger:
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start
Attributes:
   do         always
   room       LichtRollo
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 30 Januar 2015, 14:43:01
Zitat von: der-Lolo am 30 Januar 2015, 06:35:23
Guten Morgen Invers,
Ich glaube ich habe einen ähnlichen anwendungsfall bereits in meiner config, Damian half mir damals dabei - aber schau selbst...

DEF=Dazu die attribute wait und do always...

Es ist also ein geschachtel mit IF.
Als eingangsbedingung nimmst du deinen abwesend Trigger, wait time sollte die zeit sein die du dir selbst gibst einen tastendruck auszulösen.
Sollte während der wait Time nicht der Tastendruck ausgelöst werden springt das konstruckt in den unteren ELSE zweig - in meinem fall der mit dem timer, dort solltest du dann alles ausschalten.
Das zweite IF konstrukt brauchst du wahrscheinlich gar nicht, bei mir wird in diesem fall anhand von player:config entschieden ob sich der player automatisch gruppieren soll - oder ob er sich als standalone ins sonos netz integriert.
Also das zweite if weglassen und dort deinen vorgang für anwesed trotz presence absent schalten.
Deine tts ausgabe mit der aufforderung eine taste zu drücken solltest du seperat auslösen.
In meinem Fall ist pl_ ein aktor (plug), pr_ ein presence Device, sonos ein player und EntertainmentEvents ein readingshistory als userlog.

Die möglichkeit in den ausführungsteile ein IF zu integrieren eröffnet allerdings auch neue Möglichkeiten für gebastel ;-)


Vielen Dank, das funktioniert soweit eitgentlich (fast). Ich habe mir zum Test folgendes geschrieben:

define DI_Test DOIF ([Lampe_Korridor] eq "on")
(
IF ([Taster_unten] =~ "Short")
   (set MyTTS tts Alle Handys offline!)
   
ELSE
   (set Lampe_Korridor off)
)

attr DI_Test do always
attr DI_Test wait 20


Das funktioniert so lange, bis erstmalig die Taste kurz gedrückt wurde. Danach geht es nicht mehr, weil sich der Taster offenbar den Zustand merkt und bei Anfrage immer wieder zurückgibt. Es handelt sich um einen HM-PB-2-WM55-2.
Das bedeutet, dass es erst wieder geht, wenn der Taster zwischendurch einmal lang gedrückt wurde.
Kann man das irgendwie korrigieren? Falls nicht, müsste ich mir einen Dummy bauen.


EDIT: Sorry, hatte den falschen Code gepostet. Habe noch einmal korrigiert.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Januar 2015, 16:38:05
Zitat von: maxritti am 30 Januar 2015, 13:35:20
Irgendwie habe ich immer mehr ? vor der Stirn stehen.  ;)

Heisst das nun, dass ich bei allen Dummys, welche in meinem di_Rollo_SetTime abgefragt werden das :? einfügen sollte?
Das hat dann aber zur Folge, dass das DOIF gar nicht mehr reagiert.

Du verwechselst [?Device] mit [Device:?]. Das erste ist für reine Abfrage ohne Trigger, das andere ist ein reiner Trigger auf alles vom Device.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Januar 2015, 16:54:06
Zitat von: Invers am 30 Januar 2015, 14:43:01

Vielen Dank, das funktioniert soweit eitgentlich (fast). Ich habe mir zum Test folgendes geschrieben:

define DI_Test DOIF ([Lampe_Korridor] eq "on")
(
IF ([Taste_unten])
   (set MyTTS tts Alle Handys offline!)
   
ELSE
   (set Lampe_Korridor off)
)

attr DI_Test do always
attr DI_Test wait 20


Das funktioniert so lange, bis erstmalig die Taste kurz gedrückt wurde. Danach geht es nicht mehr, weil sich der Taster offenbar den Zustand merkt und bei Anfrage immer wieder zurückgibt. Es handelt sich um einen HM-PB-2-WM55-2.
Das bedeutet, dass es erst wieder geht, wenn der Taster zwischendurch einmal lang gedrückt wurde.
Kann man das irgendwie korrigieren? Falls nicht, müsste ich mir einen Dummy bauen.


dann eher:

define di_allesAusMeldung DOIF ([BinIchDa] eq "absent")
   (set MyTTS tts Alle Handys offline!)

attr di_allesAusMeldung do always


define di_allesAusBeiAbwesend DOIF ([BinIchDa] eq "absent")
   (set TVLICHT_hinten off,  set TVLICHT_vorne off,...)
DOELSEIF ([Taste_unten])

attr di_allesAusBeiAbwesend 20
attr di_allesAusBeiAbwesend do always


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 30 Januar 2015, 18:24:15
Vielen Dank, Damian.
Funktioniert absolut genial, zumal das Problem mit dem Taster gar nicht mehr zum Tragen kommt. Es ist egal, ob ich kurz oder lang drücke, es geht so oder so.
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 30 Januar 2015, 21:43:58
Zitat von: Damian am 30 Januar 2015, 16:38:05
Du verwechselst [?Device] mit [Device:?]. Das erste ist für reine Abfrage ohne Trigger, das andere ist ein reiner Trigger auf alles vom Device.

Gruß

Damian

Du magst recht haben, dass ich hier noch einiges durcheinander werfe.
Ich versuche allerdings die Tips von Dir auch zu verstehen.
Gelingt mir wohl nicht wirklich.  ???

Aber ich glaube, dass ich es nun auch dran gebe mit meiner Konstellation.
Wobei ich die doch eigentlich gar nicht so abwägig und komplex sehe.

Ich habe Dummys, wo ich Eingaben mache, welche als Grundlage für DOIFs gelten sollen.
Diese Werte der Dummys sollen bei Änderungen in die DEF des DOIFs übermittelt werden.
Und als I-Tüpfelchen sollten die DOIFs auch nach einem Neustart von FHEM die korrekte Timer aus den Dummys beinhalten.

Das DOIF, welches für die korrekte Aktualisierung dienen sollte sieht derzeit so aus:

Internals:
   CFGFN
   DEF        ([global:?initialized] or [du_Rollo_Zeit_ho:?] or [du_Rollo_Zeit_ho_WE:?] or [du_Rollo_Luminosity_ru:?] or [du_Rollo_Zeit_ru_start:?] or [du_Rollo_Zeit_ru_ende:?]) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF])
   NAME       di_Rollo_SetTime
   NR         106
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-30 21:35:22   cmd_event       global
     2015-01-30 21:35:22   cmd_nr          2
     2015-01-30 18:57:31   e_du_Rollo_Luminosity_ru_events 0.9
     2015-01-30 18:57:38   e_du_Rollo_Zeit_ho_events 06:35
     2015-01-30 21:35:22   e_global_events ATTR myDashboard_weblink room DashboardRoom
     2015-01-30 21:35:22   state           cmd_2
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or EventDoIf('du_Rollo_Zeit_ho',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ho_WE',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Luminosity_ru',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ru_start',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ru_ende',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'')
   Devices:
     0           global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev global
     triggerEvents:
       ATTR myDashboard_weblink room DashboardRoom
   Internals:
   Readings:
   State:
   Trigger:
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
Attributes:
   do         always
   room       LichtRollo


Ich meine das so Deinen Hinweisen entnommen zu haben, dass damit das erwähnt funktionieren sollte.

Jetzt ist es allerdings wieder so, dass zwar nach einer Eingabeänderung der Dummys die DOIFs korrekte Timer beinhalten, aber nach einem Restart von FHEM wieder die Default Werte, welche von ReadingsVal(...) geliefert werden.

Hoer noch mal ein DOIF, welches einen Rolladen steuert und mittels ReadingsVal(...) Werte aus einem Dummy nutzen soll.

Internals:
   CFGFN
   DEF        ([du_Rollo_Master] eq "an" and ([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and [du_Rollo_Art] ne "Weihnachten" and [{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "22:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}]) or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}])
  (set EG_ku_RO_StrasseLinks off)
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "10:00:00")}|8] or [{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "10:00:00")}|7]))
  (set EG_ku_RO_StrasseLinks on)
   NAME       di_EG_ku_RO_StrasseLinks
   NR         107
   NTFY_ORDER 50-di_EG_ku_RO_StrasseLinks
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-30 21:40:00   cmd_event       timer_3
     2015-01-30 21:40:00   cmd_nr          1
     2015-01-30 21:40:00   state           cmd_1
     2015-01-30 21:39:18   timer_1_c1      31.01.2015 16:15:00
     2015-01-30 21:40:00   timer_2_c1      31.01.2015 21:40:00
     2015-01-30 21:40:00   timer_3_c1      31.01.2015 21:40:00
     2015-01-30 21:39:18   timer_4_c2      31.01.2015 06:35:00|8
     2015-01-30 21:39:18   timer_5_c2      31.01.2015 09:30:00|7
   Condition:
     0          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (ReadingValDoIf('EG_dr_TS_Terrasse','luminosity','') < InternalDoIf('du_Rollo_Luminosity_ru','STATE','') and InternalDoIf('du_Rollo_Art','STATE','') ne "Weihnachten" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")) or DOIF_time_once($hash->{timer}{2},$wday,"")
     1          InternalDoIf('du_Rollo_Master','STATE','') eq "an" and (DOIF_time_once($hash->{timer}{3},$wday,"8") or DOIF_time_once($hash->{timer}{4},$wday,"7"))
   Days:
     3          8
     4          7
   Devices:
     0           du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru du_Rollo_Art
     1           du_Rollo_Master
     all         du_Rollo_Master EG_dr_TS_Terrasse du_Rollo_Luminosity_ru du_Rollo_Art
   Do:
     0          set EG_ku_RO_StrasseLinks off
     1          set EG_ku_RO_StrasseLinks on
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Art:STATE
     1           du_Rollo_Master:STATE
     all         du_Rollo_Master:STATE du_Rollo_Luminosity_ru:STATE du_Rollo_Art:STATE
   Readings:
     0           EG_dr_TS_Terrasse:luminosity
     all         EG_dr_TS_Terrasse:luminosity
   Realtime:
     0          16:15:00
     1          21:40:00
     2          21:40:00
     3          06:35:00
     4          09:30:00
   State:
   Time:
     0          {ReadingsVal("du_Rollo_Zeit_ru_start", "state", "22:00:00")}
     1          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}
     2          {ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}
     3          {ReadingsVal("du_Rollo_Zeit_ho", "state", "10:00:00")}
     4          {ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "10:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
Attributes:
   room       LichtRollo


Eventuell magst Du mir in Sachen "DOIF für Dummies" weiterhelfen?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Januar 2015, 21:59:53
Zitat von: maxritti am 30 Januar 2015, 21:43:58

Jetzt ist es allerdings wieder so, dass zwar nach einer Eingabeänderung der Dummys die DOIFs korrekte Timer beinhalten, aber nach einem Restart von FHEM wieder die Default Werte, welche von ReadingsVal(...) geliefert werden.

Dann stimmt da sonst noch was nicht.  Nach deiner Aussage:

http://forum.fhem.de/index.php/topic,23833.msg253494.html#msg253494

funktioniert bei dir beim Neustart:

DOIF ([global:?initialized]) (modify...

und wenn das funktioniert, dann muss beim Neustart auch das funktionieren:

DOIF ([global:?initialized] or [irgendeindevice:?] or...) (modify...

Ansonsten weiß ich auch nicht weiter an dieser Stelle.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 30 Januar 2015, 22:11:27
Tjo,

ich verstehe es wie gesagt auch nicht mehr.

Noch mal ein letzter Versuch, vielleicht bringt uns das noch in die richtige Richtung:

Nach einem Shutdown und Serviceneustart von FHEM steht in dem DOIF dies hier:
Wie kann denn da auf einmal was von einem Dashboardweblink drin stehen?
Wie gesagt, wenn Dir dazu nichts einfällt, dann bin ich erst mal ruhig. Versprochen  ;)

ZitatInternals:
   CFGFN
   DEF        ([global:?initialized] or [du_Rollo_Zeit_ho:?] or [du_Rollo_Zeit_ho_WE:?] or [du_Rollo_Luminosity_ru:?] or [du_Rollo_Zeit_ru_start:?] or [du_Rollo_Zeit_ru_ende:?]) (modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF])
   NAME       di_Rollo_SetTime
   NR         106
   NTFY_ORDER 50-di_Rollo_SetTime
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-01-30 22:07:46   cmd_event       global
     2015-01-30 22:07:46   cmd_nr          2
     2015-01-30 21:39:18   e_du_Rollo_Luminosity_ru_events 0.91
     2015-01-30 18:57:38   e_du_Rollo_Zeit_ho_events 06:35
     2015-01-30 22:07:46   e_global_events ATTR myDashboard_weblink room DashboardRoom
     2015-01-30 22:07:46   state           cmd_2
   Condition:
     0          EventDoIf('global',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'initialized') or EventDoIf('du_Rollo_Zeit_ho',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ho_WE',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Luminosity_ru',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ru_start',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'') or EventDoIf('du_Rollo_Zeit_ru_ende',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'')
   Devices:
     0           global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
   Do:
     0          modify di_EG_ku_RO_StrasseLinks [di_EG_ku_RO_StrasseLinks:&DEF], modify di_EG_ku_RO_StrasseRechts [di_EG_ku_RO_StrasseRechts:&DEF], modify di_EG_wz_RO_Carport [di_EG_wz_RO_Carport:&DEF], modify di_EG_wz_RO_TerrasseLinks [di_EG_wz_RO_TerrasseLinks:&DEF], modify di_EG_wz_RO_TerrasseRechts [di_EG_wz_RO_TerrasseRechts:&DEF], modify di_OG_elt_RO_Strasse [di_OG_elt_RO_Strasse:&DEF], modify di_OG_ki1_RO_Carport [di_OG_ki1_RO_Carport:&DEF], modify di_OG_ki1_RO_Garten [di_OG_ki1_RO_Garten:&DEF], modify di_OG_ki2_RO_Garten [di_OG_ki2_RO_Garten:&DEF]
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev global
     triggerEvents:
       ATTR myDashboard_weblink room DashboardRoom
   Internals:
   Readings:
   State:
   Trigger:
     all         global du_Rollo_Zeit_ho du_Rollo_Zeit_ho_WE du_Rollo_Luminosity_ru du_Rollo_Zeit_ru_start du_Rollo_Zeit_ru_ende
Attributes:
   do         always
   room       LichtRollo
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Januar 2015, 22:24:15
Zitat von: maxritti am 30 Januar 2015, 22:11:27
Tjo,

ich verstehe es wie gesagt auch nicht mehr.

Noch mal ein letzter Versuch, vielleicht bringt uns das noch in die richtige Richtung:

Nach einem Shutdown und Serviceneustart von FHEM steht in dem DOIF dies hier:
Wie kann denn da auf einmal was von einem Dashboardweblink drin stehen?
Wie gesagt, wenn Dir dazu nichts einfällt, dann bin ich erst mal ruhig. Versprochen  ;)


Das ist ganz normal. 

In e_global_events stehen die letzten Events von global.

Wie du vorhin schon feststellen konntest, triggert global nicht nur beim Neustart mit "initialized", sondern offenbar bei jeder Definition, Modifikation und sonst was in fhem. Beim Neustart werden ca. "tausend" Dinge definiert, deswegen wird auch dein DOIF ca. "tausend" mal getriggert, was ja nicht schlimm ist, denn es reagiert ja nur auf "initalized" mit cmd1. cmd2 ist der interne Sonstfall der bei dir nicht definiert wurde.

Das Problem war aber die Tatsache, das die Readings jetzt nicht übernommen wurden und das kann ich nicht erklären - es sei denn du hast vor dem shutdown nicht save gemacht.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 30 Januar 2015, 23:50:45
So, ich habe bei mir die Sache nachgestellt, mit:

DEF        ([{ReadingsVal("test_d","state","00:00")}])(set bla on)
   NAME       di_test
   NR         374
   NTFY_ORDER 50-di_test
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-01-30 23:38:45   state           initialized
     2015-01-30 23:38:45   timer_1_c1      31.01.2015 15:00:00


und

DEF        ([global:?INITIALIZED] or [test_d:?])(modify di_test [di_test:&DEF])
   NAME       di_init
   NR         375
   NTFY_ORDER 50-di_init
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-30 23:38:45   cmd_event       global
     2015-01-30 23:38:45   cmd_nr          1
     2015-01-30 23:38:45   e_global_events INITIALIZED
     2015-01-30 23:37:53   e_test_d_events 15:00
     2015-01-30 23:38:45   state           cmd_1


funktioniert alles wie gewünscht, sowohl "set test_d 15:00" als auch Neustart führen zum korrekten Setzen der Zeit bei di_test.

Du musst bei [global:?INITIALIZED] Großbuchstaben verwenden.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: maxritti am 31 Januar 2015, 18:07:51
Tausend Dank Damian für Deine Geduld und Erklärungen.

In der Tat sieht es bis jetzt sehr gut aus.
Die Rollos gehen runter wenn sie sollen. Die Aktoren klacken auch nicht mehr. Zumindest seit einer Stunde ist ruhe.
Und nach einem Reboot stehen die korrekten Timer drin.

Ich gebe Dir mal ein virtuelles Bier aus (http://www.smilies.4-user.de/include/Trinken/smilie_trink_060.gif)
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 31 Januar 2015, 23:57:35
Ich klinke mich jetzt mal hier mit ein. Vor einigen Tagen hatte ich bei den Anfängerfragen berichtet, dass DOIF manchmal bei mir nicht anspricht.
(siehe http://forum.fhem.de/index.php/topic,33019.0.html (http://forum.fhem.de/index.php/topic,33019.0.html))
Jetzt habe ich einen weiteren Fall. Die Anweisung lautet:


define DI_WM DOIF ([WasserKeller] =~ "off" and [04:00] and [WM_4Uhr] eq "on") (set Waschmaschine on-for-timer 11264,define WA4 at +03:00 set WM_4Uhr off) DOELSEIF ([WasserKeller] =~ "off" and [16:00] and [WM_16Uhr] eq "on") (set Waschmaschine on-for-timer 11264,define WA16 at +03:00 set WM_16Uhr off)


WM_4Uhr und WM_16Uhr sind auf eine FS20-Fernbedienung eingestellt. WasserKeller ist ein Wassermelder und meldet im Normalfall "Water Detect: off".

Heute morgen habe ich WM_16Uhr auf der Fernbedienung gedrückt. Aber um 16 Uhr ist absolut nichts passiert und es gibt keinen Eintrag im Log.


Ich hatte das zum Test mal einen Tag laufen lassen und es hat funktioniert. Heute nun habe ich leider erlebt, dass
Titel: Antw:neues Modul DOIF
Beitrag von: KernSani am 01 Februar 2015, 01:08:25
Ich begebe mich auf dünnes Eis, da ich DOIF zwar verwende aber sicher kein Experte bin... Meinem Verständnis nach funktioniert dein DOELSEIF-Zweig nur, wenn es 16:00 Uhr ist und de entsprechenden Events für WasserKeller und WM_16Uhr eintreten. Das wird wohl kaum der Fall sein. Für reine Statusabfragen gibt's das ? - siehe commandref.

Grüße,

Oli
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 01 Februar 2015, 09:58:22
Werd' ich probieren. Seltsam nur, dass es im Testlauf dann zufällig gerade immer funktionierte. Allerdings kann es schon sein, dass ich da gerade zum Test die richtigen Bedingungen geschaffen habe.

Besten Dank
Titel: Antw:neues Modul DOIF
Beitrag von: Aarghh am 01 Februar 2015, 12:33:02
Moin Moin,

ich habe jetzt lange probiert, getestet und evaluiert. Und anscheinend triggert DOIF bei mir bei jeder Änderung des GEOFANCY Moduls. Egal wer grade wo ankommt oder weggeht.
Kann natürlich auch ein Fehler der Implementierung von GEOFANCY, Denkfehler meinerseits oder vielleicht ja auch so gewollt sein, ich versuch es erstmal hier, weil ein notify korrekt funktioniert. Zum Versuchsaufbau:  ;)

DOIF:
define do_PERSON2_Status DOIF ([geofancy:PERSON2] =~ "left ORT" and [?do_PERSON2_Status] eq "anwesend") (...)

NOTIFY (funktioniert):
geofancy.*PERSON2.* set push msg 'Test' 'notify durch geofancy ausgelöst' 'Mich' 0 ''

Wenn jetzt eine ANDERE Person einen Ort verlässt oder betritt, wird das DOIF von PERSON2 getriggert. Die betreffenden Readings für PERSON2 sind zu dem Moment zutreffend:

  geofancy:PERSON2  = left Ort1
  do_PERSON2_Status = anwesend

sollten aber ja nicht ausgewertet werden(,oder?), da PERSON2 sich "nicht bewegt" hat und damit kein Event für diese Readings vom GEOFANCY Modul ausgelöst wurde. Events von do_PERSON2_Status sollten durch das ? ja eh nicht beachtet werden, richtig?

Riecht also alles nach nem Problem von GEOFANCY dachte ich. (Leider) hat ein test Notify korrekt funktioniert und triggert nur bei Bewegungen von PERSON2.

Also, hab ich was falsch verstanden? Oder funktioniert hier was nicht so, wie es soll?

Schönen Gruß,

    Alex
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 01 Februar 2015, 14:13:07
Zitat von: Aarghh am 01 Februar 2015, 12:33:02
Moin Moin,

ich habe jetzt lange probiert, getestet und evaluiert. Und anscheinend triggert DOIF bei mir bei jeder Änderung des GEOFANCY Moduls. Egal wer grade wo ankommt oder weggeht.
Kann natürlich auch ein Fehler der Implementierung von GEOFANCY, Denkfehler meinerseits oder vielleicht ja auch so gewollt sein, ich versuch es erstmal hier, weil ein notify korrekt funktioniert. Zum Versuchsaufbau:  ;)

DOIF:
define do_PERSON2_Status DOIF ([geofancy:PERSON2] =~ "left ORT" and [?do_PERSON2_Status] eq "anwesend") (...)

NOTIFY (funktioniert):
geofancy.*PERSON2.* set push msg 'Test' 'notify durch geofancy ausgelöst' 'Mich' 0 ''

Wenn jetzt eine ANDERE Person einen Ort verlässt oder betritt, wird das DOIF von PERSON2 getriggert. Die betreffenden Readings für PERSON2 sind zu dem Moment zutreffend:

  geofancy:PERSON2  = left Ort1
  do_PERSON2_Status = anwesend

sollten aber ja nicht ausgewertet werden(,oder?), da PERSON2 sich "nicht bewegt" hat und damit kein Event für diese Readings vom GEOFANCY Modul ausgelöst wurde. Events von do_PERSON2_Status sollten durch das ? ja eh nicht beachtet werden, richtig?

Riecht also alles nach nem Problem von GEOFANCY dachte ich. (Leider) hat ein test Notify korrekt funktioniert und triggert nur bei Bewegungen von PERSON2.

Also, hab ich was falsch verstanden? Oder funktioniert hier was nicht so, wie es soll?

Schönen Gruß,

    Alex

dann musst du wie bei notify auf das Ereigniss triggern:

define do_PERSON2_Status DOIF ([geofancy:?PERSON2] and [?do_PERSON2_Status] eq "anwesend") (...)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 02 Februar 2015, 08:44:12
Zitat von: KernSani am 01 Februar 2015, 01:08:25
Ich begebe mich auf dünnes Eis, da ich DOIF zwar verwende aber sicher kein Experte bin... Meinem Verständnis nach funktioniert dein DOELSEIF-Zweig nur, wenn es 16:00 Uhr ist und de entsprechenden Events für WasserKeller und WM_16Uhr eintreten. Das wird wohl kaum der Fall sein. Für reine Statusabfragen gibt's das ? - siehe commandref.

Grüße,

Oli

Das scheint es gewesen zu sein.
Titel: Antw:neues Modul DOIF
Beitrag von: Aarghh am 02 Februar 2015, 12:42:33
Ahhh, ohhh, aha!
..und es hat klick gemacht! Wieso bin ich da noch nie vorher gegengelaufen?
Auf jeden Fall 1000 Dank für das bestimmt 100 mal Beantworten genau dieser Frage! ;)

Gruß, Alex
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Februar 2015, 13:12:42
Zitat von: Aarghh am 02 Februar 2015, 12:42:33
Ahhh, ohhh, aha!
..und es hat klick gemacht! Wieso bin ich da noch nie vorher gegengelaufen?
Auf jeden Fall 1000 Dank für das bestimmt 100 mal Beantworten genau dieser Frage! ;)

Gruß, Alex

Dass man nach reinen Ereignissen mit regulären Ausdrücken triggern kann, wie beim notify, ist nicht selbstverständlich. Diese Funktionalität mit Fragezeichen wurde erst in den letzten Versionen von DOIF eingebaut (und in der Doku aufgenommen).

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Februar 2015, 22:21:09
Hallo,
habe gerade einen Hänger!

Will in einem DOIF ein Dummy Device abfragen.
([Test.dum] = 10) (set Test on)
DOELSE (set Test off)

funktioniert nicht, wenn Test.dum auf 10 gesetzt wird.
allerdings funzt dies hier korrekt.
([Test.dum] < 10) (set Test on)
DOELSE (set Test off)


Wie frage ich denn auf Gleichheit ab?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 02 Februar 2015, 22:24:04
Zitat von: Spartacus am 02 Februar 2015, 22:21:09
Hallo,
habe gerade einen Hänger!

Will in einem DOIF ein Dummy Device abfragen.
([Test.dum] = 10) (set Test on)
DOELSE (set Test off)

funktioniert nicht, wenn Test.dum auf 10 gesetzt wird.
allerdings funzt dies hier korrekt.
([Test.dum] < 10) (set Test on)
DOELSE (set Test off)


Wie frage ich denn auf Gleichheit ab?
Christian

mit: ==

bei Zeichenketten: eq

So etwas steht aber in der Commandref zu DOIF.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Februar 2015, 22:31:22
Hi Damian,
Mit == funzt bei diesem Bsp. auch nicht! Sorry hatte vergessen es zu erwähnen!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 02 Februar 2015, 22:34:04
Damian,
Vergiss es! Ich hatte ein Leerzeichen vergessen.
Geht jetzt!
Danke,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: FunkOdyssey am 02 Februar 2015, 23:08:58
Zitat von: Damian am 30 Januar 2015, 23:50:45
So, ich habe bei mir die Sache nachgestellt, mit:

DEF        ([{ReadingsVal("test_d","state","00:00")}])(set bla on)
   NAME       di_test
   NR         374
   NTFY_ORDER 50-di_test
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-01-30 23:38:45   state           initialized
     2015-01-30 23:38:45   timer_1_c1      31.01.2015 15:00:00


und

DEF        ([global:?INITIALIZED] or [test_d:?])(modify di_test [di_test:&DEF])
   NAME       di_init
   NR         375
   NTFY_ORDER 50-di_init
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-01-30 23:38:45   cmd_event       global
     2015-01-30 23:38:45   cmd_nr          1
     2015-01-30 23:38:45   e_global_events INITIALIZED
     2015-01-30 23:37:53   e_test_d_events 15:00
     2015-01-30 23:38:45   state           cmd_1


funktioniert alles wie gewünscht, sowohl "set test_d 15:00" als auch Neustart führen zum korrekten Setzen der Zeit bei di_test.

Du musst bei [global:?INITIALIZED] Großbuchstaben verwenden.

Gruß

Damian

Ich habe eure Diskussion verfolgt, da ich ähnliches vorhab. Darum habe ich euren Tipp nun ausprobiert und folgenden Code im Einsatz:


auto_jal_master] eq "ja")
  (attr di_auto_jal_1 disable 0)
DOELSEIF
([auto_jal_master] eq "nein")
  (attr di_auto_jal_1 disable 1)
DOELSEIF
(
[auto_jal_time_workday]
or [auto_jal_time_weekend]
or [auto_jal_time_close_min]
or [auto_jal_time_close_max]
or [global:?INITIALIZED]
)
  (modify di_auto_jal_1 [di_auto_jal_1:&DEF])


Hier ist mir jedoch nun aufgefallen, dass Readings sekündlich aktualisiert werden. Die Uhrzeiten bei den Readings sind somit immer rot. Außerdem füllt sich die Liste der "10 letzten Änderungen" (?-Symbol beim Save config-Button) mit Massen an Änderungen.

Hat jemand einen Tipp, woran das liegt?
Oder bracht ihr auch den anderen Code rund um die Dummys und der DOIFs?
Ich habe die Zeile mit dem [global:?INITIALIZED] erst einmal wieder entfernt. Daher kann ich den Fehler auch gerade schlecht beschreiben.
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 03 Februar 2015, 08:02:34
Zitat von: duke-f am 02 Februar 2015, 08:44:12
Das scheint es gewesen zu sein.

Hab' mich zu früh gefreut. Nachdem ich alles auf folgende Art geändert habe, ging gestern früh das Radio wie gewollt an, heute jedoch wieder nicht. :(

Jetzt ist das entsprechende DOIF so:

define Wecker dummy
attr Wecker group Wecker
attr Wecker room Kinderzimmer,Medien,Wecker
attr Wecker setList state:off,normal,Cottbus
attr Wecker webCmd state


define Radio_Wecker DOIF ([06:57|8] and [?Wecker] eq "normal") (set Panasonic on,set Pumpe_Hz on-for-timer 180) DOELSEIF ([05:58] and [?Wecker] eq "Cottbus") (set Pumpe_Hz on-for-timer 180,set Panasonic on,set Wecker normal,define Pana_Cottbus at 07:05 set Panasonic off)


EDIT:
Ich vergaß zu erwähnen: Im Log gibt es um 6:57 keinen Eintrag.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Februar 2015, 11:04:10
Zitat von: duke-f am 03 Februar 2015, 08:02:34
Hab' mich zu früh gefreut. Nachdem ich alles auf folgende Art geändert habe, ging gestern früh das Radio wie gewollt an, heute jedoch wieder nicht. :(

Jetzt ist das entsprechende DOIF so:

define Wecker dummy
attr Wecker group Wecker
attr Wecker room Kinderzimmer,Medien,Wecker
attr Wecker setList state:off,normal,Cottbus
attr Wecker webCmd state


define Radio_Wecker DOIF ([06:57|8] and [?Wecker] eq "normal") (set Panasonic on,set Pumpe_Hz on-for-timer 180) DOELSEIF ([05:58] and [?Wecker] eq "Cottbus") (set Pumpe_Hz on-for-timer 180,set Panasonic on,set Wecker normal,define Pana_Cottbus at 07:05 set Panasonic off)


EDIT:
Ich vergaß zu erwähnen: Im Log gibt es um 6:57 keinen Eintrag.

Dann poste hier die Ausgabe von:  list Radio_Wecker

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 03 Februar 2015, 11:25:26
Zitat von: Damian am 03 Februar 2015, 11:04:10
Dann poste hier die Ausgabe von:  list Radio_Wecker

Gruß

Damian

Aber gerne doch.

Radio_Wecker

Internals:
   DEF        ([06:57|8] and [?Wecker] eq "normal") (set Panasonic on,set Pumpe_Hz on-for-timer 180) DOELSEIF ([05:58] and [?Wecker] eq "Cottbus") (set Pumpe_Hz on-for-timer 180,set Panasonic on,set Wecker normal,define Pana_Cottbus at 07:05 set Panasonic off)
   NAME       Radio_Wecker
   NR         542
   NTFY_ORDER 50-Radio_Wecker
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-02-02 06:57:00   cmd_event       timer_1
     2015-02-02 06:57:00   cmd_nr          1
     2015-02-02 06:57:00   state           cmd_1
     2015-02-03 06:57:00   timer_1_c1      04.02.2015 06:57:00|8
     2015-02-03 05:58:00   timer_2_c2      04.02.2015 05:58:00
   Condition:
     0          DOIF_time_once($hash->{timer}{0},$wday,"8") and InternalDoIf('Wecker','STATE','') eq "normal"
     1          DOIF_time_once($hash->{timer}{1},$wday,"") and InternalDoIf('Wecker','STATE','') eq "Cottbus"
   Days:
     0          8
   Devices:
   Do:
     0          set Panasonic on,set Pumpe_Hz on-for-timer 180
     1          set Pumpe_Hz on-for-timer 180,set Panasonic on,set Wecker normal,define Pana_Cottbus at 07:05 set Panasonic off
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Readings:
   Realtime:
     0          06:57:00
     1          05:58:00
   State:
   Time:
     0          06:57:00
     1          05:58:00
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0
     1           1
Attributes:
   group      Wecker
   room       Kinderzimmer,Wecker


und Wecker:

Internals:
   NAME       Wecker
   NR         540
   STATE      normal
   TYPE       dummy
   Readings:
     2015-01-31 15:18:17   state           normal
Attributes:
   group      Wecker
   room       Kinderzimmer,Medien,Wecker
   setList    state:off,normal,Cottbus
   webCmd     state
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 03 Februar 2015, 12:44:31
Zitat von: duke-f am 03 Februar 2015, 11:25:26
Radio_Wecker

Das DOIF ändert innerhalb der Woche seinen Status nie (sofern sich Wecker nicht ändert).
Folglich wird eine Aktion Montags ausführt und dann erst wieder wieder Samstags, weil da die andere Bedingung zutrifft und sich der Zustand ändert.

Hier gilt (wenn auch in etwas erweitertem Sinn):

Zitat von: Commandref
Angaben, bei denen aufgrund der Definition kein Zustandswechsel erfolgen kann z. B.:

define di_light DOIF ([08:00]) (set switch on)
attr di_light do always

müssen mit Attribut do always definiert werden, damit sie nicht nur einmal, sondern jedes mal (hier jeden Tag) ausgeführt werden.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Februar 2015, 12:48:29
Zitat von: Brockmann am 03 Februar 2015, 12:44:31
Das DOIF ändert innerhalb der Woche seinen Status nie (sofern sich Wecker nicht ändert).
Folglich wird eine Aktion Montags ausführt und dann erst wieder wieder Samstags, weil da die andere Bedingung zutrifft und sich der Zustand ändert.

Hier gilt (wenn auch in etwas erweitertem Sinn):

ja, hier fehlt offenbar das do always Attribut.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 03 Februar 2015, 12:59:21
Klingt logisch - wenn man es verstanden hat. Und es erklärt, warum es in den Tests immer funktioniert. Morgen früh (bzw. übermorgen) wird sich's zeigen.

Besten Dank

(Muss zugeben: Das mit "do always" hatte schon jemand erwähnt - ich hab's aber offensichtlich falsch verstanden).
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 03 Februar 2015, 16:26:10
Zitat von: duke-f am 03 Februar 2015, 12:59:21
(Muss zugeben: Das mit "do always" hatte schon jemand erwähnt - ich hab's aber offensichtlich falsch verstanden).

Hallo duke-f

Ich hatte mich auch gefragt, warum du es nicht einfach ausprobiert hast  :)

http://forum.fhem.de/index.php/topic,33019.msg253904.html#msg253904 (http://forum.fhem.de/index.php/topic,33019.msg253904.html#msg253904)

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 03 Februar 2015, 16:34:52
 :-[
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 03 Februar 2015, 16:59:16
@Duke-F: Warum realisierst du das nicht mit einem DOIF und einem Kalender?
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 03 Februar 2015, 17:08:15
Zitat von: dieda am 03 Februar 2015, 16:59:16
@Duke-F: Warum realisierst du das nicht mit einem DOIF und einem Kalender?
1. Weil immer zu unvorhersehbaren Zeiten mein Sonderfall "Cottbus" auftreten kann. Dann will ich nur eine Taste drücken (bisher ein Button im Webinterface, künftig auch einen Knopf auf einer Fernbedienung) und am nächsten Morgen werde ich eine Stunde früher geweckt. Am nächsten Tag ist dann automatisch wieder der Normalzustand eingestellt.

Diese Sonderfälle können auch an Wochenenden auftreten.
2. Bin noch nicht so weit mit den Kalendern....
Titel: Antw:neues Modul DOIF
Beitrag von: dieda am 03 Februar 2015, 17:15:12
Das kann man doch einbauen. Oder verstehe ich da was falsch. Entweder du nimmst einen dynamischen Terminkalender oder einen Dummy, den du mit abfragst.
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 03 Februar 2015, 17:39:44
Hallo,
ich muss noch mal mit meiner "Dummy-Ferienauswert-Prozedur" kommen.

Ich habe Dummies, die über eine Sub mit den Tagen bis zum jeweiligen FerienStart bzw. FerienEnde befüllt werden.
Nun möchte ich ein FerienStart und FerienEnde Dummy definieren, welches mir unabhängig vom Ferientyp (Sommerferien, Osterferien, etc) einen Countdown anzeigt. Also die Dummies FerienStart und FerienEnde herunterzählt. Die Zahl wird dann später über einen Sonos angesagt. Die SonosDevices sind auf einem 2.ten fhem Rechner, der per fhem2fhem gekoppelt ist.

Aber wie kann ich in meinem DOIF auf den Wert des richtigen Ferientyps (hier die "6" von e_cnt.OS.start.Ferien.dum_STATE) zugreifen um "Test" korekt zu setzten?
Oder ist der Ansatz falsch und es muss anders gelöst werden...

DEF        ([cnt.OS.start.Ferien.dum] <= 10 or
[cnt.PG.start.Ferien.dum] <= 10 or
[cnt.SO.start.Ferien.dum] <= 10 or
[cnt.HB.start.Ferien.dum] <= 10 or
[cnt.WE.start.Ferien.dum] <= 10)
({fhem "set Test (ReadingsVal("%","state",""))})
DOELSE (set Test 0)
   NAME       SchulferienStart
   NR         774
   NTFY_ORDER 50-SchulferienStart
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-02-03 17:26:27   cmd_event       cnt.OS.start.Ferien.dum
     2015-02-03 17:26:27   cmd_nr          1
     2015-02-03 17:26:27   e_cnt.OS.start.Ferien.dum_STATE 6
     2015-02-03 17:26:27   error           {fhem "set Test (ReadingsVal("%","state",""))}: Can't find string terminator '"' anywhere before EOF at (eval 153) line 1.

     2015-02-03 17:26:27   state           cmd_1
   Condition:
     0          InternalDoIf('cnt.OS.start.Ferien.dum','STATE','') <= 10 or  InternalDoIf('cnt.PG.start.Ferien.dum','STATE','') <= 10 or InternalDoIf('cnt.SO.start.Ferien.dum','STATE','') <= 10 or InternalDoIf('cnt.HB.start.Ferien.dum','STATE','') <= 10 or InternalDoIf('cnt.WE.start.Ferien.dum','STATE','') <= 10
   Devices:
     0           cnt.OS.start.Ferien.dum cnt.PG.start.Ferien.dum cnt.SO.start.Ferien.dum cnt.HB.start.Ferien.dum cnt.WE.start.Ferien.dum
     all         cnt.OS.start.Ferien.dum cnt.PG.start.Ferien.dum cnt.SO.start.Ferien.dum cnt.HB.start.Ferien.dum cnt.WE.start.Ferien.dum
   Do:
     0          {fhem "set Test (ReadingsVal("%","state",""))}
     1          set Test 0
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           cnt.OS.start.Ferien.dum:STATE cnt.PG.start.Ferien.dum:STATE cnt.SO.start.Ferien.dum:STATE cnt.HB.start.Ferien.dum:STATE cnt.WE.start.Ferien.dum:STATE
     all         cnt.OS.start.Ferien.dum:STATE cnt.PG.start.Ferien.dum:STATE cnt.SO.start.Ferien.dum:STATE cnt.HB.start.Ferien.dum:STATE cnt.WE.start.Ferien.dum:STATE
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Februar 2015, 17:44:22
Zitat von: Spartacus am 03 Februar 2015, 17:39:44
Hallo,
ich muss noch mal mit meiner "Dummy-Ferienauswert-Prozedur" kommen.

Ich habe Dummies, die über eine Sub mit den Tagen bis zum jeweiligen FerienStart bzw. FerienEnde befüllt werden.
Nun möchte ich ein FerienStart und FerienEnde Dummy definieren, welches mir unabhängig vom Ferientyp (Sommerferien, Osterferien, etc) einen Countdown anzeigt. Also die Dummies FerienStart und FerienEnde herunterzählt. Die Zahl wird dann später über einen Sonos angesagt. Die SonosDevices sind auf einem 2.ten fhem Rechner, der per fhem2fhem gekoppelt ist.

Aber wie kann ich in meinem DOIF auf den Wert des richtigen Ferientyps (hier die "6" von e_cnt.OS.start.Ferien.dum_STATE) zugreifen um "Test" korekt zu setzten?
Oder ist der Ansatz falsch und es muss anders gelöst werden...

DEF        ([cnt.OS.start.Ferien.dum] <= 10 or
[cnt.PG.start.Ferien.dum] <= 10 or
[cnt.SO.start.Ferien.dum] <= 10 or
[cnt.HB.start.Ferien.dum] <= 10 or
[cnt.WE.start.Ferien.dum] <= 10)
({fhem "set Test (ReadingsVal("%","state",""))})
DOELSE (set Test 0)
   NAME       SchulferienStart
   NR         774
   NTFY_ORDER 50-SchulferienStart
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-02-03 17:26:27   cmd_event       cnt.OS.start.Ferien.dum
     2015-02-03 17:26:27   cmd_nr          1
     2015-02-03 17:26:27   e_cnt.OS.start.Ferien.dum_STATE 6
     2015-02-03 17:26:27   error           {fhem "set Test (ReadingsVal("%","state",""))}: Can't find string terminator '"' anywhere before EOF at (eval 153) line 1.

     2015-02-03 17:26:27   state           cmd_1
   Condition:
     0          InternalDoIf('cnt.OS.start.Ferien.dum','STATE','') <= 10 or  InternalDoIf('cnt.PG.start.Ferien.dum','STATE','') <= 10 or InternalDoIf('cnt.SO.start.Ferien.dum','STATE','') <= 10 or InternalDoIf('cnt.HB.start.Ferien.dum','STATE','') <= 10 or InternalDoIf('cnt.WE.start.Ferien.dum','STATE','') <= 10
   Devices:
     0           cnt.OS.start.Ferien.dum cnt.PG.start.Ferien.dum cnt.SO.start.Ferien.dum cnt.HB.start.Ferien.dum cnt.WE.start.Ferien.dum
     all         cnt.OS.start.Ferien.dum cnt.PG.start.Ferien.dum cnt.SO.start.Ferien.dum cnt.HB.start.Ferien.dum cnt.WE.start.Ferien.dum
   Do:
     0          {fhem "set Test (ReadingsVal("%","state",""))}
     1          set Test 0
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           cnt.OS.start.Ferien.dum:STATE cnt.PG.start.Ferien.dum:STATE cnt.SO.start.Ferien.dum:STATE cnt.HB.start.Ferien.dum:STATE cnt.WE.start.Ferien.dum:STATE
     all         cnt.OS.start.Ferien.dum:STATE cnt.PG.start.Ferien.dum:STATE cnt.SO.start.Ferien.dum:STATE cnt.HB.start.Ferien.dum:STATE cnt.WE.start.Ferien.dum:STATE
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:

Christian

... (set Test  [cnt.OS.start.Ferien.dum]) ...

einfacher wird es wohl nicht gehen, siehe Commandref zu DOIF "Nutzung von Readings, Stati oder Internals im Ausführungsteil"


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: duke-f am 03 Februar 2015, 17:52:05
Zitat von: dieda am 03 Februar 2015, 17:15:12
Das kann man doch einbauen. Oder verstehe ich da was falsch. Entweder du nimmst einen dynamischen Terminkalender oder einen Dummy, den du mit abfragst.

Das ist ja schon richtig, aber genau das meinte ich mit "Bin noch nicht so weit mit den Kalendern" Ich hab hier leider nicht die Zeit, mich so ausgiebig wie gewünscht mit FHEM auseinanderzusetzen. Sachlich hast Du natürlich 100%ig recht - werde das auch mal angehen. Jetzt ist es aber einfach noch schneller, wenn der entsprechende Anruf Nachmittags kommt: "Morgen ist Termin" eine Taste auf der Fernbedienung zu drücken, als diesen Termin im dynamischen Kalender einzutragen - zumal die Person, die den Kalender erstrangig betrifft eine andere ist als die, die FHEM regelt.  ;)
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 03 Februar 2015, 19:33:33
Zitat von: Damian am 03 Februar 2015, 17:44:22
... (set Test  [cnt.OS.start.Ferien.dum]) ...

einfacher wird es wohl nicht gehen, siehe Commandref zu DOIF "Nutzung von Readings, Stati oder Internals im Ausführungsteil"


Gruß

Damian
Hi Damian,
danke für Deine Antwort! Deine Lösung hätte nur für die Osterferien funktioniert, aber nicht für den Rest! Allerdings hast Du mir trotzdem geholfen! Jetzt habe ich es so gelöst:
([cnt.OS.start.Ferien.dum] <= 10) (set Test  [cnt.OS.start.Ferien.dum])
DOELSEIF
([cnt.PG.start.Ferien.dum] <= 10) (set Test  [cnt.PG.start.Ferien.dum])
DOELSEIF
([cnt.SO.start.Ferien.dum] <= 10) (set Test  [cnt.SO.start.Ferien.dum])
DOELSEIF
([cnt.HB.start.Ferien.dum] <= 10) (set Test  [cnt.HB.start.Ferien.dum])
DOELSEIF
([cnt.WE.start.Ferien.dum] <= 10) (set Test  [cnt.WE.start.Ferien.dum])
DOELSE (set Test 0)


Vielleicht geht es noch einfacher, aber so funzt es auf jeden Fall!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 03 Februar 2015, 19:37:49
habe eine offenes Fenster Warung ge doif't und dabei das Problem, dass meine Fensterkontakte 2x open melden, einmal zur vccu und einmal zum Heizkörperthermostaten.

Somit bekomme ich auch 2x auf dem Tablet die Ansage, dass noch ein Fenster auf ist. Wie kann ich das ändern ?


define di_Fenster_Bad1_offen DOIF ([MK_Bad1:state] eq "open" and [THLP:temperature] < 16)(set Tablet ttsSay "Das Fenster im Badezimmer ist noch auf.")
attr di_Fenster_Bad1_offen cmdState auf|zu
attr di_Fenster_Bad1_offen do always
attr di_Fenster_Bad1_offen room at_notify
attr di_Fenster_Bad1_offen wait 900


Gruß Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Februar 2015, 19:41:00
Zitat von: knochenmuehle am 03 Februar 2015, 19:37:49
habe eine offenes Fenster Warung ge doif't und dabei das Problem, dass meine Fensterkontakte 2x open melden, einmal zur vccu und einmal zum Heizkörperthermostaten.

Somit bekomme ich auch 2x auf dem Tablet die Ansage, dass noch ein Fenster auf ist. Wie kann ich das ändern ?


define di_Fenster_Bad1_offen DOIF ([MK_Bad1:state] eq "open" and [THLP:temperature] < 16)(set Tablet ttsSay "Das Fenster im Badezimmer ist noch auf.")
attr di_Fenster_Bad1_offen cmdState auf|zu
attr di_Fenster_Bad1_offen do always
attr di_Fenster_Bad1_offen room at_notify
attr di_Fenster_Bad1_offen wait 900


Gruß Andreas

mit Fragezeichen, wenn Temperaturabfrage nicht triggern soll:

define di_Fenster_Bad1_offen DOIF ([MK_Bad1:state] eq "open" and [?THLP:temperature] < 16)(set Tablet ttsSay "Das Fenster im Badezimmer ist noch auf.")...


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 03 Februar 2015, 20:05:43
ne, der Fensterkontakt (Homematic) sendet 2x, einmal zur vccu und einmal zum Heizkörperthermostat

Gruß Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Februar 2015, 20:23:48
Zitat von: knochenmuehle am 03 Februar 2015, 20:05:43
ne, der Fensterkontakt (Homematic) sendet 2x, einmal zur vccu und einmal zum Heizkörperthermostat

Gruß Andreas

Innerhalb welcher Zeit?

Wenn es innerhalb von 900 Sekunden ist, dann ist das lt. deiner Definition egal.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 03 Februar 2015, 20:30:26
es kommt 2x sofort nacheinander, hatte ohne wait gestetet.
mit nem ? bei der Temp. klappts jetzt.
als Trigger nehme ich jetzt auch das Fenster_auf reading des Thermostaten

damit funktioniert das ganze jetzt aber nur wenn sich die Temp innerhalb der 900 sek nicht ändert, oder ?


([RT_BZ_1_WindowRec:trig_MK_Bad1] eq "open" and [?THLP:temperature] < 16)(set Tablet ttsSay "Das Fenster im Badezimmer ist noch auf.")


A.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 03 Februar 2015, 20:40:55
Zitat von: knochenmuehle am 03 Februar 2015, 20:30:26
es kommt 2x sofort nacheinander, hatte ohne wait gestetet.
mit nem ? bei der Temp. klappts jetzt.
als Trigger nehme ich jetzt auch das Fenster_auf reading des Thermostaten

damit funktioniert das ganze jetzt aber nur wenn sich die Temp innerhalb der 900 sek nicht ändert, oder ?


([RT_BZ_1_WindowRec:trig_MK_Bad1] eq "open" and [?THLP:temperature] < 16)(set Tablet ttsSay "Das Fenster im Badezimmer ist noch auf.")


A.

Das sind jetzt drei Änderungen auf einmal: ohne 900, anderes Reading und mein Vorschlag mit Fragezeichen. Wenn sich die Voraussetzung ändern, so kann ich keine konkreten Aussagen machen.

Man kann sagen, bei Fragezeichen würde beim Überschreiten der Temperatur von 16 Grad dennoch eine Meldung nach 900 Sekunden erfolgen, wenn Fenster nicht zwischendurch geschlossen wurde.

Auch das do always ist nicht unbedingt hier sinnvoll.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: knochenmuehle am 04 Februar 2015, 18:32:15
Damian du hast natürlich Recht, hatte nur schnell eine funktionierende Lösung gesucht.

Ich habe aber den alten Zustand wieder hergestellt, das do always rausgenommen und es funktioniert jetzt auch so:


([MK_Bad1:state] eq "open" and [?THLP:temperature] < 16)(set Tablet ttsSay "Das Fenster im Badezimmer ist noch auf.")


keine Doppelmeldung mehr, ich schätze das do always war's

Ist mir auch lieber auf den Fensterkontakt zu triggern und nicht auf den Thermostaten, eine mögliche Fehlerquelle weniger.

Gruß
Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 04 Februar 2015, 21:09:34
Hallo,
so ganz glücklich bin ich noch nicht mit meiner Auswertung der Ferientage:
([cnt.OS.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.OS.start.Ferien.dum])
DOELSEIF
([cnt.PG.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.PG.start.Ferien.dum])
DOELSEIF
([cnt.SO.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.SO.start.Ferien.dum])
DOELSEIF
([cnt.HB.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.HB.start.Ferien.dum])
DOELSEIF
([cnt.WE.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.WE.start.Ferien.dum])
DOELSE (set cnt.NRW.start.Ferien.dum -deaktiv-)

Der Kalender wird alle 6h aktualisiertund die Werte in der Tabelle (Screenshot) werden heruntergezählt.
Erreicht ein Wert die "10" wird das Dummy cnt.NRW.start.Ferien.dum auf den Wert des jeweiligen Ferienevents gesetzt(Countdown 10..0).

Muss ich nun das do always setzten? Aber dann würde m.E. das Dummy cnt.NRW.start.Ferien.dum immer wieder auf -deaktiv- gesetzt, da immer ein Ferienevent > als 10 Tage ist und somit immer das DOELSE zutrifft, oder?

Was ist nun richtig, damit meine Logik funktioniert, vor allen Ferien immer einen 10 Tages Countdown anzuzeigen!
Danke,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 05 Februar 2015, 14:19:10
Hallo,
irgendwie funktioniert mein Konstrukt im vorherigen Post nicht! Egal ob mit DO ALWAYS oder ohne! Da sich alle Ferientypen beim Aktualisieren des Kalenders ändern und von allen Ferien ein Tage abgezogen wird, überschreibt das DOIF das dummy "cnt.NRW.start.Ferien.dum " immer wieder mit deaktiv!

Hat jemand eine Idee, wo ich ansetzten muss?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 06 Februar 2015, 09:30:37
Guten Morgen,

ich teste gerade die Umstellung von "3 x (at*) IF" gegen ein "DOIF".
Dazu habe ich folgendes DOIF angelegt:
([06:00|0123456]
and [PoolPumpe_Master:state] eq "on"
and [Pool:state:d]>= 1
and [Pool:state:d]< 15 )
((set PoolPumpe on-till {sprintf("%02d:%02d",6+[Pool:state:d]/6,([Pool:state:d]/6-int([Pool:state:d]/6))*60)}))
DOELSEIF
([Pool:state:d]>= 15
and [Pool:state:d]< 24 )
((set PoolPumpe on-till {sprintf("%02d:%02d",6+[Pool:state:d]/4,([Pool:state:d]/4-int([Pool:state:d]/4))*60)}))
DOELSEIF ([Pool:state:d]>= 24
and [Pool:state:d]<= 45)
((set PoolPumpe on-till {sprintf("%02d:%02d",6+[Pool:state:d]/3,([Pool:state:d]/3-int([Pool:state:d]/3))*60)}))


Dieses DOIF dient dazu, unterschiedlich lange Pumpenlaufzeiten je Pooltemperatur zu generieren.
Im Log sehe ich, das die Pumpe zur definierten Zeit (06:00) eingeschaltet wurde, und zur errechneten Zeit ausgeschaltet wurde. Soweit so gut.
Jedoch sehe ich im Log auch folgenden Fehlerhinweis:

Poolsteuerung: perl error in condition: (DOIF_time_once($hash->{timer}{0},$wday,"0123456") and ReadingValDoIf('PoolPumpe_Master','state','') eq "on" and ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')>= 10 and ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')< 15 ) ((set PoolPumpe on-till {sprintf("%02d:%02d",6+ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')/6,(ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')/6-int(ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')/6))*60)})): syntax error at (eval 40587) line 1, near ") ("


Die Bedingung habe ich aus meiner alten IF-Bedingung kopiert, und dabei trat dieser Fehler im Log nicht auf.

Ich sehe, das im Logfile der Wert ...'(-?\d+(\.\d+)?)')>= 10 auftaucht, wobei in der Bedingung ...'(-?\d+(\.\d+)?)')>= 1 steht. Ist das der Grund ?
Hat jemand ne Idee ?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Februar 2015, 10:06:06
Zitat von: Bartimaus am 06 Februar 2015, 09:30:37
Guten Morgen,

ich teste gerade die Umstellung von "3 x (at*) IF" gegen ein "DOIF".
Dazu habe ich folgendes DOIF angelegt:
([06:00|0123456]
and [PoolPumpe_Master:state] eq "on"
and [Pool:state:d]>= 1
and [Pool:state:d]< 15 )
((set PoolPumpe on-till {sprintf("%02d:%02d",6+[Pool:state:d]/6,([Pool:state:d]/6-int([Pool:state:d]/6))*60)}))
DOELSEIF
([Pool:state:d]>= 15
and [Pool:state:d]< 24 )
((set PoolPumpe on-till {sprintf("%02d:%02d",6+[Pool:state:d]/4,([Pool:state:d]/4-int([Pool:state:d]/4))*60)}))
DOELSEIF ([Pool:state:d]>= 24
and [Pool:state:d]<= 45)
((set PoolPumpe on-till {sprintf("%02d:%02d",6+[Pool:state:d]/3,([Pool:state:d]/3-int([Pool:state:d]/3))*60)}))


Dieses DOIF dient dazu, unterschiedlich lange Pumpenlaufzeiten je Pooltemperatur zu generieren.
Im Log sehe ich, das die Pumpe zur definierten Zeit (06:00) eingeschaltet wurde, und zur errechneten Zeit ausgeschaltet wurde. Soweit so gut.
Jedoch sehe ich im Log auch folgenden Fehlerhinweis:

Poolsteuerung: perl error in condition: (DOIF_time_once($hash->{timer}{0},$wday,"0123456") and ReadingValDoIf('PoolPumpe_Master','state','') eq "on" and ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')>= 10 and ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')< 15 ) ((set PoolPumpe on-till {sprintf("%02d:%02d",6+ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')/6,(ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')/6-int(ReadingValDoIf('Pool','state','(-?\d+(\.\d+)?)')/6))*60)})): syntax error at (eval 40587) line 1, near ") ("


Die Bedingung habe ich aus meiner alten IF-Bedingung kopiert, und dabei trat dieser Fehler im Log nicht auf.

Ich sehe, das im Logfile der Wert ...'(-?\d+(\.\d+)?)')>= 10 auftaucht, wobei in der Bedingung ...'(-?\d+(\.\d+)?)')>= 1 steht. Ist das der Grund ?
Hat jemand ne Idee ?

Perlberechnungen im Ausführungsteil müssen zusätzlich in runde Klammern, hier also:

{(sprintf.....)}

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 06 Februar 2015, 12:09:24
Danke,

habe ich gemacht, gleicher Fehler im Log. Nur mit der Auswirkung, das jetzt nicht ein/aus geschaltet wurde.
Auch weist die Fehlermeldung im Log immer noch auf die Bedingung >= 10 statt der Bedingung >=1 im DEF hin.  :-\

Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 06 Februar 2015, 12:26:21
Arrgh, Fehler gefunden  ::)
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 06 Februar 2015, 16:20:04
Zitat von: Spartacus am 04 Februar 2015, 21:09:34
Hallo,
so ganz glücklich bin ich noch nicht mit meiner Auswertung der Ferientage:
([cnt.OS.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.OS.start.Ferien.dum])
DOELSEIF
([cnt.PG.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.PG.start.Ferien.dum])
DOELSEIF
([cnt.SO.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.SO.start.Ferien.dum])
DOELSEIF
([cnt.HB.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.HB.start.Ferien.dum])
DOELSEIF
([cnt.WE.start.Ferien.dum] <= 10) (set cnt.NRW.start.Ferien.dum [cnt.WE.start.Ferien.dum])
DOELSE (set cnt.NRW.start.Ferien.dum -deaktiv-)

Der Kalender wird alle 6h aktualisiertund die Werte in der Tabelle (Screenshot) werden heruntergezählt.
Erreicht ein Wert die "10" wird das Dummy cnt.NRW.start.Ferien.dum auf den Wert des jeweiligen Ferienevents gesetzt(Countdown 10..0).

Muss ich nun das do always setzten? Aber dann würde m.E. das Dummy cnt.NRW.start.Ferien.dum immer wieder auf -deaktiv- gesetzt, da immer ein Ferienevent > als 10 Tage ist und somit immer das DOELSE zutrifft, oder?

Was ist nun richtig, damit meine Logik funktioniert, vor allen Ferien immer einen 10 Tages Countdown anzuzeigen!
Danke,
Christian

Hallo,
ich habe jetzt mehrere Versuche unternommen indem ich die Reihenfolge der DOIFELSEs umgestellt habe, aber irgendwie kommt am Ende immer das gleiche falsche Ergebnis raus! Ist DOIF hier der falsche Ansatz?

Gruß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 06 Februar 2015, 17:53:43
Zitat von: Spartacus am 06 Februar 2015, 16:20:04
Hallo,
ich habe jetzt mehrere Versuche unternommen indem ich die Reihenfolge der DOIFELSEs umgestellt habe, aber irgendwie kommt am Ende immer das gleiche falsche Ergebnis raus! Ist DOIF hier der falsche Ansatz?

Gruß,
Christian

statt:

DOELSE (set cnt.NRW.start.Ferien.dum -deaktiv-)


angeben:

DOELSEIF ([cnt.OS.start.Ferien.dum] > 10 and [cnt.PG.start.Ferien.dum] > 10 and ...) (set cnt.NRW.start.Ferien.dum -deaktiv-)

do always muss bleiben

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 07 Februar 2015, 13:58:22
Hallo Damian,
zunächst habe ich Deine Antwort nicht ganz nachvollziehen können, aber nach längerem "Drübernachdenken", kann ich es nachvollziehen.

Vielen Dank für Deine Hilfe,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 07 Februar 2015, 23:32:32
Hallo, ich habe mich Heute mal an das DOIF gewagt und habe irgendwo einen Fehler drin, denn es arbeitet nicht so wie ich es möchte.

Steuern möchte ich darüber ein 3 Wege Ventil, welches zwischen meinen beiden Pufferspeichern umschalten soll.

Geregelt werden soll so:

Kesselpumpe on und Temperatur im Puffer2 unten <40°C Ventil on
Heizkreispumpe on und Puffer1 oben Tempereatur <40 Ventil on
ansonsten Ventil zu

meine Definition sieht so aus.

define Puffersteuerung_DI DOIF ([Kesselpumpe:?on] and [Puffer2_100:temperature] < 40 or [Heizkreispumpe:?on] and [Puffer1_25:temperature] < 40 ) (set Heizkreisventil on) DOELSE (set Heizkreisventil off)

aber wenn ich das so eingebe, bleibt DOIF bei cmd_nr 3 stehen und das Ventil ist off

Irgendwo habe ich da wohl einen Denkfehler drin.

Währe schön wenn mir dabei jemand auf die Sprünge helfen könnte.

Titel: Antw:neues Modul DOIF
Beitrag von: Puschel74 am 08 Februar 2015, 01:28:23
Und selbst die deutsche commandref kann dir nicht helfen??
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 08 Februar 2015, 10:19:54
Ich denke mal, ich würde vor und nach dem or Klammern setzen, damit die Prüfung korrekt stattfinden kann.

define Puffersteuerung_DI DOIF (([Kesselpumpe:?on] and [Puffer2_100:temperature] < 40) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature] < 40 )) (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 08 Februar 2015, 10:57:21
Zitat von: Puschel74 am 08 Februar 2015, 01:28:23
Und selbst die deutsche commandref kann dir nicht helfen??

Nein, leider nicht, sonst hätte ich hier nicht um Hilfe gebeten
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 08 Februar 2015, 10:58:32
Zitat von: Invers am 08 Februar 2015, 10:19:54
Ich denke mal, ich würde vor und nach dem or Klammern setzen, damit die Prüfung korrekt stattfinden kann.

define Puffersteuerung_DI DOIF (([Kesselpumpe:?on] and [Puffer2_100:temperature] < 40) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature] < 40 )) (set Heizkreisventil on) DOELSE (set Heizkreisventil off)

Das hatte ich auch schon versucht, dann kommt aber das hier als Fehlermeldung:
DOIF: no left bracket of condition: define Puffersteuerung_DI DOIF (([Kesselpumpe:?on] and [Puffer2_100:temperature] < 40) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature] < 40 )) (set Heizkreisventil on) DOELSE (set Heizkreisventil off)


EDIT:

Habe es jetzt doch hin bekommen, Fehler waren die ?, nach dem ich diese raus genommen habe Funktioniert es jetzt so wie es soll.
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 10 Februar 2015, 09:35:08
Guten Morgen,
was will mir diese Meldung im Log sagen?:
ZirkulationsPumpeDOIF: {  }: HASH(0x2257d98)

Die Timer werden dennoch korrekt ausgeführt.
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 10:31:57
Hab mich leider zu früh gefreut, irgendwo ist in meiner Bedingung noch der Wurm drin.

Das DOIF macht generell alles so wie es soll, aber Wenn Bedingung 1 erfüllt ist, anschließend Bedingung 2 erfüllt ist aber dann Bedingung 1 nicht mehr erfüllt ist, schaltet DOIF aus, obwohl die Bedingung 2 immer noch erfüllt wird.

Dann kommt es auch vor das selbst wenn beide Bedingungen erfüllt werden DOIF nach kurzer Zeit auf off geht.
Titel: Antw:neues Modul DOIF
Beitrag von: Invers am 10 Februar 2015, 10:58:36
Um die Klammersetzung wirst du wohl nicht rumkommen. Ausserdem würde ich mit eq "on" probieren, statt mit :on

define Puffersteuerung_DI DOIF (([Kesselpumpe] eq "on" and [Puffer2_100:temperature] < 40) or ([Heizkreispumpe] eq "on" and [Puffer1_25:temperature] < 40 )) (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 12:00:18
Hallo Invers,

mit den Klammern und  eq "on"  hatte ich auch schon versucht, aber damit geht DOIF sofort auf STATE off.

Wenn ich die Commandref richtig verstanden habe müsste das eigendlich so aussehen, aber das mag fhem gar nicht.

define Puffer_DI DOIF ([Kesselpumpe?:on] and [Puffer2_100:temperature]<30) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<50)  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 12:16:45
Zitat von: MadCat am 10 Februar 2015, 12:00:18
Wenn ich die Commandref richtig verstanden habe müsste das eigendlich so aussehen, aber das mag fhem gar nicht.
define Puffer_DI DOIF ([Kesselpumpe?:on] and [Puffer2_100:temperature]<30) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<50)  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)

Da hast Du etwas falsch verstanden, denn das ist keine korrekte DOIF-Definiton:
DOIF (Bedingung)(Aktion)DOELSE(Aktion)

Was Du da geschrieben hast ist aber:
DOIF (Bedingung)(Bedingung)(Aktion)DOELSE(Aktion)

Du musst also um (Bedingung)(Bedingung) zumindest nochmal Klammern setzen, damit es formal korrekt ist:
define Puffer_DI DOIF (([Kesselpumpe:?on] and [Puffer2_100:temperature]<30) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<50))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)

Und Dass es eigentlich [Kesselpumpe:?on] heißen muss, ist Dir aber klar und vermutlich nur ein Tippfehler, oder?

Ist Dir klar, was der Unterschied zwischen [Kesselpumpe:?on] und [Kesselpumpe] eq "on" ist? Dann verstehst Du auch, warum es zu unterschiedlicher Funktionalität führt.

Generell wäre es hilfreich, wenn Du mit list Puffer_DI ein komplettes Listing des DOIF einstellst, anstatt nur die Definition reinzukopieren oder abzutippen.
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 12:22:05
Hallo Brockmann,

kannst Du mir sagen wo ich das list Puffer_DI eingeben muss, bin noch nicht so firm mit fhem.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 12:44:32
Zitat von: MadCat am 10 Februar 2015, 12:22:05
kannst Du mir sagen wo ich das list Puffer_DI eingeben muss, bin noch nicht so firm mit fhem.
Im Eingabefeld der Weboberfläche.
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 10 Februar 2015, 13:03:27
Hallo,

ich habe zwei Bewegungsmelder mit deren Events ich eine Bewegungsrichtung erkennen möchte. Hierfür habe ich (auch weil es je nach Bewegungsrichtung verschiedene Aktionen geben soll) an DOIF gedacht. Leider funktioniert schon ein einfaches DOIF, in welchem ich nur die Bewegungsrichtung anzeigen lassen will nicht.

Hier mein DOIF:

define OG.xx.BM.Logik.DI DOIF ([OG.ez.BM.Whg_Tuer.STATE:?on] and [?OG.tr.BM.Treppe:STATE] eq 'on') DOELSEIF ([OG.tr.BM.Treppe.STATE:?on] and [?OG.ez.BM.Whg_Tuer:STATE] eq 'on') DOELSE
attr OG.xx.BM.Logik.DI cmdState Runter|Hoch|Unbekannt
attr OG.xx.BM.Logik.DI do always


Meine Bewegungsmelder heißen OG.ez.BM.Whg_Tuer und OG.tr.BM.Treppe und erzeugen z.B. folgendes Events:

2015-02-10 11:48:06 HM485 OG.tr.BM.Treppe STATE: on
2015-02-10 11:48:11 HM485 OG.ez.BM.Whg_Tuer STATE: on
2015-02-10 11:48:33 HM485 OG.tr.BM.Treppe STATE: off
2015-02-10 11:48:59 HM485 OG.ez.BM.Whg_Tuer STATE: off


In diesem Fall hätte das DOIF meiner Meinung nach den State "Runter" haben müssen.

Wo liegt mein (Denk-)Fehler?

Vielen Dank
Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 10 Februar 2015, 13:17:43
Hab's gerade selbst gefunden - richtig muss es lauten:

define OG.xx.BM.Logik.DI DOIF ([OG.ez.BM.Whg_Tuer:?STATE.*on] and [?OG.tr.BM.Treppe:STATE] eq 'on') DOELSEIF ([OG.tr.BM.Treppe:?STATE.*on] and [?OG.ez.BM.Whg_Tuer:STATE] eq 'on') DOELSE
attr OG.xx.BM.Logik.DI cmdState Runter|Hoch|Unbekannt
attr OG.xx.BM.Logik.DI do always


Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 10 Februar 2015, 14:55:45
Ich habe nochmal eine andere Herausforderung: Ich kann ja eine Aktion mittels Attribut "wait" nach Eintreten der Bedingung verzögern. Nun habe ich jedoch ein Bedingung die zwei Aktionen mit unterschiedlicher Verzögerung auslösen soll - etwa in der Art ("Pseudocode"):

Wenn Bedingung erfüllt, dann schalte nach 5 Minuten das Licht aus und setzt Wert eines Dummys nach 15 Minuten auf x.
Wenn Bedingung innerhalb der ersten 5 Minuten nicht mehr erfüllt, dann mache nix.
Wenn Bedingung zwischen Minute 5 und 15 nicht mehr erfüllt, dann wurde das Licht ausgeschaltet aber Aktion nicht ausgeführt.


Gibt es hierfür eine Lösung mit einem DOIF oder muss ich mit mehreren DOIFs und Dummys arbeiten?

Vielen Dank
Ronny
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 14:57:05
Hallo Brockmann,

hab das list jetzt mal ausgeführt und dabei kommt folgendes raus.

Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<30) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<50))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 12:34:05   cmd_event       Puffer1_25
     2015-02-10 12:34:05   cmd_nr          2
     2015-02-10 12:34:02   e_Heizkreispumpe_events on: ok on ok
     2015-02-10 12:23:48   e_Kesselpumpe_events on ok
     2015-02-10 14:49:23   e_Puffer1_25_events temperature: 52.13
     2015-02-10 14:49:23   e_Puffer1_25_temperature 52.13
     2015-02-10 14:49:23   e_Puffer2_100_events temperature: 33.94
     2015-02-10 14:49:23   e_Puffer2_100_temperature 33.94
     2015-02-10 12:34:05   state           off
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<30) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<50)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Puffer2_100
     triggerEvents:
       temperature: 33.94
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   room       Heizung
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 15:01:52
Zitat von: RoBra81 am 10 Februar 2015, 14:55:45
Ich habe nochmal eine andere Herausforderung: Ich kann ja eine Aktion mittels Attribut "wait" nach Eintreten der Bedingung verzögern. Nun habe ich jedoch ein Bedingung die zwei Aktionen mit unterschiedlicher Verzögerung auslösen soll - etwa in der Art ("Pseudocode"):


Gibt es hierfür eine Lösung mit einem DOIF oder muss ich mit mehreren DOIFs und Dummys arbeiten?

Vielen Dank
Ronny

Dazu gibt es doch in der Comandref ein Beispiel, wo man zwei Atribute mit Wait verzögern kann.
Musst Du mal gucken ob Du das für Dich verwenden kannst.
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 10 Februar 2015, 15:05:02
Zitat von: MadCat am 10 Februar 2015, 15:01:52
Dazu gibt es doch in der Comandref ein Beispiel, wo man zwei Atribute mit Wait verzögern kann.
Musst Du mal gucken ob Du das für Dich verwenden kannst.

Ja, damit kann ich zwei Bedingungen unterschiedlich verzögern, aber bei mir ist es leider eine Bedingung mit zwei Aktionen die verzögert nacheinander ausgeführt werden sollen.
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 10 Februar 2015, 15:12:15
Da wäre dann im ausführungsteil sowas wie
Zitat({fhem("set dustRobot command PowerToggle ;; sleep 1 ;; set dustRobot command Turbo ;; sleep 1 ;; set dustRobot command Start ;; set Erna done")})

Das richtige für dich... sleep halt dann so wie Du die Verzögerung brauchst.
Das ganze ist nicht fhem blockierend...
Titel: Antw:neues Modul DOIF
Beitrag von: RoBra81 am 10 Februar 2015, 15:14:31
Zitat von: der-Lolo am 10 Februar 2015, 15:12:15
Das richtige für dich... sleep halt dann so wie Du die Verzögerung brauchst.
Das ganze ist nicht fhem blockierend...


...und würde auch abgebrochen, wenn die Bedingung in der Zeit nicht mehr erfüllt ist?
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 10 Februar 2015, 15:20:27
nein, das glaube ich nicht...
Ich habe da noch eins welches in einer Ausführung zwei IF enthält - das wartet die wait time und erledigt dann IF oder ELSE...

Zitat([pl_soBad] eq "on") (
IF ([pr_soBad] eq "present")
   (IF ([player:config] eq "auto") (set sonos_Bad Volume 12,
   set sonos_Wohnzimmer AddMember sonos_Bad, attr pr_soBad disable 1,
   set EntertainmentEvents add Bad Lautsprecher im Automatikmode angeschaltet und zur Wohnzimmer Wiedergabe hinzugefügt...)
   ELSE (set EntertainmentEvents add Der Bad Lautsprecher ist im Sonossystem zur Wiedergabe bereit...,
   attr pr_soBad disable 1)
   )
ELSE
   (set pl_soBad off,set EntertainmentEvents add Netzwerkeinbindung missglückt, ich versuche den Player neu zu starten.,
   define at_pl_soBad at +00:00:05 set pl_soBad on)

Vielleicht hilft Dir das als Idee weiter...
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 15:29:38
Zitat von: MadCat am 10 Februar 2015, 14:57:05
hab das list jetzt mal ausgeführt und dabei kommt folgendes raus.
Ja, das sieht ja soweit alles in Ordnung aus. Wenn das DOIF jetzt nicht das tut, was Du möchtest, schaust Du Dir (am Besten unmittelbar zu dem Zeitpunkt) dieses detaillierte Listing an. Da kannst Du genau sehen, wodurch das DOIF zuletzt getriggert wurde und welche Werte die Parameter in den Konditionen hatten. Dann sollte also nachvollziehbar sein, warum Dein DOIF so reagiert wie es das tut. Ansonsten nochmal mit dem list zum fraglichen Zeitpunkt hier nachfragen.
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 15:37:40
Zitat von: Brockmann am 10 Februar 2015, 15:29:38
Ja, das sieht ja soweit alles in Ordnung aus. Wenn das DOIF jetzt nicht das tut, was Du möchtest, schaust Du Dir (am Besten unmittelbar zu dem Zeitpunkt) dieses detaillierte Listing an. Da kannst Du genau sehen, wodurch das DOIF zuletzt getriggert wurde und welche Werte die Parameter in den Konditionen hatten. Dann sollte also nachvollziehbar sein, warum Dein DOIF so reagiert wie es das tut. Ansonsten nochmal mit dem list zum fraglichen Zeitpunkt hier nachfragen.

Hallo Brockmann,

das list war schon aktuell. Und obwohl beide Bedingungen erfüllt werden und das Heizkreisventil auf on gehen müsste, geht es sofort auf off und bleibt da stehen, selbst wenn ich die Soll Temperaturen ändere oder die Pumpen ein und ausschalte, hab alles versucht, aber es tut sich nix.
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 10 Februar 2015, 15:41:58
Zitat von: MadCat am 10 Februar 2015, 14:57:05
Hallo Brockmann,

hab das list jetzt mal ausgeführt und dabei kommt folgendes raus.

Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<30) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<50))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 12:34:05   cmd_event       Puffer1_25
     2015-02-10 12:34:05   cmd_nr          2
     2015-02-10 12:34:02   e_Heizkreispumpe_events on: ok on ok
     2015-02-10 12:23:48   e_Kesselpumpe_events on ok
     2015-02-10 14:49:23   e_Puffer1_25_events temperature: 52.13
     2015-02-10 14:49:23   e_Puffer1_25_temperature 52.13
     2015-02-10 14:49:23   e_Puffer2_100_events temperature: 33.94
     2015-02-10 14:49:23   e_Puffer2_100_temperature 33.94
     2015-02-10 12:34:05   state           off
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<30) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<50)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Puffer2_100
     triggerEvents:
       temperature: 33.94
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   room       Heizung


@MadCat und Brockmann,
kann es sein, dass das DOIF Probleme mit den Nachkommastellen der Temperaturen hat? Ich hab nu keinen genauen Plan wie Perl sich da verhält, könnte mir das nur als Problemchen vorstellen.

Gruß
Ingo
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 15:43:05
Zitat von: MadCat am 10 Februar 2015, 15:37:40
das list war schon aktuell. Und obwohl beide Bedingungen erfüllt werden und das Heizkreisventil auf on gehen müsste, geht es sofort auf off und bleibt da stehen, selbst wenn ich die Soll Temperaturen ändere oder die Pumpen ein und ausschalte, hab alles versucht, aber es tut sich nix.
Laut Listing liegen die Temperaturen doch jeweils ÜBER den Vorgaben in den Konditionen. Wie sollen die Bedingungen da erfüllt sein?
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 15:49:01
Zitat von: automatisierer am 10 Februar 2015, 15:41:58
kann es sein, dass das DOIF Probleme mit den Nachkommastellen der Temperaturen hat? Ich hab nu keinen genauen Plan wie Perl sich da verhält, könnte mir das nur als Problemchen vorstellen.
Nein, das sollte kein Problem sein. Wäre nur problematisch, wenn der Sensor noch die Maßeinheit mit ins Reading schreiben würde, dann müsste man das rausfiltern ([Puffer2_100:temperature:d]<30). Macht er ja aber offenbar nicht.
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 10 Februar 2015, 15:50:48
@MadCat

Versuch zuerst mit einer Bedingung:

define Puffersteuerung_DI DOIF ([Kesselpumpe] eq "on" and [Puffer2_100:temperature] < 40) (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
attr Puffersteuerung_DI do always
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 10 Februar 2015, 16:04:59
wenn die bedingungen bei dem listing wahr sein soll, musst du die pfeile umdrehen. so bedeuten es, wahr wenn kleiner als 30
Titel: Antw:neues Modul DOIF
Beitrag von: Rohan am 10 Februar 2015, 16:19:20
@MadCat:

sind "Kesselpumpe" & Co. alles originäre Fhem-Devices oder sind da auch Dummys bei? Falls letzteres, müssten diese doch mit vorangestelltem "?" abgefragt werden, weil deren Statusänderungen doch keine Events erzeugen, oder?

Ist jetzt mehr ein Schuss ins Blaue ...

Edith: War wohl nix, gerade nochmal nachgelesen... das "?" braucht man ja gerade, wenn man nur auf Events reagieren will. Also wenn da Devices ohne Events bei sind müsste deine Abfrage dann nicht ständig wiederholt werden?


Gruß
Thomas
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 16:33:31
Ich habe jetzt noch einmal alles genau so eingestellt mit den Solltemperaturen wie es sein soll und ein frisches listing gemacht.

Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<50) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 16:23:41   cmd_event       Puffer2_100
     2015-02-10 16:23:41   cmd_nr          2
     2015-02-10 16:23:40   e_Heizkreispumpe_events off: ok off ok
     2015-02-10 16:23:34   e_Kesselpumpe_events on ok
     2015-02-10 16:23:35   e_Puffer1_25_events temperature: 60.13
     2015-02-10 16:23:35   e_Puffer1_25_temperature 60.13
     2015-02-10 16:23:41   e_Puffer2_100_events temperature: 33.94
     2015-02-10 16:23:41   e_Puffer2_100_temperature 33.94
     2015-02-10 16:23:41   state           off
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<50) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Puffer2_100
     triggerEvents:
       temperature: 33.94
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   do         always
   room       Heizung


Die Pumpen und Sensoren sind keine Dummys.

Bedingung 1 ist erfüllt, sollte also das Heizkreisventil auf on gehen.
Wenn ich die Kesselpumpe kurz aus schalte und dann wieder ein, geht das Heizkreisventil auch kurz auf on und nach ein paar Secunden wieder auf off.
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 10 Februar 2015, 16:36:37
versuch masl direkt nach auslösen ein list zu bekommen und die "paar" Sekunden später noch eins.
Ich vermute fast etwas anderes in deiner Config schaltet zusätzlich das Heizkreisventil.
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 16:41:37
OK, hier mal die beiden list

Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<50) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      on
   TYPE       DOIF
   Readings:
     2015-02-10 16:39:53   cmd_event       Kesselpumpe
     2015-02-10 16:39:53   cmd_nr          1
     2015-02-10 16:23:40   e_Heizkreispumpe_events off: ok off ok
     2015-02-10 16:39:53   e_Kesselpumpe_events on ok
     2015-02-10 16:39:43   e_Puffer1_25_events temperature: 61.69
     2015-02-10 16:39:43   e_Puffer1_25_temperature 61.69
     2015-02-10 16:39:53   e_Puffer2_100_events temperature: 33.81
     2015-02-10 16:39:53   e_Puffer2_100_temperature 33.81
     2015-02-10 16:39:53   state           on
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<50) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Kesselpumpe
     triggerEvents:
       on ok
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   do         always
   room       Heizung


Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<50) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 16:40:09   cmd_event       Puffer1_25
     2015-02-10 16:40:09   cmd_nr          2
     2015-02-10 16:23:40   e_Heizkreispumpe_events off: ok off ok
     2015-02-10 16:39:53   e_Kesselpumpe_events on ok
     2015-02-10 16:40:09   e_Puffer1_25_events temperature: 61.69
     2015-02-10 16:40:09   e_Puffer1_25_temperature 61.69
     2015-02-10 16:39:53   e_Puffer2_100_events temperature: 33.81
     2015-02-10 16:39:53   e_Puffer2_100_temperature 33.81
     2015-02-10 16:40:09   state           off
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<50) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Puffer1_25
     triggerEvents:
       temperature: 61.69
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   do         always
   room       Heizung
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 16:52:16
Zitat von: MadCat am 10 Februar 2015, 16:33:31
Bedingung 1 ist erfüllt, sollte also das Heizkreisventil auf on gehen.
Wenn ich die Kesselpumpe kurz aus schalte und dann wieder ein, geht das Heizkreisventil auch kurz auf on und nach ein paar Secunden wieder auf off.
Ich hatte ja schon mal gefragt, ob Du Dir über die Funktionsweise von [Kesselpumpe:?on] im Klaren bist?
Diese Bedingung reagiert auf ein Event des Device Kesselpumpe, in dem das Schlüsselwort "on" enthalten ist. Diese Bedingung ist wahr in dem Moment wo dieses Event generiert wird.
Laut Listing war das um 16:23:34.
Um 16:23:41 wurde das DOIF aber schon wieder getriggert, da war [Kesselpumpe:?on] schon nicht mehr wahr.

Warum verwendest Du nicht (wie hier schon mal vorgeschlagen) [Kesselpumpe] eq "on"? Diese Bedingung ist solange wahr, wie das Device Kesselpumpe den Status on hat.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Februar 2015, 16:54:50
Zitat von: MadCat am 10 Februar 2015, 16:41:37
OK, hier mal die beiden list

Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<50) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      on
   TYPE       DOIF
   Readings:
     2015-02-10 16:39:53   cmd_event       Kesselpumpe
     2015-02-10 16:39:53   cmd_nr          1
     2015-02-10 16:23:40   e_Heizkreispumpe_events off: ok off ok
     2015-02-10 16:39:53   e_Kesselpumpe_events on ok
     2015-02-10 16:39:43   e_Puffer1_25_events temperature: 61.69
     2015-02-10 16:39:43   e_Puffer1_25_temperature 61.69
     2015-02-10 16:39:53   e_Puffer2_100_events temperature: 33.81
     2015-02-10 16:39:53   e_Puffer2_100_temperature 33.81
     2015-02-10 16:39:53   state           on
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<50) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Kesselpumpe
     triggerEvents:
       on ok
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   do         always
   room       Heizung


Internals:
   CFGFN
   DEF        (([Kesselpumpe:?on] and [Puffer2_100:temperature]<50) or ([Heizkreispumpe:?on] and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 16:40:09   cmd_event       Puffer1_25
     2015-02-10 16:40:09   cmd_nr          2
     2015-02-10 16:23:40   e_Heizkreispumpe_events off: ok off ok
     2015-02-10 16:39:53   e_Kesselpumpe_events on ok
     2015-02-10 16:40:09   e_Puffer1_25_events temperature: 61.69
     2015-02-10 16:40:09   e_Puffer1_25_temperature 61.69
     2015-02-10 16:39:53   e_Puffer2_100_events temperature: 33.81
     2015-02-10 16:39:53   e_Puffer2_100_temperature 33.81
     2015-02-10 16:40:09   state           off
   Condition:
     0          (EventDoIf('Kesselpumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer2_100','temperature','')<50) or (EventDoIf('Heizkreispumpe',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on') and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
     triggerDev Puffer1_25
     triggerEvents:
       temperature: 61.69
   Internals:
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
     all         Kesselpumpe Heizkreispumpe
Attributes:
   cmdState   on|off
   do         always
   room       Heizung


Warum arbeitest du mit Eventabfragen [Kesselpumpe:?on]  statt mit Statusabfragen [Kesselpumpe] eq "on"? Eine Eventabfrage ist, im Gegensatz zu einer Statusabfrage nur in dieser "Sekunde" wahr in der sie stattfindet und sonst nicht und das war um 16:40:09 der Fall gewesen, was zu cmd2 führt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 16:58:07
Zitat von: Brockmann am 10 Februar 2015, 16:52:16
Warum verwendest Du nicht (wie hier schon mal vorgeschlagen) [Kesselpumpe] eq "on"? Diese Bedingung ist solange wahr, wie das Device Kesselpumpe den Status on hat.

Dnke für die Erklärung, hatte ich so gar nicht verstanden gehabt.

Das mit dem eq "on" hatte ich auch schon versucht, aber damit ging garnix, werde es aber noch einmal versuchen.
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 17:23:50
Zitat von: Damian am 10 Februar 2015, 16:54:50
Warum arbeitest du mit Eventabfragen [Kesselpumpe:?on]  statt mit Statusabfragen [Kesselpumpe] eq "on"? Eine Eventabfrage ist, im Gegensatz zu einer Statusabfrage nur in dieser "Sekunde" wahr in der sie stattfindet und sonst nicht und das war um 16:40:09 der Fall gewesen, was zu cmd2 führt.

Gruß

Damian

Hallo Damian, mit eq "on" geht DOIF direkt auf off und macht gar nichts.

mit
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Februar 2015, 17:28:48
Zitat von: MadCat am 10 Februar 2015, 17:23:50
Hallo Damian, mit eq "on" geht DOIF direkt auf off und macht gar nichts.

mit

Dann war die Pumpe eben nicht "on". Auch hier kann man es nur mit einem list ... beurteilen.

Bei DOIF gibt es, wie bei Perl auch, unbegrenzte Möglichkeiten etwas zu definieren.

Anhand der e_... Readings sieht man schön, welche Ereignisse zu einer Zustandsänderung geführt haben und dann muss man einfach die Abfrage durchgehen und schauen welche Zustande die angegebenen Stati, Readings oder Events zu diesem Zeitpunkt hatten, dann erklärt sich immer das Verhalten des Moduls und das stimmt, weil die Auswertung der Bedingungen von Perl übernommen wird, immer.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 17:32:20
Zitat von: Damian am 10 Februar 2015, 17:28:48
Dann war die Pumpe eben nicht "on". Auch hier kann man es nur mit einem list ... beurteilen.


Doch Pumpe war on, hier das listing

Internals:
   CFGFN
   DEF        (([Kesselpumpe] eq "on" and [Puffer2_100:temperature]<50) or ([Heizkreispumpe] eq "on" and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 17:30:59   cmd_event       Puffer2_100
     2015-02-10 17:30:59   cmd_nr          2
     2015-02-10 17:30:40   e_Heizkreispumpe_STATE on ok
     2015-02-10 17:30:38   e_Kesselpumpe_STATE on ok
     2015-02-10 17:30:59   e_Puffer1_25_temperature 62.31
     2015-02-10 17:30:59   e_Puffer2_100_temperature 33.69
     2015-02-10 17:30:59   state           off
   Condition:
     0          (InternalDoIf('Kesselpumpe','STATE','') eq "on" and ReadingValDoIf('Puffer2_100','temperature','')<50) or (InternalDoIf('Heizkreispumpe','STATE','') eq "on" and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Kesselpumpe:STATE Heizkreispumpe:STATE
     all         Kesselpumpe:STATE Heizkreispumpe:STATE
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
Attributes:
   cmdState   on|off
   do         always
   room       Heizung
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Februar 2015, 17:45:51
Zitat von: MadCat am 10 Februar 2015, 17:32:20
Doch Pumpe war on, hier das listing

Internals:
   CFGFN
   DEF        (([Kesselpumpe] eq "on" and [Puffer2_100:temperature]<50) or ([Heizkreispumpe] eq "on" and [Puffer1_25:temperature]<30))  (set Heizkreisventil on) DOELSE (set Heizkreisventil off)
   NAME       Puffer_DI
   NR         154
   NTFY_ORDER 50-Puffer_DI
   STATE      off
   TYPE       DOIF
   Readings:
     2015-02-10 17:30:59   cmd_event       Puffer2_100
     2015-02-10 17:30:59   cmd_nr          2
     2015-02-10 17:30:40   e_Heizkreispumpe_STATE on ok
     2015-02-10 17:30:38   e_Kesselpumpe_STATE on ok
     2015-02-10 17:30:59   e_Puffer1_25_temperature 62.31
     2015-02-10 17:30:59   e_Puffer2_100_temperature 33.69
     2015-02-10 17:30:59   state           off
   Condition:
     0          (InternalDoIf('Kesselpumpe','STATE','') eq "on" and ReadingValDoIf('Puffer2_100','temperature','')<50) or (InternalDoIf('Heizkreispumpe','STATE','') eq "on" and ReadingValDoIf('Puffer1_25','temperature','')<30)
   Devices:
     0           Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
     all         Kesselpumpe Puffer2_100 Heizkreispumpe Puffer1_25
   Do:
     0          set Heizkreisventil on
     1          set Heizkreisventil off
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Kesselpumpe:STATE Heizkreispumpe:STATE
     all         Kesselpumpe:STATE Heizkreispumpe:STATE
   Readings:
     0           Puffer2_100:temperature Puffer1_25:temperature
     all         Puffer2_100:temperature Puffer1_25:temperature
   State:
   Timerfunc:
   Trigger:
Attributes:
   cmdState   on|off
   do         always
   room       Heizung


Das stimmt nicht. Die Pumpe war "on ok" und nicht "on" das ist ein feiner Unterschied. So etwas kannst du, wie übrigens in der Commandref zu DOIF dokumentiert ist, mit [Kesselpumpe] =~ "on" abfragen.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 17:50:05
Zitat von: Damian am 10 Februar 2015, 17:45:51
Das stimmt nicht. Die Pumpe war "on ok" und nicht "on" das ist ein feiner Unterschied. So etwas kannst du, wie übrigens in der Commandref zu DOIF dokumentiert ist, mit [Kesselpumpe] =~ "on" abfragen.

Gruß

Damian

Na Prima, dann wird da wohl die ganze Zeit der Fehler liegen.

Das On OK kommt von meinem ECMD Device, dann muss ich wohl meine classdef ändern.
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 10 Februar 2015, 17:51:03
Zitat von: RoBra81 am 10 Februar 2015, 14:55:45
...
Wenn Bedingung erfüllt, dann schalte nach 5 Minuten das Licht aus und setzt Wert eines Dummys nach 15 Minuten auf x.
Wenn Bedingung innerhalb der ersten 5 Minuten nicht mehr erfüllt, dann mache nix.
Wenn Bedingung zwischen Minute 5 und 15 nicht mehr erfüllt, dann wurde das Licht ausgeschaltet aber Aktion nicht ausgeführt.


Gibt es hierfür eine Lösung mit einem DOIF oder muss ich mit mehreren DOIFs und Dummys arbeiten?

Was spricht dagegen zwei DOIF's zu verwenden? Meines Wissens ist es mit einem DOIF nicht möglich, ausser ev. mit einer perl Sub.
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 10 Februar 2015, 18:00:58
Hallo Damian,

das  =~ "on" hat es gebracht, hab jetzt alle möglichen Situationen durchgespielt und es Schaltet jetzt alles genau so wie es soll.

Danke Dir und allen anderen für Eure Hilfe und Infos.

LG
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 10 Februar 2015, 18:05:16
ZitatWas spricht dagegen zwei DOIF's zu verwenden? Meines Wissens ist es mit einem DOIF nicht möglich, ausser ev. mit einer perl Sub.

Eventuell kann man es so in ein DOIF quetschen:
DI_Test DOIF (Bedingung)(Licht ein)
DOELSEIF(Bedingung and [DI_Test] eq "Licht_an")(Dummy x)
attr DI_Test wait 300:600
attr DI_Test cmdState Licht_an|Dummy_gesetzt


Mal so ins Unreine gedacht...
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 10 Februar 2015, 18:14:23
@Brockmann

attr DI_Test wait 300:600

Zuerst dachte ich auch, so könnte es funktionieren aber die Logik stimmt nicht.
Zudem ist sowas schwer zu warten: Fehler suchen, erweitern usw.

Gruss
flurin

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 10 Februar 2015, 18:23:55
Zitat von: flurin am 10 Februar 2015, 18:14:23
@Brockmann

attr DI_Test wait 300:600

Zuerst dachte ich auch, so könnte es funktionieren aber die Logik stimmt nicht.
Zudem ist sowas schwer zu warten: Fehler suchen, erweitern usw.

Gruss
flurin

Aus meiner Sicht sind es zwei unabhängige Geschichten:

define di_Licht DOIF (Bedingung) (set Licht aus)
attr wait 300

define di_Aktion DOIF (Bedingung) (set dummy x)
attr wait 900



Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: inesa394 am 10 Februar 2015, 20:17:30
Hallo

Habe hier ein DOIF das mich wenn ich nach Hause komme per Push und Stimme begrüßt.
([inesa] eq "home") (set pushbullet_inesa message Ines kommt nach Hause  ,sleep 20; set Tuer.GongMP3 playTone 039 )
Nun möchte ich das das doif nachdem es mich erkannt hat eine Zwangspause einlegt so von 10 minuten. 
Mit wait scheint das ja nicht zu funktionieren. Habe das vorher mit zwei watchdog gelöst die ich jetzt gern mit doif ersetzten will.
cu
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Februar 2015, 07:08:11
Zitat von: inesa394 am 10 Februar 2015, 20:17:30
Nun möchte ich das das doif nachdem es mich erkannt hat eine Zwangspause einlegt so von 10 minuten. 
Schau Dir mal das Attribut cmdpause in der DOIF-Referenz an.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Februar 2015, 07:23:40
Zitat von: flurin am 10 Februar 2015, 18:14:23
attr DI_Test wait 300:600

Zuerst dachte ich auch, so könnte es funktionieren aber die Logik stimmt nicht.
Zudem ist sowas schwer zu warten: Fehler suchen, erweitern usw.
Du hast Recht, da bin ich mal wieder in die "wait ohne DOELSE"-Falle getappt. Wenn man einfach ein DOELSE (ohne Aktion) ans Ende setzt, sollte es klappen.
Ohne das kann das DOIF seinen Zustand bei Wegfall der Bedingung nicht ändern und der wait-Timer läuft einfach weiter.
Und was Wartbarkeit angeht: Zwei DOIFs, die parallel auf dieselbe Bedingung triggern, finde ich auch nicht übersichtlicher, aber das ist sicher eine Geschmacksfrage.
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 09:19:27
Hallo zusammen,
ich steh gerade auf dem Schlauch. Bin am umstellen auf DOIF und will meine Heizkörper (HM-CC-RT-DN) zu einer bestimmten Uhrzeit zzgl. div. Bedingungen zu schalten.

define Heizung_Bad_an DOIF ([06:25] and !$we and ...........) (set Heizkoerper_Bad desired-temp 22)

Der HM-CC-RT-DN läuft nicht im Burstmode, d.h. er frägt nur alle 2-3 min. ab und da ist Bedingung Uhrzeit u.U. längst passé. Den Burstmode will ich zu Gunsten der Batterielebensdauer vermeiden.

Bin für jede Hilfe dankbar.

Gruß
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: Rohan am 11 Februar 2015, 09:39:45
Hi,

desired_temp

Schreibfehler oder steht das wirklich so in deinem DOIF (ich meine den Unterstrich "_")?

Gruß
Thomas
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 11 Februar 2015, 10:41:20
Hallo Brockmann

Zitat von: Brockmann am 11 Februar 2015, 07:23:40
Und was Wartbarkeit angeht: Zwei DOIFs, die parallel auf dieselbe Bedingung triggern, finde ich auch nicht übersichtlicher, aber das ist sicher eine Geschmacksfrage.

Wenn selbst Damian zwei DOIF's vorschlägt, dann gehe ich davon aus, dass er einen solchen Fall nicht vorgesehen hat.
Es gibt aber oft mehrere Lösungen für ein Problem; z.B. mit einem DOIF und einem Script.

Man könnte auch die Aufgabe anders formulieren, nämlich:

Wenn Bedingung erfüllt und Timer1 abgelaufen, dann Befehl1 ausführen.
und
Wenn Bedingung erfüllt und Timer2 abgelaufen, dann Befehl2 ausführen.

Gruss
flurin

Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 11:36:58
Zitat von: Rohan am 11 Februar 2015, 09:39:45
Hi,

desired_temp

Schreibfehler oder steht das wirklich so in deinem DOIF (ich meine den Unterstrich "_")?

Gruß
Thomas


Hallo Thomas,

Schreibfehler, steht schon desired-temp drin, hab´s zu spät bemerkt und schon ausgebessert.

Gruß
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 11 Februar 2015, 13:47:39
Zitat von: leuchte1 am 11 Februar 2015, 09:19:27
Der HM-CC-RT-DN läuft nicht im Burstmode, d.h. er frägt nur alle 2-3 min. ab und da ist Bedingung Uhrzeit u.U. längst passé. Den Burstmode will ich zu Gunsten der Batterielebensdauer vermeiden.
Mit dem DOIF setzt Du das FHEM-Device auf die gewünschte Temperatur. Dass diese Information an das Gerät selbst übermittelt wird, darum kümmert sich FHEM bzw. das entsprechende HM...-Modul. Das hat mit dem DOIF nichts zu tun.
Wenn Du die Temperatur von Hand im Web-Frontend verstellst, musst Du ja schließlich auch nicht den Moment abpassen, wo der Thermostat gerade empfangsbereit ist, sondern Du klickst einfach und FHEM kümmert sich um den Rest.
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 11 Februar 2015, 15:27:53
Zitat von: RoBra81 am 10 Februar 2015, 14:55:45
Wenn Bedingung erfüllt, dann schalte nach 5 Minuten das Licht aus und setzt Wert eines Dummys nach 15 Minuten auf x.
Wenn Bedingung innerhalb der ersten 5 Minuten nicht mehr erfüllt, dann mache nix.
Wenn Bedingung zwischen Minute 5 und 15 nicht mehr erfüllt, dann wurde das Licht ausgeschaltet aber Aktion nicht ausgeführt.


Gibt es hierfür eine Lösung mit einem DOIF oder muss ich mit mehreren DOIFs und Dummys arbeiten?

Just for fun -> eine Lösung mit einem DOIF:

define di_flex_lamp DOIF ([test_switch] eq "on") \
(define timer1 at +00:05 \
{ if (Value("test_switch") eq "on") { fhem("set flex_lamp on") } },\
define timer2 at +00:15 \
{ if (Value("test_switch") eq "on") { fhem("set flex_lamp off") } } )


"set flex_lamp on/off" mit beliebigem Befehl ersetzen.

Aber ich bleibe dabei, die Lösung mit zwei DOIF's gefällt mir besser.

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 15:42:44
Zitat von: Brockmann am 11 Februar 2015, 13:47:39
Mit dem DOIF setzt Du das FHEM-Device auf die gewünschte Temperatur. Dass diese Information an das Gerät selbst übermittelt wird, darum kümmert sich FHEM bzw. das entsprechende HM...-Modul. Das hat mit dem DOIF nichts zu tun.
Wenn Du die Temperatur von Hand im Web-Frontend verstellst, musst Du ja schließlich auch nicht den Moment abpassen, wo der Thermostat gerade empfangsbereit ist, sondern Du klickst einfach und FHEM kümmert sich um den Rest.
War ich eigentlich auch der Meinung, hat ja beim bisherigen at-Befehl auch funktioniert. Aber nach einer Woche testen (lediglich einmal hat er geschalten) blieb mir nur die Vermutung, dass es mit dem Burstmode zusammenhängt.
Wenn ich nämlich mit dem gleichen DOIF eine Lampe anschalte, klappt das ohne Probleme.
Ich bin momentan ziemlich ratlos und der WAF tendiert gegen Null. :-\
Gruss Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 11 Februar 2015, 15:47:51
Zitat von: leuchte1 am 11 Februar 2015, 09:19:27
Hallo zusammen,
ich steh gerade auf dem Schlauch. Bin am umstellen auf DOIF und will meine Heizkörper (HM-CC-RT-DN) zu einer bestimmten Uhrzeit zzgl. div. Bedingungen zu schalten.

define Heizung_Bad_an DOIF ([06:25] and !$we and ...........) (set Heizkoerper_Bad desired-temp 22)

Der HM-CC-RT-DN läuft nicht im Burstmode, d.h. er frägt nur alle 2-3 min. ab und da ist Bedingung Uhrzeit u.U. längst passé. Den Burstmode will ich zu Gunsten der Batterielebensdauer vermeiden.

Bin für jede Hilfe dankbar.

Gruß
Stefan

dann schick doch mal ein list dev.
Titel: Antw:neues Modul DOIF
Beitrag von: Rohan am 11 Februar 2015, 15:50:24
Hi,

hmmm ... der Befehl muss doch auf den Clima-Channel losgejagt werden ...

set Heizkoerper_Bad_Clima desired-temp 22

Funktioniert denn dein "set ..." Befehl in der Fhem-Eingabezeile?

Gruß
Thomas
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 16:00:45
Hallo,
set-Befehl in der FHEM-Eingabezeile wird problemlos angenommen???

Gruss
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: Rohan am 11 Februar 2015, 16:06:47
Hmmm....

warum 3 Fragezeichen?

Imho müsste das auf den Channel "_Clima" gehen, habe aber noch so etwas in Erinnerung, dass der Wert auch eine Nachkommastelle haben muss/sollte (.0 oder .5), also

set Heizkoerper_Bad_Clima desired-temp 22.0

Gruß
Thomas
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 16:07:41
HALT,

bei der Eingabe über die FHEM-Eingabezeile hab ich anfänglich den State: set desired-temp 10

ABER nach ca. 2 min. stand er wieder auf State: desired off

Erst nach einer erneuten Eingabe über FHEM-Eingabezeile wurde nach ca. 2 min. auf desired-temp 10 umgeschalten ??? ???

Gruss
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 18:07:33
hier noch das listing:

Internals:
   CHANGED
   DEF        2403D904
   NAME       Bad_Heizkoerper_Thermostat
   NR         358
   STATE      T: 12.0 desired: off valve: 0
   TYPE       CUL_HM
   chanNo     04
   device     Bad_Heizkoerper
   Readings:
     2015-02-11 16:10:05   CommandAccepted yes
     2014-12-13 16:14:48   H               0
     2014-12-13 16:07:42   R-boostPeriod   5 min
     2014-12-13 16:07:42   R-boostPos      80 %
     2014-12-13 16:07:42   R-btnNoBckLight off
     2014-12-13 16:07:42   R-dayTemp       21 C
     2014-12-13 16:07:42   R-daylightSaveTime on
     2014-12-13 16:07:42   R-decalcTime    11:00
     2014-12-13 16:07:42   R-decalcWeekday Sat
     2014-12-13 16:07:42   R-modePrioManu  all
     2014-12-13 16:07:42   R-modePrioParty all
     2014-12-13 16:07:42   R-nightTemp     17 C
     2014-12-13 16:07:42   R-noMinMax4Manu off
     2014-12-13 16:07:42   R-regAdaptive   on
     2014-12-13 16:07:42   R-reguExtI      15
     2014-12-13 16:07:42   R-reguExtP      30
     2014-12-13 16:07:42   R-reguExtPstart 30
     2015-01-10 18:32:19   R-reguIntI      15
     2015-01-10 18:32:19   R-reguIntP      30
     2015-01-10 18:32:19   R-reguIntPstart 30
     2014-12-13 16:07:42   R-showInfo      time
     2014-12-13 16:07:42   R-showWeekday   off
     2014-12-13 16:07:37   R-sign          off
     2014-12-13 16:07:42   R-tempMax       30.5 C
     2014-12-13 16:07:42   R-tempMin       4.5 C
     2014-12-13 16:07:42   R-tempOffset    0.0K
     2014-12-13 16:07:42   R-valveErrPos   15 %
     2014-12-13 16:07:42   R-valveMaxPos   100 %
     2014-12-13 16:07:42   R-valveOffsetRt 0 %
     2014-12-13 16:07:42   R-winOpnBoost   off
     2014-12-13 16:07:42   R-winOpnDetFall 1.4 K
     2014-12-13 16:07:42   R-winOpnMode    on
     2014-12-13 16:07:42   R-winOpnPeriod  15 min
     2014-12-13 16:07:42   R-winOpnTemp    12 C
     2015-01-10 18:32:19   R_0_tempListSat 06:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_1_tempListSun 06:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_2_tempListMon 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_3_tempListTue 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_4_tempListWed 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_5_tempListThu 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_6_tempListFri 06:00 17.0 09:00 21.0 17:00 17.0 22:00 21.0 24:00 17.0
     2015-01-10 18:32:19   R_tempList_State verified
     2015-01-10 18:32:15   RegL_01:        08:00 00:00
     2015-01-10 18:32:19   RegL_07:        01:2A 02:22 03:09 04:3D 05:18 06:03 07:00 08:16 09:07 0A:30 0B:00 0C:64 0D:0F 0E:05 0F:00 10:00 11:00 12:09 13:8E 14:44 15:48 16:55 17:08 18:45 19:20 1A:45 1B:20 1C:45 1D:20 1E:45 1F:20 20:45 21:20 22:45 23:20 24:45 25:20 26:45 27:20 28:45 29:20 2A:45 2B:20 2C:45 2D:20 2E:44 2F:48 30:55 31:08 32:45 33:20 34:45 35:20 36:45 37:20 38:45 39:20 3A:45 3B:20 3C:45 3D:20 3E:45 3F:20 40:45 41:20 42:45 43:20 44:45 45:20 46:45 47:20 48:44 49:48 4A:54 4B:6C 4C:44 4D:CC 4E:55 4F:08 50:45 51:20 52:45 53:20 54:45 55:20 56:45 57:20 58:45 59:20 5A:45 5B:20 5C:45 5D:20 5E:45 5F:20 60:45 61:20 62:44 63:48 64:54 65:6C 66:44 67:CC 68:55 69:08 6A:45 6B:20 6C:45 6D:20 6E:45 6F:20 70:45 71:20 72:45 73:20 74:45 75:20 76:45 77:20 78:45 79:20 7A:45 7B:20 7C:44 7D:48 7E:54 7F:6C 80:44 81:CC 82:55 83:08 84:45 85:20 86:45 87:20 88:45 89:20 8A:45 8B:20 8C:45 8D:20 8E:45 8F:20 90:45 91:20 92:45 93:20 94:45 95:20 96:44 97:48 98:54 99:6C 9A:44 9B:CC 9C:55 9D:08 9E:45 9F:20 A0:45 A1:20 A2:45 A3:20 A4:45 A5:20 A6:45 A7:20 A8:45 A9:20 AA:45 AB:20 AC:45 AD:20 AE:45 AF:20 B0:44 B1:48 B2:54 B3:6C B4:44 B5:CC B6:55 B7:08 B8:45 B9:20 BA:45 BB:20 BC:45 BD:20 BE:45 BF:20 C0:45 C1:20 C2:45 C3:20 C4:45 C5:20 C6:45 C7:20 C8:45 C9:20 CA:0F CB:1E CC:1E CD:0F CE:1E CF:1E 00:00
     2014-12-13 18:22:26   T               0
     2015-02-11 18:01:39   ValvePosition   0
     2015-02-11 18:01:39   boostTime       -
     2015-02-11 18:01:39   controlMode     manual
     2015-02-11 18:01:39   desired-temp    off
     2015-02-11 18:01:39   measured-temp   12.0
     2015-02-11 18:01:39   motorErr        ok
     2015-02-11 18:01:39   partyEnd        -
     2015-02-11 18:01:39   partyStart      -
     2015-02-11 18:01:39   partyTemp       -
     2015-02-11 16:10:05   recentStateType ack
     2015-02-11 18:01:39   state           T: 12.0 desired: off valve: 0
   Helper:
     Role:
       chn        1
     Shregr:
       07         00
Attributes:
   event-on-change-reading state
   fm_type    desiredtemp,temp,actuators,tempbutton
   group      Sensoren
   icon       temperature_humidity
   model      HM-CC-RT-DN
   peerIDs    00000000,
   room       Bad
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 11 Februar 2015, 18:45:16
ok, das listing des doif wäre wichtiger...
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 11 Februar 2015, 19:40:44
hier das listing des doif, dzt. auf cmd_2:

Internals:
   DEF        ([05:30:00] and !$we and [Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)

   NAME       Test
   NR         789
   NTFY_ORDER 50-Test
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-02-11 14:14:50   cmd_event       Bad_Heizkoerper_morgens_aufheizen
     2015-02-11 14:14:50   cmd_nr          2
     2015-02-11 14:14:50   e_Bad_Heizkoerper_morgens_aufheizen_STATE state deaktiviert
     2015-02-11 14:14:50   state           cmd_2
     2015-02-11 05:30:00   timer_1_c1      12.02.2015 05:30:00
   Condition:
     0          DOIF_time_once($hash->{timer}{0},$wday,"") and !$we and InternalDoIf('Bad_Heizkoerper_morgens_aufheizen','STATE','') eq "aktiviert" or InternalDoIf('Bad_Heizkoerper_morgens_aufheizen','STATE','') eq "state aktiviert"
   Days:
   Devices:
     0           Bad_Heizkoerper_morgens_aufheizen
     all         Bad_Heizkoerper_morgens_aufheizen
   Do:
     0          set Bad_Heizkoerper_Thermostat desired-temp 23
   Helper:
     last_timer 1
     sleeptimer -1
   Internals:
     0           Bad_Heizkoerper_morgens_aufheizen:STATE
     all         Bad_Heizkoerper_morgens_aufheizen:STATE
   Readings:
   Realtime:
     0          05:30:00
   State:
   Time:
     0          05:30:00
   Timecond:
     0          0
   Timer:
     0          0
   Timerfunc:
   Timers:
     0           0
   Trigger:
Attributes:
   room       Timer
Titel: Antw:neues Modul DOIF
Beitrag von: Rohan am 11 Februar 2015, 20:10:13
Nabend,

ich sitze hier so neben meinen RTs und VDs und muss mich wiederholen. In der Web-GUI von Fhem bekomme ich nur im Channel _Climate die Option angeboten, die desired-temp zu ändern und zwar mit Werten mit jeweils einer Nachkommastelle, ergo z.B.

set Heizkoerper_Bad_Clima desired-temp 22.0

Setze ich den Befehl

set Heizkoerper_Bad desired-temp 22.0

ab (also auf das Device und nicht auf den Channel _Clima) erhalte ich:

ZitatUnknown argument desired-temp, choose one of burstXmit clear:readings,trigger,register,rssi,msgEvents,all fwUpdate getConfig getRegRaw inhibit:on,off raw regBulk regSet reset sysTime unpair

Gerade nochmal getestet: Es gehen auch Temperaturwerte ohne Nachkommastelle, aber der Rest bleibt.

Hast du deinen Channel _Clima nach _Thermostat umbenannt? Jo, hast du. Daher also (meine) Verwirrung.

Gruß
Thomas
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 11 Februar 2015, 20:19:09
@ Rohan,

dem listing nach ist das aber richtig. Er hat halt den Namen von _Clima auf _Thermostat geändert.


EDIT:
probier das mal:

Zitat
define Test DOIF ([05:30:00|8] and ([Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert")) (set Bad_Heizkoerper_Thermostat desired-temp 23)

attr Test do always

das 'attr DEV do always' ist wichtig, sonst läufts wieder nur einmal.

Was ist Bad_Heizkoerper_morgens_aufheizen für ein device?
Ein dummy?
Warum hat das device als State 'aktiviert' oder 'state aktiviert'?
Titel: Antw:neues Modul DOIF
Beitrag von: Rohan am 11 Februar 2015, 21:04:33
Zitat von: automatisierer am 11 Februar 2015, 20:19:09
@ Rohan,

dem listing nach ist das aber richtig. Er hat halt den Namen von _Clima auf _Thermostat geändert. ...

Jo, mein Fehler. Ich habe meinen Beitrag schon angepasst gehabt. Mir kam es einfach nicht in den Sinn. Diese Namensgebung bei Channeln dürfte mMn noch öfters zu Mistverständnissen führen.

Gruß
Thomas
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 12 Februar 2015, 03:16:36
Hallo,

Ja den Clima Channel hab ich zu meiner Übersichtlichkeit umbenannt. Bei Bad_Heizkoerper_morgens_aufheizen handelt es sich um einen Dummy. Das mit dem state ist noch nicht gerade elegant gelöst. Aber das ändert alles nichts an der Tatsache, dass wenn ich bei dem DOIF mit "set Lampe on" eine Lampe schalte dies einwandfrei funktioniert. Inzwischen vermute ich fast eine defekte Hardware.
Allerdings werde ich die nächsten Tage nochmals auf den alten at-Befehl zurückgreifen und testen, da es hier nie Schwierigkeiten gab. Notfalls bleib ich dabei, denn ein kaltes Bad mag frau  :) garnicht.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 12 Februar 2015, 08:29:15
Zitat von: leuchte1 am 12 Februar 2015, 03:16:36
DEF        ([05:30:00] and !$we and [Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)
So richtig koscher ist die Definition aber auch nicht. Da fehlt ein Paar Klammern, sonst würde das DOIF die Heizung (auch) in dem Moment hochschalten, wo Bad_Heizkoerper_morgens_aufheizen auf state aktiviert gesetzt wird, und zwar ganz egal wie spät es dann gerade ist (and bindet stärker als or). Deshalb wäre es so korrekt (wenn ich Deine Absicht richtig verstehe):

DEF        ([05:30:00] and !$we and ([Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert")) (set Bad_Heizkoerper_Thermostat desired-temp 23)


Und wie schon geschrieben wurde, brauchst Du bei solchen Zeitprogrammierungen unbedingt das Attribut do always, sonst wird das DOIF nur beim ersten Mal ausgeführt und dann nicht mehr, weil sich sein Zustand nicht verändert.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Februar 2015, 08:37:21
Zitat von: Brockmann am 12 Februar 2015, 08:29:15
So richtig koscher ist die Definition aber auch nicht. Da fehlt ein Paar Klammern, sonst würde das DOIF die Heizung (auch) in dem Moment hochschalten, wo Bad_Heizkoerper_morgens_aufheizen auf state aktiviert gesetzt wird, und zwar ganz egal wie spät es dann gerade ist (and bindet stärker als or). Deshalb wäre es so korrekt (wenn ich Deine Absicht richtig verstehe):

DEF        ([05:30:00] and !$we and ([Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert")) (set Bad_Heizkoerper_Thermostat desired-temp 23)


Und wie schon geschrieben wurde, brauchst Du bei solchen Zeitprogrammierungen unbedingt das Attribut do always, sonst wird das DOIF nur beim ersten Mal ausgeführt und dann nicht mehr, weil sich sein Zustand nicht verändert.


oder direkt


DEF        ([05:30|8] and [Bad_Heizkoerper_morgens_aufheizen] =~ "aktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 12 Februar 2015, 09:28:26
das hatte ich auch schon überlegt, hatte aber befürchtet, dass dann auch ein 'deaktiviert' triggert.
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 12 Februar 2015, 09:46:39
Vielen Dank für Eure Unterstützung,

die Klammern hatte ich in einen zweiten DOIF fünf Minuten später auch schon gesetzt.
ABER ich habe  das Attribut do always nicht gesetzt >:( >:(.
Ich denke das ist des Rätsels Lösung. Werde ich gleich umsetzten und anschliessend berichten.

Gruss
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Februar 2015, 09:55:09
Zitat von: automatisierer am 12 Februar 2015, 09:28:26
das hatte ich auch schon überlegt, hatte aber befürchtet, dass dann auch ein 'deaktiviert' triggert.

das stimmt wohl, dann eben:

define test DOIF ([05:30|8] and [?Bad_Heizkoerper_morgens_aufheizen] !~ "deaktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)
attr test do always


wenn es nur zwei Zustände: aktiviert/deaktiviert gibt.

P.S. Dass do always bei einem Zustand wichtig ist, steht nicht nur in der Commandref, sondern wurde hier schon mehrfach bei diesem Problem geschrieben ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 12 Februar 2015, 11:16:52
Zitat von: Damian am 12 Februar 2015, 09:55:09
P.S. Dass do always bei einem Zustand wichtig ist, steht nicht nur in der Commandref, sondern wurde hier schon mehrfach bei diesem Problem geschrieben ;)

Hallo Damian

Wäre es denkbar, "do always" als Default zu setzen also im Modul entsprechend zu handhaben? Man könnte dann, wenn es stört, "do once" oder Ähnliches definieren.

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Februar 2015, 11:42:57
Zitat von: flurin am 12 Februar 2015, 11:16:52
Hallo Damian

Wäre es denkbar, "do always" als Default zu setzen also im Modul entsprechend zu handhaben? Man könnte dann, wenn es stört, "do once" oder Ähnliches definieren.

Gruss
flurin

Denkbar schon aber nicht sinnvoll, denn jede Definition, bei der zyklisch sendende Sensoren (z. B. Temperatur, usw.)  angegeben werden (und das sind mindestens genauso viele), würde zum ständigen Ausführen der Befehle führen. Dieses Problem muss insb. bei notify-Definitionen umständlich durch if-Abfragen abgefangen werden und das sollte vom Anfang an bei DOIF, wie auch beim THRESHOLD anders sein.

Gruß

Damian


Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 12 Februar 2015, 11:52:17
Zitat von: Damian am 12 Februar 2015, 11:42:57
Denkbar schon aber nicht sinnvoll, denn jede Definition, bei der zyklisch sendende Sensoren (z. B. Temperatur, usw.)  angegeben werden (und das sind mindestens genauso viele), würde zum ständigen Ausführen der Befehle führen. Dieses Problem muss insb. bei notify-Definitionen umständlich durch if-Abfragen abgefangen werden und das sollte vom Anfang an bei DOIF, wie auch beim THRESHOLD anders sein.

Gruß

Damian

Ok, Danke.
Titel: Antw:neues Modul DOIF
Beitrag von: ultraedition am 12 Februar 2015, 21:44:12
Hallo, ich nutze seit einiger Zeit auch diverse DOIFs in meiner Hausautomation. Ich möchte eine Push-Nachricht verschicken wenn der Klingeltaster gedrückt wurde. Das funktioniert schon wie folgt.

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") (set pushmsg message Klingel wurde gedrückt!)

Wenn ich jedoch zusätzlich mit der Push-Nachricht einen Zeitstempel mitsenden will

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") ({my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")})

erhalte ich bei den DOIF Readings folgende Fehlermeldung:

error  {my $LocalTime=localtime; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}: Unknown command {my, try help. Unknown command fhem("set, try help.

Wenn ich jedoch den Code direkt in die FHEM Kommandozeile eingebe erhalte ich die Push Nachricht.

{my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}

Ich nutze diese Art des Aufbaus auch zusammen mit dem Notify. Auch da funktioniert es z.B.

define ZSFuellstandToLowPushover notify ZS_Fuellstand_Indicator:ToLow {my $LocalTime=localtime;; fhem("set pushmsg message Füllstand Zisterne sehr niedrig (kleiner 3)!!!\n$LocalTime");;}

Was stimmt an dem Syntax nicht?
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 12 Februar 2015, 21:52:06
Zitat von: ultraedition am 12 Februar 2015, 21:44:12
Hallo, ich nutze seit einiger Zeit auch diverse DOIFs in meiner Hausautomation. Ich möchte eine Push-Nachricht verschicken wenn der Klingeltaster gedrückt wurde. Das funktioniert schon wie folgt.

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") (set pushmsg message Klingel wurde gedrückt!)

Wenn ich jedoch zusätzlich mit der Push-Nachricht einen Zeitstempel mitsenden will

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") ({my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")})

erhalte ich bei den DOIF Readings folgende Fehlermeldung:

error  {my $LocalTime=localtime; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}: Unknown command {my, try help. Unknown command fhem("set, try help.

Wenn ich jedoch den Code direkt in die FHEM Kommandozeile eingebe erhalte ich die Push Nachricht.

{my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}

Ich nutze diese Art des Aufbaus auch zusammen mit dem Notify. Auch da funktioniert es z.B.

define ZSFuellstandToLowPushover notify ZS_Fuellstand_Indicator:ToLow {my $LocalTime=localtime;; fhem("set pushmsg message Füllstand Zisterne sehr niedrig (kleiner 3)!!!\n$LocalTime");;}

Was stimmt an dem Syntax nicht?

Wozu so umständlich, das kannst du bei DOIF einfacher haben ;):

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") (set pushmsg message Klingel wurde gedrückt! {(localtime)})


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: ultraedition am 12 Februar 2015, 22:48:26
Super und danke für die schnelle Antwort.

Volker
Titel: Antw:neues Modul DOIF
Beitrag von: leuchte1 am 13 Februar 2015, 08:25:30
Zitat von: Damian am 12 Februar 2015, 09:55:09

P.S. Dass do always bei einem Zustand wichtig ist, steht nicht nur in der Commandref, sondern wurde hier schon mehrfach bei diesem Problem geschrieben ;)

Gruß

Damian

Asche auf mein Haupt.
Alles funktioniert bestens. Danke!

Gruss
Stefan
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 13 Februar 2015, 20:31:34
Hallo, Dank Eurer Hilfe, funktioniert mein DOIF genau so wie ich es gewollt habe, leider hatte ich aber ein Physikalisches Problem nicht bedacht.

(([Kesselpumpe] =~ "on" and [Puffer2_100:temperature]<50) or ([Heizkreispumpe] =~ "on" and [Puffer1_25:temperature]<[Puffer2_20:temperature]))  (set Heizkreisventil on, set Puffer_2 on, set Puffer_1 off) DOELSE (set Heizkreisventil off, set Puffer_2 off, set Puffer_1 on)

Irgendwann, ist der Sollwert von [Puffer2_100:temperature]<50 erreicht, aber wie das nun mal so ist mit Temperaturen, Sie schwanken und so schaltet das Heizkreisventil solange auf und zu, bis der Kessel abgebrandt ist und die Kesselpumpe ausschaltet.

Mein Gedanke war nun dieses Problem mit einem Threshold in den Griff zu bekommen, aber wenn ich die Commandref richtig verstehe, geht dies aber wohl nicht mit meinen Bedingungen.

Hat vielleicht jemand eine Idee, wie ich dieses Problem gelöst bekomme?

Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Februar 2015, 20:40:33
Zitat von: MadCat am 13 Februar 2015, 20:31:34
Hallo, Dank Eurer Hilfe, funktioniert mein DOIF genau so wie ich es gewollt habe, leider hatte ich aber ein Physikalisches Problem nicht bedacht.

(([Kesselpumpe] =~ "on" and [Puffer2_100:temperature]<50) or ([Heizkreispumpe] =~ "on" and [Puffer1_25:temperature]<[Puffer2_20:temperature]))  (set Heizkreisventil on, set Puffer_2 on, set Puffer_1 off) DOELSE (set Heizkreisventil off, set Puffer_2 off, set Puffer_1 on)

Irgendwann, ist der Sollwert von [Puffer2_100:temperature]<50 erreicht, aber wie das nun mal so ist mit Temperaturen, Sie schwanken und so schaltet das Heizkreisventil solange auf und zu, bis der Kessel abgebrandt ist und die Kesselpumpe ausschaltet.

Mein Gedanke war nun dieses Problem mit einem Threshold in den Griff zu bekommen, aber wenn ich die Commandref richtig verstehe, geht dies aber wohl nicht mit meinen Bedingungen.

Hat vielleicht jemand eine Idee, wie ich dieses Problem gelöst bekomme?

Definiere einfach ein wait-Attribut auf deine Befehle, so werden die Schwankungen ignoriert.

z. B. (15 minutige Verzögerung)

attr <dein_DOIF_Modul> wait 900:900

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 13 Februar 2015, 20:58:54
Zitat von: Damian am 13 Februar 2015, 20:40:33
Definiere einfach ein wait-Attribut auf deine Befehle, so werden die Schwankungen ignoriert.

z. B. (15 minutige Verzögerung)

attr <dein_DOIF_Modul> wait 900:900

Gruß

Damian

Vielleicht nicht die sauberste Lösung aber Praktikabel, 15min wären mir aber zu kurz, bis zu welcher Zeitspanne kann dieses Wait ausgereizt werden?

Gruß Ralph
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Februar 2015, 21:06:48
Zitat von: MadCat am 13 Februar 2015, 20:58:54
Vielleicht nicht die sauberste Lösung aber Praktikabel, 15min wären mir aber zu kurz, bis zu welcher Zeitspanne kann dieses Wait ausgereizt werden?

Gruß Ralph

Das ist deine Entscheidung - es gibt keine Grenzen. Schaue dir an, wie lange deine Temperatur um 50 pendelt und danach bestimmst du den Wert.

Alternativ kannst du mit dem Attribut cmdpause experimentieren.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: MadCat am 13 Februar 2015, 21:14:00
Zitat von: Damian am 13 Februar 2015, 21:06:48

Alternativ kannst du mit dem Attribut cmdpause experimentieren.

Gruß

Damian

Hm wo ist denn da der Unterschied zu dem wait, ich blicke da noch nicht durch.

Gruß Ralph
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 13 Februar 2015, 21:19:10
Zitat von: MadCat am 13 Februar 2015, 21:14:00
Hm wo ist denn da der Unterschied zu dem wait, ich blicke da noch nicht durch.

Gruß Ralph

Erklärungen und Beispiele findest du in der Commandref zu DOIF.

Hier nur kurz: wait verzögert die erste Ausführung (hier geht nichts verloren), cmdpause ignoriert Events, die nach der letzten Ausführung in der angegebenen Zeit kommen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 14 Februar 2015, 17:22:20
Hallo,
versuche gerade mit dem DOIF meine Sonos-Timer zu modifizieren, aber das DOIF meldet mir permanent einen Klammerfehler!

([state.NRW.FerienClone.dum])
(set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume=>5, Enabled => 0})
DOELSE
(set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0})


Dieser Befehl läuft grundsätzlich!
set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume=>5, Enabled => 0}
Was passt hier dem DOIF nicht?
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 14 Februar 2015, 17:34:47
Zitat von: Spartacus am 14 Februar 2015, 17:22:20
Was passt hier dem DOIF nicht?
Es ist bei solchen Fragen immer hilfreich, die genaue Fehlermeldung dann auch mitzuliefern.
Aber ich tippe mal, es liegt am Komma, das bei DOIF ja der Trenner zwischen zwei Befehlen ist.
Eventuell hilft es, den ganze Befehl in ein fhem("...") zu verpacken.
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 14 Februar 2015, 17:36:07
jou, habs grad mal in mein test fhem eingehackt, mit ; als Trennzeichen nimmt er es an. obs auch funzt musst du mal testen
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 14 Februar 2015, 17:52:51
Hi,
danke für den Tipp, das ";" frisst er beim Sonos-Befehl nicht, habe es nun so gemacht!
([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")
({fhem "set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 5, Enabled => 0}"})
DOELSE
({fhem "set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 5, Enabled => 1}"})

Sieht zwar doof aus mit den Klammern, aber es funzt!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 14 Februar 2015, 19:24:48
Zitat von: Spartacus am 14 Februar 2015, 17:52:51
Hi,
danke für den Tipp, das ";" frisst er beim Sonos-Befehl nicht, habe es nun so gemacht!
([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")
({fhem "set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 5, Enabled => 0}"})
DOELSE
({fhem "set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 5, Enabled => 1}"})

Sieht zwar doof aus mit den Klammern, aber es funzt!
Christian

([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 5, Enabled => 0}))
DOELSE
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 5, Enabled => 1}))


hätte es auch getan. Die zusätzlichen runden Klammern besagen: das Komma nicht als Trennzeichen anzusehen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 15 Februar 2015, 07:59:39
Hallo Damian,
Vielen Dank!
Habe ich wieder etwas gelernt!

Grüß,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: vbs am 15 Februar 2015, 21:54:27
Sorry, mal ne blöde Frage. Ich hab wirklich gesucht: In der commandref, im Forum, im Wiki, aber ich finde es einfach nicht :(

Was muss ich schreiben, um im Ausführungsteil den Namen und das Reading des auslösenden Events zu bekommenn (analog zu notify)? Ich hab versucht $DEVICE, $device, %DEVICE.

Zum Beispiel:
([wz_dm7020hd:hdd1_free]<60) ({sendEmail("Die Dreambox %DEVICE hat nur noch %READING GB Speicherplatz frei!")})

Danke!
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 15 Februar 2015, 21:59:45
Zitat von: vbs am 15 Februar 2015, 21:54:27
Sorry, mal ne blöde Frage. Ich hab wirklich gesucht: In der commandref, im Forum, im Wiki, aber ich finde es einfach nicht :(

Was muss ich schreiben, um im Ausführungsteil den Namen und das Reading des auslösenden Events zu bekommenn (analog zu notify)? Ich hab versucht $DEVICE, $device, %DEVICE.

Zum Beispiel:
([wz_dm7020hd:hdd1_free]<60) ({sendEmail("Die Dreambox %DEVICE hat nur noch %READING GB Speicherplatz frei!")})

Danke!

([wz_dm7020hd:hdd1_free]<60) ({sendEmail("Die Dreambox wz_dm720hd hat nur noch [wz_dm7020hd:hdd1_free] GB Speicherplatz frei!")})

Platzhalter wie: $DEVICE, $device, %DEVICE gibt es bei DOIF nicht.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: vbs am 15 Februar 2015, 22:15:34
Ahh, ok, dann kann ich immerhin aufhören zu suchen ;) Danke für die schnelle Info!
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 16 Februar 2015, 10:01:28
Hallo,
ich habe noch ein Problem mit meiner Gartenbeleuchtung festgestellt. Diese schaltet immer um 16:30 Uhr ein. Sie soll aber erst einschalten, wenn es dunkel ist. Also auf " [state.TW.Tageslicht.dum] eq "dunkel"" triggern.

Muss ich dann vor die Startzeiten ein "?" setzen? Reicht das aus? Die Ausschaltzeit soll dann wieder triggern auf 22:30 und 21:30, bzw. 02:00 Uhr!

(
([?16:30-22:30|56] or
[?16:30-22:30] and  [?hl.01.Feiertag:tomorrow] ne "none" or
[?16:30-21:30|01234] and [?hl.01.Feiertag:tomorrow] eq "none" or
[?16:30-02:00] and [?hl.01.Feiertag] eq "Silvester") and
[state.TW.Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on)
DOELSE (set GA.ss.SA.Licht off)
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 16 Februar 2015, 11:08:23
Zitat von: Spartacus am 16 Februar 2015, 10:01:28
Muss ich dann vor die Startzeiten ein "?" setzen? Reicht das aus? Die Ausschaltzeit soll dann wieder triggern auf 22:30 und 21:30, bzw. 02:00 Uhr!
Wenn Du ein ? an die Zeitangabe setzt, triggert weder die Anfangs- noch die Endzeit. Dann wirds also nichts mit automatisch ausschalten.

Wenn das DOIF genauso definiert ist wie es hier steht, kann es aber gar nicht sein, dass um 16:30 Uhr getriggert wird, wenn [state.TW.Tageslicht.dum] in dem Moment nicht "dunkel" ist. Das ist ja per AND eindeutige Mitbedingung für alles andere. Ich gehe also davon aus, dass  [state.TW.Tageslicht.dum] um 16:30 Uhr auf "dunkel" steht, sonst kann das beschriebene Verhalten nicht auftreten.

Wie immer wäre es hilfreich, wenn Du ein list des DOIFs in der fraglichen Situation machst und hier anhängst (oder einfach mal selber kritisch draufschaust). Ich würde mir aber erstmal  [state.TW.Tageslicht.dum] näher anschauen und klären, welchen Status dieser Dummy wann hat.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 16 Februar 2015, 11:12:02
Zitat von: Spartacus am 16 Februar 2015, 10:01:28
Hallo,
ich habe noch ein Problem mit meiner Gartenbeleuchtung festgestellt. Diese schaltet immer um 16:30 Uhr ein. Sie soll aber erst einschalten, wenn es dunkel ist. Also auf " [state.TW.Tageslicht.dum] eq "dunkel"" triggern.

Muss ich dann vor die Startzeiten ein "?" setzen? Reicht das aus? Die Ausschaltzeit soll dann wieder triggern auf 22:30 und 21:30, bzw. 02:00 Uhr!

(
([?16:30-22:30|56] or
[?16:30-22:30] and  [?hl.01.Feiertag:tomorrow] ne "none" or
[?16:30-21:30|01234] and [?hl.01.Feiertag:tomorrow] eq "none" or
[?16:30-02:00] and [?hl.01.Feiertag] eq "Silvester") and
[state.TW.Tageslicht.dum] eq "dunkel") (set GA.ss.SA.Licht on)
DOELSE (set GA.ss.SA.Licht off)


Wenn er um 16:30 Uhr geschaltet hat, dann muss [state.TW.Tageslicht.dum] "dunkel" gewesen sein, da es als letztes mit and verknüpft ist. Wenn es nicht so wäre, dann wäre der Perl-Interpreter kaputt ;). Das Fragezeichen würde nicht nur das Einschalten, sondern auch das Ausschalten verhindern.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 16 Februar 2015, 16:08:40
Hallo,
vielen Dank für die Antworten. Ich checke das heute noch einmal! Ich habe in diesem Zusammenhang aber noch eine andere Frage:
Ich möchte das ganze etwas umschreiben und die Endzeit vorher in einem "if" bestimmen.
Das DOIF soll dann nur das Licht triggern, wenn es dunkel ist und das Reading "SU-30min" < "endTime" ist
([16:30-$endTime] and [state.TW.Tageslicht.dum] eq "dunkel" and (TU_Get_Decrement(ReadingsVal("state.TW.Tageslicht.dum","SU",""), "00:30:00")<$endTime)
(set GA.ss.SA.Licht on)


Die Variable endTime möchte ich im selben DOIF berechnen
{
my $endTime =0
if (hl.01.Feiertag:tomorrow] ne "none" || $wday~=m/[56] ) {
my $endTime = "22:30";;}
elsif ($wday~=m/[01234] and hl.01.Feiertag:tomorrow] eq "none") {
  my $endTime = "21:30";;}
}

kriege es aber nicht kombiniert. Geht das überhaupt, oder muss ich das auslagern.
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 16 Februar 2015, 17:05:56
Zitat[16:30-$endTime]

geht nicht, dann eher:

[16:30-{endTime}]

endTime ist dann eine Funktion in myUtils, die deine Endzeit berechnet und als Return-Wert zurückgibt. Aufgerufen wird sie allerdings nur bei der Definition des DOIF-Moduls und wenn die zuvor berechnete Endzeit triggert.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 16 Februar 2015, 17:35:13
Zitat von: Spartacus am 16 Februar 2015, 16:08:40
Hallo,
vielen Dank für die Antworten. Ich checke das heute noch einmal! Ich habe in diesem Zusammenhang aber noch eine andere Frage:
Ich möchte das ganze etwas umschreiben und die Endzeit vorher in einem "if" bestimmen.
Das DOIF soll dann nur das Licht triggern, wenn es dunkel ist und das Reading "SU-30min" < "endTime" ist
([16:30-$endTime] and [state.TW.Tageslicht.dum] eq "dunkel" and (TU_Get_Decrement(ReadingsVal("state.TW.Tageslicht.dum","SU",""), "00:30:00")<$endTime)
(set GA.ss.SA.Licht on)


Die Variable endTime möchte ich im selben DOIF berechnen
{
my $endTime =0
if (hl.01.Feiertag:tomorrow] ne "none" || $wday~=m/[56] ) {
my $endTime = "22:30";;}
elsif ($wday~=m/[01234] and hl.01.Feiertag:tomorrow] eq "none") {
  my $endTime = "21:30";;}
}

kriege es aber nicht kombiniert. Geht das überhaupt, oder muss ich das auslagern.
Christian

Abgesehen von einigen Fehlern in deinem "Pseudo"-Perl-Code, würde ich es, da du nur zwei Fälle hast, ohne ausgelagerte Funktion lösen:

(([16:30-22:30|7] and [?state.TW.Tageslicht.dum:SU] lt "22:00" or [16:30-21:30|8] and [?state.TW.Tageslicht.dum:SU] lt "21:00")
and [?hl.01.Feiertag:tomorrow] ne "none" and [state.TW.Tageslicht.dum] eq "dunkel")
  (set GA.ss.SA.Licht on)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 16 Februar 2015, 18:37:30
Hi Damian,
habe Dir einen Fall unterschlagen, aber auch 3 Fälle würden sicherlich noch funzen!
Kann man die Uhrzeiten so einfach vergleichen? Das würde die Sache deutlich vereinfachen.

Allerdings steht "7" für Sa,So und "8" für Mo.-Fr.
Bei mir läuft das Ganze aber von So-Do und von Fr-Sa. Deshalb halt "01234" und "56" Aber egal, das verkompliziert die Sache nicht so massiv!

Ja, dass mein Pseudo perl noch Fehler hat, habe ich gemerkt. Bis auf das "($wday ==m/[01234]" läuft mein Pseudo-Code jetzt. Wollte es halt vereinfachen und nicht wday ==0 || wday==1...Perl ist halt nicht so mein Ding!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: earkle am 16 Februar 2015, 19:37:00
Ich habe es endlich geschafft und lasse mir mehrmals Täglich einen Status per Pushover senden.

Jetzt fehlt mir nur noch die Möglichkeit Zeilenumbrüche einzufügen- im normalen Pushover habe ich das mit " \n " geschafft. Hat da jemand eine Idee wie ich es jetzt schaffe?

define doif_PushoverStatus DOIF ([06:00] or [08:00] or [12:00] or [15:00] or [19:00] or [20:00] or [21:00] or [23:59]) (set pushmsg msg 'Status' 'Aussentemp. Küchenfenster  [Aussentemp:temperature]°C - Aussentemp. Garten [CUL_WS_1:temperature]°C - Heizungspreset [Heizungspresets:state]''' -1 '')

Danke und Gruß

Andreas
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 16 Februar 2015, 21:06:29
Zitat von: earkle am 16 Februar 2015, 19:37:00
Ich habe es endlich geschafft und lasse mir mehrmals Täglich einen Status per Pushover senden.

Jetzt fehlt mir nur noch die Möglichkeit Zeilenumbrüche einzufügen- im normalen Pushover habe ich das mit " \n " geschafft. Hat da jemand eine Idee wie ich es jetzt schaffe?

define doif_PushoverStatus DOIF ([06:00] or [08:00] or [12:00] or [15:00] or [19:00] or [20:00] or [21:00] or [23:59]) (set pushmsg msg 'Status' 'Aussentemp. Küchenfenster  [Aussentemp:temperature]°C - Aussentemp. Garten [CUL_WS_1:temperature]°C - Heizungspreset [Heizungspresets:state]''' -1 '')

Danke und Gruß

Andreas

Nimm:


%0A


Gruß
Ingo
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 16 Februar 2015, 22:14:25
Hallo,
noch eine Frage:
Ich habe ein Reading, welches mir diese Info liefert.
{'674' => {'Recurrence_Thursday' => 1,'IncludeLinkedZones' => '1','Volume' => '5','Shuffle' => 0,'Recurrence_Wednesday' => 1,'ProgramURI' => 'x-sonosapi-stream:s99166?sid=254&flags=32','Repeat' => 0,'Recurrence_Once' => 0,'StartTime' => '06:00:00','Duration' => '','Recurrence_Sunday' => 0,'Enabled' => '0','Recurrence_Friday' => 1,'Recurrence_Saturday' => 0,'Recurrence_Tuesday' => 1,'RoomUUID' => 'RINCON_B8E9375131E201400','ProgramMetaData' => '<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="R:0/0/3" parentID="R:0/0" restricted="true"><dc:title>WDR2 Ruhrgebiet</dc:title><upnp:class>object.item.audioItem.audioBroadcast</upnp:class><desc id="cdudn" nameSpace="urn:schemas-rinconnetworks-com:metadata-1-0/">SA_RINCON65031_</desc></item></DIDL-Lite>','Recurrence_Monday' => 1}}
Ich möchte jetzt in einem DOIF auf die ID (hier 674) und Enable =>'0' triggern. Es können auch mehrere IDs in diesem Reading stehen. Habe mir schon eine SUB gebaut, aber kriege den Trigger mit dem DOIF nicht hin!

[Sonos_Bad:AlarmList] ist das Reading!

sub AlarmEnabled($$) {     
my ($player, $alarmID) = @_;
   my $AlarmState=eval(ReadingsVal('$player', 'AlarmList', '{}'))->{$alarmID}{Enabled};
return $AlarmState;
}

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 17 Februar 2015, 07:36:08
Guten Morgen,
kann mir bitte jemand sagen, warum heute morgen das Device "Brunnen" aus dieser Bedingung eingeschaltet war ?
([04:50-06:30|0123456] or [09:00-22:00|06]
and ($month> 2 && $month< 10)
and [Brunnen_Master:state] eq "on")
(set Brunnen on)
DOELSE
(set Brunnen off)

Weder war der Status des "Brunnen_Master" auf "on", noch haben wir März.
Und um 06:30 hätte doch wieder ausgeschaltet werden müssen, war aber noch an....
Im Logdevice sehe ich, das alle paar Sekunden ein "on" gesendet wurde, bis LOVF erreicht war.... :-[
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 17 Februar 2015, 07:58:42
Das and bindet stärker als or, hab ich mal hier gelesen...



([color=red]([/color][04:50-06:30|0123456] or [09:00-22:00|06][color=red])[/color]
and ($month> 2 && $month< 10)
and [Brunnen_Master:state] eq "on")
(set Brunnen on)
DOELSE
(set Brunnen off)


also die or Bedingungen nochmal extra einklammern.


Ein LIST  vom DOIF ist hilfreich. Wenn schon nicht vom Zustand während der Fehler aufgetreten ist, dann wenigstens vom aktuellen Zustand, so kann man wenigstens die attr usw sehen.

das alle paar Sekunden ein on gesendet wird macht ohne entsprechende attr keinen Sinn, könnte man aber auch im LIST sehen.

und wenn du nen overload am HMLAN hattest, konnte er mit sicherheit den off befehl nicht senden, zumindest wenn der nur einmal gekommen ist.

Gruß
Ingo
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 17 Februar 2015, 09:04:44
Hi,
danke für die Antwort. Jaja, die liebe Klammersetzung  ::)
Danke für den Hinweis.
Mit dem "list" muss ich beim nächsten Mal dran denken.
Habe die Klammer jetzt mal gesetzt, und probe das ganze an einem Dummy  8)
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 17 Februar 2015, 09:16:58
das list wäre dennoch hilfreich, da ja noch das Problem mit dem "alle paar sekunden Befehl wiederholen" besteht.
Titel: Antw:neues Modul DOIF
Beitrag von: Bartimaus am 17 Februar 2015, 09:40:57
Arrgh, ursächlich für das dauernde senden war nicht das DOIF, sondern ein altes Notify...., das hatte ich glatt übersehen
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 18 Februar 2015, 15:09:31
Hallo,

Beim Beispiel aus der Dokumentation
Anwendungsbeispiel: Meldung beim Ausbleiben eines Events

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait


wird eine Meldung beim Ausbleiben eines Events ausgelöst. Das ist Ok.
Ich möchte jedoch, dass alle 1800 sec eine Meldung ausgelöst wird, solange bis der Tempsensor wieder sendet.

Ist das mit DOIF machbar?

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 18 Februar 2015, 16:06:50
Zitat von: flurin am 18 Februar 2015, 15:09:31
Hallo,

Beim Beispiel aus der Dokumentation
Anwendungsbeispiel: Meldung beim Ausbleiben eines Events

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait


wird eine Meldung beim Ausbleiben eines Events ausgelöst. Das ist Ok.
Ich möchte jedoch, dass alle 1800 sec eine Meldung ausgelöst wird, solange bis der Tempsensor wieder sendet.

Ist das mit DOIF machbar?

Gruss
flurin

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again",trigger Tempsensor)
attr di_push wait 1800
attr di_push do resetwait



Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 18 Februar 2015, 16:18:14
Zitat von: Damian am 18 Februar 2015, 16:06:50
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again",trigger Tempsensor)


Perfekt, Danke!

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 19 Februar 2015, 11:49:06
Hallo Damian

Bei der Ausführung von mehreren Subs ist mir Folgendes aufgefallen (Auszüge aus fhem.cfg)

Diese Variante (die wäre für mich naheliegend) führt zu einem Fehler:

define di_test DOIF ([test_switch1])( { mySub("A");; mySub("B") } )

so ist Ok:

define di_test DOIF ([test_switch1])( { mySub("A");;;; mySub("B") } )

oder so:

define di_test DOIF ([test_switch1])( { mySub("A") }, { mySub("B") } )

aber auch so:

define di_test DOIF ([test_switch1])( { mySub("A"), mySub("B") } )

Welche Variante soll man bevorzugen?

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Februar 2015, 12:10:03
Zitat von: flurin am 19 Februar 2015, 11:49:06
Hallo Damian

Bei der Ausführung von mehreren Subs ist mir Folgendes aufgefallen (Auszüge aus fhem.cfg)

Diese Variante (die wäre für mich naheliegend) führt zu einem Fehler:

define di_test DOIF ([test_switch1])( { mySub("A");; mySub("B") } )

so ist Ok:

define di_test DOIF ([test_switch1])( { mySub("A");;;; mySub("B") } )

oder so:

define di_test DOIF ([test_switch1])( { mySub("A") }, { mySub("B") } )

aber auch so:

define di_test DOIF ([test_switch1])( { mySub("A"), mySub("B") } )

Welche Variante soll man bevorzugen?

Gruss
flurin

Die letzte dürfte auch nicht funktionieren, ich würde die dritte nehmen.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 19 Februar 2015, 13:06:57
Zitat von: Damian am 19 Februar 2015, 12:10:03
define di_test DOIF ([test_switch1])( { mySub("A"), mySub("B") } )

Die letzte dürfte auch nicht funktionieren

doch jedoch nicht immer! also am besten nicht verwenden.

Edit: nochmals getestet > diese Variante funktioniert bei mir.

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 19 Februar 2015, 18:01:52
Zitat von: flurin am 19 Februar 2015, 13:06:57
doch jedoch nicht immer! also am besten nicht verwenden.

Edit: nochmals getestet > diese Variante funktioniert bei mir.

Gruss
flurin

Dann ist das eine Sache von fhem und nicht von DOIF, dann muss in der Eingabezeile ohne DOIF auch:

{ mySub("A"), mySub("B") }

funktionieren. Warum hier Komma als Trennzeichen funktioniert kann nur Rudi sagen.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 19 Februar 2015, 18:22:40
Zitat von: Damian am 19 Februar 2015, 18:01:52
Dann ist das eine Sache von fhem und nicht von DOIF, dann muss in der Eingabezeile ohne DOIF auch:

{ mySub("A"), mySub("B") }

funktionieren. Warum hier Komma als Trennzeichen funktioniert kann nur Rudi sagen.


Es geht auch aber es stört mich nicht.

Allzu oft liest man "Es geht nicht!" also freuen wir uns, wenn es funktioniert.  :)

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 19 Februar 2015, 21:28:27
Hallo,
ich habe noch ein Problem mit meiner Weckersteuerung
(([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "ein")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "aus")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))


Über das Wecker-Dummy Device "OG.kz.AL.Wecker.dum" (Fhem-Schalter) will ich die Weck-Automatik des Weckers "OG.kz.SON.ZP_S1 " ein, bzw ausschalten.
Wenn die Automatik aktiv ist (Wecker.dum="ein"), und das Ferien-oder Feiertags-Ereignis eintritt, schaltet die Automatik auch brav den Wecker über cmd1 ab. Allerdings sollte der Wecker bei "OG.kz.AL.Wecker.dum = ein" auch wieder einschalten, wenn die Feiertage oder Ferien beendet sind.. Allerdings fehlt hier offenbar ein Trigger! Wo habe ich hier den Fehler?
Mit oder ohne  "do always", es funzt nicht.
Christian.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 20 Februar 2015, 08:22:38
Zitat von: Spartacus am 19 Februar 2015, 21:28:27
(([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))

Wo habe ich hier den Fehler?

Wenn [OG.kz.AL.Wecker.dum] auf "ein" wechselt, ist die Bedingung für cmd1 IMMER erfüllt, denn der Ausdruck [state.NRW.FerienClone.dum] ist immer wahr. Deshalb kann cmd2 nie zum Zuge kommen.

Meinst Du an der Stelle vielleicht:
(([state.NRW.FerienClone.dum] ne "none" or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 20 Februar 2015, 19:04:14
Hallo Brockmann,
danke für den Tipp! Aber das "none" bei state.NRW.FerienClone.dum kann ich nicht nachvollziehen. state.NRW.FerienClone.dum ist ein Dummy,  welches "1" oder "0" annimmt. Bei den Feiertagen ist das schon korrekt! Da muss das "none" drinstehen, das kommt ja direkt aus dem holiday-Modul.

Oder mache ich hier einen Gedankenfehler?

Soweit geht das ja auch! Wenn ich state.NRW.FerienClone.dum  auf "1" setze, wird der Wecker abgeschaltet. Aber das Einschalten funzt halt nicht mehr, wenn ich state.NRW.FerienClone.dum  wieder auf "0" setze! Sind beide Events (Feiertag und Ferien) ungültig ("0" or "none") und schalte das Wecker-Dummy (ein,aus) funzt alles perfekt!
Christian


Titel: Antw:neues Modul DOIF
Beitrag von: holzwurm83 am 20 Februar 2015, 19:16:22
Hallo zusammen,

ich möchte gerne mit meinem Handsender der immer ein reading state toggle erzeugt meine Jalousie steuern. Dabei soll auch der aktuelle Stand (zu,auf oder Stop) der Jalousie berücksichtigt werden.

Ich habe das nun so hinbekommen
define di_Handsender_1 DOIF ([Handsender_1:state:sec] < 0.5 and [test_Hansender] eq "zu") (set test_Hansender auf)\
DOELSEIF\
([Handsender_1:state:sec] < 0.5 and [test_Hansender] eq "auf") (set test_Hansender stop)\
DOELSEIF\
([Handsender_1:state:sec] < 0.5 and [test_Hansender] eq "stop") (set test_Hansender zu)
attr di_Handsender_1 do always
attr di_Handsender_1 room test

bin mir allerdings nicht siecher ob das der Beste und einfachste Weg ist?
Titel: Antw:neues Modul DOIF
Beitrag von: daschauher am 21 Februar 2015, 01:11:32
Hallo,

ich überwache einen Temperatursensor auf Funktion mittels:
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait

Jetzt würde ich gerne auch eine Nachricht bekommen wenn der Sensor wieder in Betrieb geht, also doch wieder sendet.
Stehe aber gerade voll auf dem Schlauch wie ich das machen könnte.
Hat jemand eine Idee oder einen Tip?

gruss
markus
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 21 Februar 2015, 10:30:23
Zitat von: daschauher am 21 Februar 2015, 01:11:32
Hallo,

ich überwache einen Temperatursensor auf Funktion mittels:
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait

Jetzt würde ich gerne auch eine Nachricht bekommen wenn der Sensor wieder in Betrieb geht, also doch wieder sendet.
Stehe aber gerade voll auf dem Schlauch wie ich das machen könnte.
Hat jemand eine Idee oder einen Tip?

gruss
markus

Mit einem Dummy den Tempsensor-Ausfall speichern und entsprechend setzen/löschen.

define sensor_failure dummy
attr sensor_failure setList on off


define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again", set sensor_failure on)
attr di_push wait 1800
attr di_push do resetwait


Nachricht senden, wenn der Tempsensor wieder sendet.

define di_sensor_alive DOIF ([Tempsensor] and [?sensor_failure] eq "on") ({set pushmsg "sensor alive") }, set sensor_failure off)


Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: daschauher am 21 Februar 2015, 11:31:38
Hallo flurin, vielen dank!!
Gruss Markus
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Februar 2015, 15:03:18
Zitat von: Spartacus am 20 Februar 2015, 19:04:14
Aber das Einschalten funzt halt nicht mehr, wenn ich state.NRW.FerienClone.dum  wieder auf "0" setze!

Natürlich funktioniert das nicht und warum das so ist, hatte ich ja auch geschrieben. Wenn Du als Teilbedingung einfach nur [state.NRW.FerienClone.dum] ohne Vergleich nimmst, dann ist diese Teilbedingung IMMER WAHR. Also egal, ob Du [state.NRW.FerienClone.dum] auf 1 oder 0 setzt, dieser Teil der Bedingung ist immer wahr. Solange [OG.kz.AL.Wecker.dum] auf "ein" steht, wird das DOIF deshalb immer die erste Kondition treffen und niemals die zweite. Aber es müsste die zweite treffen um den Wecker auszuschalten. Deshalb kannst Du den Wecker ein-, aber nicht wieder ausschalten. Du musst also [state.NRW.FerienClone.dum] in der Kondition mit irgendwas vergleichen. Womit genau, kann ich aber nur mutmassen, da ich ja nicht weiß, was so für Daten in Deinen Dummy stehen. Deshalb schrieb ich ja auch "Meinst Du vielleicht".
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 15:51:00
Zitat von: Brockmann am 21 Februar 2015, 15:03:18
Natürlich funktioniert das nicht und warum das so ist, hatte ich ja auch geschrieben. Wenn Du als Teilbedingung einfach nur [state.NRW.FerienClone.dum] ohne Vergleich nimmst, dann ist diese Teilbedingung IMMER WAHR. Also egal, ob Du [state.NRW.FerienClone.dum] auf 1 oder 0 setzt, dieser Teil der Bedingung ist immer wahr. Solange [OG.kz.AL.Wecker.dum] auf "ein" steht, wird das DOIF deshalb immer die erste Kondition treffen und niemals die zweite. Aber es müsste die zweite treffen um den Wecker auszuschalten. Deshalb kannst Du den Wecker ein-, aber nicht wieder ausschalten. Du musst also [state.NRW.FerienClone.dum] in der Kondition mit irgendwas vergleichen. Womit genau, kann ich aber nur mutmassen, da ich ja nicht weiß, was so für Daten in Deinen Dummy stehen. Deshalb schrieb ich ja auch "Meinst Du vielleicht".
Hallo Brockmann,
ok, mag sein! Dann müsste der Code also so aussehen, da "state.NRW.FerienClone.dum" die Werte "1" oder "0" annehmen können.

(([state.NRW.FerienClone.dum] eq "1" or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "ein")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "aus")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))


Allerdings triggert er immer noch auf cmd1, wenn FerienClone von "1" auf "0" gesetzt wird!  Ich verstehe das irgendwie noch nicht!
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Februar 2015, 16:20:36
Zitat von: Spartacus am 21 Februar 2015, 15:51:00
Allerdings triggert er immer noch auf cmd1, wenn FerienClone von "1" auf "0" gesetzt wird!  Ich verstehe das irgendwie noch nicht!
Probier es mal mit [state.NRW.FerienClone.dum] == 1, weil es ja ein numerischer Vergleich ist.
Ansonsten in der Situation list <Name Deines DOIFs> und entweder selbst analysieren oder hier posten.
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 21 Februar 2015, 16:27:07
Zitat von: Brockmann am 21 Februar 2015, 16:20:36
Probier es mal mit [state.NRW.FerienClone.dum] = 1, weil es ja ein numerischer Vergleich ist.
Ansonsten in der Situation list <Name Deines DOIFs> und entweder selbst analysieren oder hier posten.

ich will nicht klugscheißen, aber mit einem = wirds wohl nicht funzen, müssen schon == sein.
Titel: Antw:neues Modul DOIF
Beitrag von: Brockmann am 21 Februar 2015, 16:44:58
Zitat von: automatisierer am 21 Februar 2015, 16:27:07
ich will nicht klugscheißen, aber mit einem = wirds wohl nicht funzen, müssen schon == sein.
Wo Du Recht hast...
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 16:49:47
Hi,
sorry! Es funzt nicht! Die Events von "state.NRW.FerienClone.dum" kann ich im EventLog sehen, die kommen sauber. "OG.kz.AL.Wecker.dum" habe ich permanent auf "ein" stehen. aber es wird immer cmd1 ausgeführt. Egal welchen Wert ich in "state.NRW.FerienClone.dum" einstelle!
nternals:
   CFGFN      Config/98-Sonos.cfg
   DEF        (([state.NRW.FerienClone.dum] == 1 or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "ein")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "aus")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
   NAME       di.01.OG.kz.SON.ZP_S1
   NR         142
   NTFY_ORDER 50-di.01.OG.kz.SON.ZP_S1
   STATE      ein
   TYPE       DOIF
   Readings:
     2015-02-21 16:42:27   cmd_event       state.NRW.FerienClone.dum
     2015-02-21 16:42:27   cmd_nr          1
     2015-02-21 16:43:20   e_state.NRW.FerienClone.dum_STATE 1
     2015-02-21 16:42:27   state           ein
   Condition:
     0          (InternalDoIf('state.NRW.FerienClone.dum','STATE','') == 1 or ReadingValDoIf('hl.01.Feiertag.cdm','today','') ne "none")  and InternalDoIf('OG.kz.AL.Wecker.dum','STATE','') eq "ein"
     1          InternalDoIf('OG.kz.AL.Wecker.dum','STATE','') eq "ein"
     2          InternalDoIf('OG.kz.AL.Wecker.dum','STATE','') eq "aus"
   Devices:
     0           state.NRW.FerienClone.dum hl.01.Feiertag.cdm OG.kz.AL.Wecker.dum
     1           OG.kz.AL.Wecker.dum
     2           OG.kz.AL.Wecker.dum
     all         state.NRW.FerienClone.dum hl.01.Feiertag.cdm OG.kz.AL.Wecker.dum
   Do:
     0          (set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0})
     1          (set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1})
     2          (set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0})
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           state.NRW.FerienClone.dum:STATE OG.kz.AL.Wecker.dum:STATE
     1           OG.kz.AL.Wecker.dum:STATE
     2           OG.kz.AL.Wecker.dum:STATE
     all         state.NRW.FerienClone.dum:STATE OG.kz.AL.Wecker.dum:STATE
   Readings:
     0           hl.01.Feiertag.cdm:today
     all         hl.01.Feiertag.cdm:today
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      Weckersteuerung
   cmdState   ein|ein|aus
   group      Sonos Script
   room       98-Sonos


Christian
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 21 Februar 2015, 17:24:48
Zitat von: Spartacus am 21 Februar 2015, 16:49:47
Hi,
sorry! Es funzt nicht! Die Events von "state.NRW.FerienClone.dum" kann ich im EventLog sehen, die kommen sauber. "OG.kz.AL.Wecker.dum" habe ich permanent auf "ein" stehen. aber es wird immer cmd1 ausgeführt. Egal welchen Wert ich in "state.NRW.FerienClone.dum" einstelle!
nternals:
   CFGFN      Config/98-Sonos.cfg
   DEF        (([state.NRW.FerienClone.dum] == 1 or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "ein")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "aus")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
   NAME       di.01.OG.kz.SON.ZP_S1
   NR         142
   NTFY_ORDER 50-di.01.OG.kz.SON.ZP_S1
   STATE      ein
   TYPE       DOIF
   Readings:
     2015-02-21 16:42:27   cmd_event       state.NRW.FerienClone.dum
     2015-02-21 16:42:27   cmd_nr          1
     2015-02-21 16:43:20   e_state.NRW.FerienClone.dum_STATE 1
     2015-02-21 16:42:27   state           ein
   Condition:
     0          (InternalDoIf('state.NRW.FerienClone.dum','STATE','') == 1 or ReadingValDoIf('hl.01.Feiertag.cdm','today','') ne "none")  and InternalDoIf('OG.kz.AL.Wecker.dum','STATE','') eq "ein"
     1          InternalDoIf('OG.kz.AL.Wecker.dum','STATE','') eq "ein"
     2          InternalDoIf('OG.kz.AL.Wecker.dum','STATE','') eq "aus"
   Devices:
     0           state.NRW.FerienClone.dum hl.01.Feiertag.cdm OG.kz.AL.Wecker.dum
     1           OG.kz.AL.Wecker.dum
     2           OG.kz.AL.Wecker.dum
     all         state.NRW.FerienClone.dum hl.01.Feiertag.cdm OG.kz.AL.Wecker.dum
   Do:
     0          (set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0})
     1          (set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1})
     2          (set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0})
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           state.NRW.FerienClone.dum:STATE OG.kz.AL.Wecker.dum:STATE
     1           OG.kz.AL.Wecker.dum:STATE
     2           OG.kz.AL.Wecker.dum:STATE
     all         state.NRW.FerienClone.dum:STATE OG.kz.AL.Wecker.dum:STATE
   Readings:
     0           hl.01.Feiertag.cdm:today
     all         hl.01.Feiertag.cdm:today
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      Weckersteuerung
   cmdState   ein|ein|aus
   group      Sonos Script
   room       98-Sonos


Christian

cmdState Ein|Ein|Aus soll doch heißen, dass cmd1 und cmd2 einschaten und cmd3 ausschalten soll. Falsch?

Wenn ich dazu in deinem Listing unter Do: gucke, deute ich die Ausführungsteile mal so, dass cmd1 und cmd3 ausschalten und nur cmd2 einschaltet.

Der Rest ist anfürsich ganz einfach, wenn die Bedingungen von cmd1 wahr sind, wird cmd1 ausgeführt. Falls die Bedingungen nicht wahr sind, und dennoch cmd1 ausgeführt wird, ist, wie Damian so schön sagte, dein Perl Interpreter defekt.

Bei deinem listing ist z.B. die erste Bedingung 'wahr' und die dritte Bedingung 'wahr' da diese mit and verküpft sind, wird cmd1 ausgeführt, also alles richtig. wenn state.NRW.FerienClone.dum z.B. '0' ist und dennoch cmd1 ausgeführt wird, dann wird wohl die Ausgabe von hl.01.Feiertag.cdm:today nicht 'none' sein, dass solltest du mal überprüfen.

so lange die Bedingungen für cmd1 wahr sind, bleibt das DOIF da stehen, und überprüft die Bedingungen für cmd2 und cmd3 nicht.

Gruß
Ingo


EDIT: Ich kenne das holiday-Modul nicht, habs nur grad mal überflogen, aber ich vermute das da der Fehler liegt. kannst ja mal ein 'list hl.01.Feiertag.cdm' machen und posten.

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 18:00:41
Hallo,
ich glaube wirklich es ist der perl-Interpreter! Der Status vom holiday-Modul wird per clonedummy an "hl.01.Feiertag.cdm" übertragen.

Hier das Listing:
Internals:
   CFGFN      Config/99-Dienste.cfg
   DEF        hl.01.Feiertag
   NAME       hl.01.Feiertag.cdm
   NOTIFYDEV  hl.01.Feiertag
   NR         195
   NTFY_ORDER 50-hl.01.Feiertag.cdm
   STATE      defined
   TYPE       cloneDummy
   Readings:
     2015-02-21 15:37:14   state           defined
     2015-02-21 00:00:02   today           none
     2015-02-21 00:00:02   tomorrow        none
     2015-02-21 00:00:02   yesterday       none
Attributes:
   alias      Feiertag
   cloneIgnore 1
   group      Kalender
   room       99-Dienste


cmdState Ein|Ein|Aus, bedeutet in diesem Zusammenhang, dass die Weckerautomatik von fhem in den ersten beiden Fällen greift und im letzten Fall durch den Switch "OG.kz.AL.Wecker.dum" außer Kraft gesetzt wird. Dann kann ich den Wecker nur noch zu Fuß über den Sonos-Controller steuern.

Und hier noch der Schalter:
Internals:
   CFGFN      Config/98-Sonos.cfg
   NAME       OG.kz.AL.Wecker.dum
   NR         146
   STATE      ein
   TYPE       dummy
   Readings:
     2015-02-21 15:41:20   state           ein
Attributes:
   alias      Weckautomatik
   devStateIcon aus:Wecker.Aus ein:Wecker.Wochentags
   group      Sonos Wecker
   room       98-Sonos
   webCmd     ein:aus

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 18:37:27
Zitat von: Spartacus am 21 Februar 2015, 18:00:41
Hallo,
ich glaube wirklich es ist der perl-Interpreter!

Da kann ich nur schmunzeln. Es gab aber ein Problem mit der 0 im Dummy bei DOIF.

Schau mal, ob du die aktuelle Version von DOIF hast.

Sonst kannst du immer etwas vereinfachen, um es zu testen, hier z. B.

DOIF ([state.NRW.FerienClone.dum] == 1)(set bla on) DOELSE (set bla off)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: automatisierer am 21 Februar 2015, 18:40:45
Zitat von: Spartacus am 21 Februar 2015, 18:00:41

cmdState Ein|Ein|Aus, bedeutet in diesem Zusammenhang, dass die Weckerautomatik von fhem in den ersten beiden Fällen greift und im letzten Fall durch den Switch "OG.kz.AL.Wecker.dum" außer Kraft gesetzt wird. Dann kann ich den Wecker nur noch zu Fuß über den Sonos-Controller steuern.

bei cmd1 machst du aber auch aus.
Zitat
(([state.NRW.FerienClone.dum] == 1 or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 19:00:13
Hallo,
nochmals danke für Eure Unterstützung, aber ich drehe mich im Kreis!
Ich habe heute ein Update gemacht. Das DOIF sollte aktuell sein!
Ich habe jetzt den Code gekürzt und die Feiertage rausgenommen.
(([state.NRW.FerienClone.dum] == 1)  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "ein")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "aus")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))

Aber es läuft einfach nicht!

Mit dem set Befehl schalte ich den Alarm im Sonos ab. Das ist ja auch richtig. Wenn Feiertag ist oder Ferien sind, dann brauche ich keinen Wecker!

Wenn keine Ferien sind und kein Feiertag ist, dann sollte cmd2 greifen. An WE ist das wurscht, da der Sonos Wecker nur von Mo-Fr. im Sonos selber konfiguriert ist.

Mit meinem Dummy Switch will ich jetzt diese ganze Ferien-Automatik abschalten! Heißt: wenn "OG.kz.AL.Wecker.dum" auf "aus" steht, gilt dir Konfig im Sonos. Hier soll deshalb r cmd3 kommen und eigentlich gar nix machen.

Christian
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 21 Februar 2015, 19:03:44
Bei den vielen Versuchen die Du schon unternommen hast blickt wahrscheinlich niemand mehr so recht was jetzt schon alles versucht wurde...

ich würde mal

== 1 gegen eq "1" tauschen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 19:23:42
Zitat von: der-Lolo am 21 Februar 2015, 19:03:44
Bei den vielen Versuchen die Du schon unternommen hast blickt wahrscheinlich niemand mehr so recht was jetzt schon alles versucht wurde...

ich würde mal

== 1 gegen eq "1" tauschen.

das ist egal, der Perl-Interpreter ist da sehr großzügig ;)

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 20:04:49
Zitat von: der-Lolo am 21 Februar 2015, 19:03:44
Bei den vielen Versuchen die Du schon unternommen hast blickt wahrscheinlich niemand mehr so recht was jetzt schon alles versucht wurde...

ich würde mal

== 1 gegen eq "1" tauschen.
Hi,
damit sind wir angefangen...

Ich habe den Code jetzt total abgespeckt und selbst das funktioniert nicht!
Es gibt die Dummy Devices "state.NRW.FerienClone.dum" und "OG.kz.AL.Wecker.dum"

"OG.kz.AL.Wecker.dum" steht auf "ein". Ändere ich dieses Dummy Device auf "aus", trifft cmd 3 zu. Schalte ich es auf "ein" kommt cmd2. Soweit alles gut.

Jetzt stelle ich "OG.kz.AL.Wecker.dum" auf "ein" und schallte "state.NRW.FerienClone.dum" von "0" nach "1". Es wird cmd1 ausgeführt. Nun schalte ich "state.NRW.FerienClone.dum" auf "5" und die Lampe bleibt aus. Es triggert cmd1. Das ist falsch!

define di.01.OG.kz.SON.ZP_S1 DOIF ([state.NRW.FerienClone.dum] eq "1") \
(set Lampe off)\
DOELSEIF\
([OG.kz.AL.Wecker.dum] eq "ein")\
(set Lampe on)\
DOELSEIF\
([OG.kz.AL.Wecker.dum] eq "aus")\
(set Lampe off)
attr di.01.OG.kz.SON.ZP_S1 alias Weckersteuerung
attr di.01.OG.kz.SON.ZP_S1 cmdState ein|ein|aus
attr di.01.OG.kz.SON.ZP_S1 group Sonos Script
attr di.01.OG.kz.SON.ZP_S1 room 98-Sonos

Das gibt es doch gar nicht, oder?
Christian

NACHTRAG:
DOIF-Version:
$Id: 98_DOIF.pm 8031 2015-02-18 17:49:10Z damian-s $
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 20:11:42
Zitat von: Spartacus am 21 Februar 2015, 20:04:49
Hi,
damit sind wir angefangen...

Ich habe den Code jetzt total abgespeckt und selbst das funktioniert nicht!
Es gibt die Dummy Devices "state.NRW.FerienClone.dum" und "OG.kz.AL.Wecker.dum"

"OG.kz.AL.Wecker.dum" steht auf "ein". Ändere ich dieses Dummy Device auf "aus", trifft cmd 3 zu. Schalte ich es auf "ein" kommt cmd2. Soweit alles gut.

Jetzt stelle ich "OG.kz.AL.Wecker.dum" auf "ein" und schallte "state.NRW.FerienClone.dum" von "0" nach "1". Es wird cmd1 ausgeführt. Nun schalte ich "state.NRW.FerienClone.dum" auf "5" und die Lampe bleibt aus. Es triggert cmd1. Das ist falsch!

define di.01.OG.kz.SON.ZP_S1 DOIF ([state.NRW.FerienClone.dum] eq "1") \
(set Lampe off)\
DOELSEIF\
([OG.kz.AL.Wecker.dum] eq "ein")\
(set Lampe on)\
DOELSEIF\
([OG.kz.AL.Wecker.dum] eq "aus")\
(set Lampe off)
attr di.01.OG.kz.SON.ZP_S1 alias Weckersteuerung
attr di.01.OG.kz.SON.ZP_S1 cmdState ein|ein|aus
attr di.01.OG.kz.SON.ZP_S1 group Sonos Script
attr di.01.OG.kz.SON.ZP_S1 room 98-Sonos

Das gibt es doch gar nicht, oder?
Christian

NACHTRAG:
DOIF-Version:
$Id: 98_DOIF.pm 8031 2015-02-18 17:49:10Z damian-s $

Wenn du "state.NRW.FerienClone.dum" auf "5" schaltest ist zwar die erste Bedingung falsch aber die anderen Bedingungen werden erst gar nicht ausgewertet, weil  state.NRW.FerienClone.dum dort nicht vorkommt. Es bleibt der Zustand cmd1.

Es funktioniert alles so, wie programmiert und in der Commandref des Moduls beschrieben ist.

Gruß

Damian

Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 20:24:34
Hallo,
ok! Dann kann man meine Anwendung offenbar nicht mit einem DOIF lösen!
Ich dachte, es würden immer alle "DOIFELSE" -Fälle ausgewertet, wenn eine Bedingungen nicht zutrifft!

Dann versuche ich es mal mit dem klassisches "if" !
Danke,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 20:29:22
Zitat von: Spartacus am 21 Februar 2015, 20:24:34
ok! Dann kann man meine Anwendung offenbar nicht mit einem DOIF lösen!

Kannst du schon, du musst dir nur überlegen in den anderen Fällen welchen Zustand [state.NRW.FerienClone.dum] haben soll z. B.

define di.01.OG.kz.SON.ZP_S1 DOIF ([state.NRW.FerienClone.dum] eq "1") \
(set Lampe off)\
DOELSEIF\
([OG.kz.AL.Wecker.dum] eq "ein" and (state.NRW.FerienClone.dum] ne "1")\
(set Lampe on)\
DOELSEIF\
([OG.kz.AL.Wecker.dum] eq "aus" and [state.NRW.FerienClone.dum] ne "1" )\
(set Lampe off)


Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 21 Februar 2015, 20:30:13
das erschreckt mich jetzt auch ein bisschen... bedeutet das nun wirklich das wenn ein trigger der nur in bedingung 1 sitzt triggert und diese dann nicht mehr zutrifft das dann nicht in den weiteren DOELSEIFs geschaut wird welches wahr ist?

Ich dachte bis jetzt das es so läuft und setze z.b. DOELSE gezielt überwachend (logeintrag) ein.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 20:34:30
Zitat von: der-Lolo am 21 Februar 2015, 20:30:13
das erschreckt mich jetzt auch ein bisschen... bedeutet das nun wirklich das wenn ein trigger der nur in bedingung 1 sitzt triggert und diese dann nicht mehr zutrifft das dann nicht in den weiteren DOELSEIFs geschaut wird welches wahr ist?

Ich dachte bis jetzt das es so läuft und setze z.b. DOELSE gezielt überwachend (logeintrag) ein.

DOELSE wird im Gegensatz zu DOELSIF immer ausgeführt, wenn irgendeine andere Bedingung nicht erfüllt wird. Ansonsten steht in der Commandref:

ZitatDie Angaben werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Hinzu kommt, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event auch das Device beinhalten.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: der-Lolo am 21 Februar 2015, 20:43:12
Ok, das erklärt mir jetzt warum ich immer wiedermal ärger mit meinem HarmonyDOIF habe...
Danke, ich werde es entsprechend umbauen.
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 20:45:58
Zitat von: der-Lolo am 21 Februar 2015, 20:43:12
Ok, das erklärt mir jetzt warum ich immer wiedermal ärger mit meinem HarmonyDOIF habe...
Danke, ich werde es entsprechend umbauen.

Das war immer schon so, das andere Vorgehen (immer alle Bedingungen auszuwerten) hat sich bei mir bereits in der Entwicklungszeit, bevor ich das Modul veröffentlicht hatte, nicht bewährt.

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: Spartacus am 21 Februar 2015, 20:56:19
Hallo,
Danke für die klärenden Worte!

Ich lese die Commandref eigentlich immer. Aber für einen Nicht-Programmierer ist Logik nicht immer logisch! Ich denke oft, "jetzt haste es gerafft" und dann kommt die Ernüchterung!  Ich gebe nicht auf!

Danke an alle,
Christian
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 21 Februar 2015, 21:02:10
Zitat von: Spartacus am 21 Februar 2015, 20:56:19
Hallo,
Danke für die klärenden Worte!

Ich lese die Commandref eigentlich immer. Aber für einen Nicht-Programmierer ist Logik nicht immer logisch! Ich denke oft, "jetzt haste es gerafft" und dann kommt die Ernüchterung!  Ich gebe nicht auf!

Danke an alle,
Christian

Da kann ich dich beruhigen, selbst Programmierer müssen etwas mehr denken, denn bei DOIF kommt im Gegensatz zu einem einfachen if-elsif.. Befehl eine weitere Dimension hinzu, nämlich das "Trigger-Event".

Gruß

Damian
Titel: Antw:neues Modul DOIF
Beitrag von: flurin am 22 Februar 2015, 16:29:09
Hallo Damian

Es fällt auf, dass das Schreiben von Postings in diesem Thread immer langsamer wird. Die Datenbank scheint überfordert zu sein.
Ev. ist es sinnvoll, ein neues Thread zu starten und das Bestehende zu schliessen.

Gruss
flurin
Titel: Antw:neues Modul DOIF
Beitrag von: Damian am 22 Februar 2015, 23:02:21
Zitat von: flurin am 22 Februar 2015, 16:29:09
Hallo Damian

Es fällt auf, dass das Schreiben von Postings in diesem Thread immer langsamer wird. Die Datenbank scheint überfordert zu sein.
Ev. ist es sinnvoll, ein neues Thread zu starten und das Bestehende zu schliessen.

Gruss
flurin

Dann werde ich den Thread hier in den nächsten Tagen schließen. Dass es dieses Modul gibt, dürfte inzwischen vielen bekannt sein.

Gruß

Damian