Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

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

Bartimaus

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
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

maxritti

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?

Bartimaus

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
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

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

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

maxritti

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

Brockmann

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.

Damian

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

moonsorrox

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..!
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

maxritti

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. :)

Damian

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

Bartimaus

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") })
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

maxritti

#1212
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?

Damian

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

maxritti

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