Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

#1245
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maxritti

#1246
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

Invers

#1247
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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

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

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

maxritti

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?

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maxritti

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

Damian

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

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

Damian

#1255
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

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

maxritti

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)

duke-f

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)
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
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

duke-f

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
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite