Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

satprofi

Aha. Danke.

Gesendet von meinem GT-I9300

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

Spartacus

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

Brockmann

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.

Damian

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

Spartacus

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

Spartacus

Hi Damian,
ja! was soll ich sagen, Du hattest recht! Deine Anweisung funktioniert und löst mein Problem!

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

oniT

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
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

Damian

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

oniT

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
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

Damian

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

Jens_B

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
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

Damian

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


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

Jens_B

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
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

oniT

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
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP