Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Puschel74

#570
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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Spartacus

Ah!, verstehe!
Danke für die Aufklärung. Das ist genial!
....und jetzt ab in die Sonne....  8) 8) 8)
Christian.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Wuppi68

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)
FHEM unter Proxmox als VM

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Damian

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

Wuppi68

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
FHEM unter Proxmox als VM

Spartacus

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

Damian

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

Wuppi68

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)
  )
)
FHEM unter Proxmox als VM

Spartacus

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

Damian

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

Spartacus

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

satprofi

#582
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
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

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

satprofi

sorry,
zeile lautet

DOELSE ([Fenster_WZ] eq "Closed" and [Heizungsmode] eq "auto") (set HZ_Wohnzimmer_Clima controlMode auto)
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram