Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

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

Michi240281

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?
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

satprofi

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

Damian

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

Damian

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

satprofi

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

Sidey

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
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Damian

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

Sidey

Hallo Damian ,

Im log habe ich zwar nichts gefunden, aber Du hattest recht.
Es waren die doppelten @..

Jetzt klappts, vielen Dank.


Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

satprofi

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

satprofi

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

Damian

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

satprofi

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Spartacus

#1049
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)

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