Hauptmenü

DOIF und Mailcheck Modul

Begonnen von dennis_n, 08 September 2018, 10:57:12

Vorheriges Thema - Nächstes Thema

dennis_n

Hi,

ich nutze das mailcheck Modul um ein bestimmtes Postfach abzurufen. Wenn eine Mail ankommt, ändern sich die Readings From und Subject im entsprechenden Device.
Wie müsste denn mein DOIF aussehen, wenn ich auf die Änderung des Subject-Wertes reagieren will?

Also ich will per DOIF das Reading Subjekt überwachen und bei jeglicher Änderung den Inhalt des Readings woanders hinschreiben.

Aber ich komme nicht drauf, wie ich die Änderung des Readings überwache und den Inhalt in ein anderes Reading schreibe.
Kann mir da jemand helfen?

Danke.

Ellert

Dafür benötigst Du kein DOIF, Du kannst im Mailcheckgerät ein userReadings anlegen dass Subjekt bei Änderung zerlegt und in andere Readings schreibt.
https://commandref.fhem.de/commandref_DE.html#userReadings

dennis_n

Hallo Ellert,

Danke für den Tipp, aber so richtig habe ich das noch nicht verstanden. Trotz commandref.
Es kann bei mir nur 5 verschiedene Subjects in den Mails geben.

Ich habe einen Dummy der im Prinzip diese 5 Subjects als Reading hat und immer wenn ich eine Mail mit dem entsprechenden Subject erhalten habe, soll das Reading im Dummy auf 1 gesetzt werden.
Nach 30 Minuten, lasse ich das Reading wieder auf 0 setzen.
Nehmen wir an, ich erhalte eine Mail mit dem Subject "MAIL 1" dann möchte ich in dem Dummy das Reading Mail 1 auf "1" setzen. Nach 30 Minuten wieder auf 0.
Wenn eine Mail mit dem Subject "MAIL 2" empfagen wird, soll das Reading im Dummy namens Mail 2 auf "1" gesetzt werden usw.

Gruss
Dennis

OdfFhem


Ellert

#4
Das hier
Zitat von: dennis_n am 08 September 2018, 11:53:55
Es kann bei mir nur 5 verschiedene Subjects in den Mails geben.

Ich habe einen Dummy der im Prinzip diese 5 Subjects als Reading hat und immer wenn ich eine Mail mit dem entsprechenden Subject erhalten habe, soll das Reading im Dummy auf 1 gesetzt werden.
Nach 30 Minuten, lasse ich das Reading wieder auf 0 setzen.
Nehmen wir an, ich erhalte eine Mail mit dem Subject "MAIL 1" dann möchte ich in dem Dummy das Reading Mail 1 auf "1" setzen. Nach 30 Minuten wieder auf 0.
Wenn eine Mail mit dem Subject "MAIL 2" empfagen wird, soll das Reading im Dummy namens Mail 2 auf "1" gesetzt werden usw.
ist aber eine andere Fragestellung als dies
ZitatAlso ich will per DOIF das Reading Subjekt überwachen und bei jeglicher Änderung den Inhalt des Readings woanders hinschreiben.
Was ist das Ziel dieser Aktion, was nützen Readings, die kurz auf 1 gesetzt werden?
Zitataber so richtig habe ich das noch nicht verstanden
Was genau hast Du nicht verstanden? Hast Du schon etwas versucht?

dennis_n

Hi, sorry für die späte Antwort.

Also hier mal mein DOIF. Vielleicht drücke ich mich nur falsch aus bzw. wäre es gut, wenn ihr genau wisst um was es mir geht:

([mail:Subject] eq "ALARM Fenster1") (setreading Alarmanlage Fenster1 1)(setreading Alarmanlage Fenster1 0)

DOELSEIF

([mail:Subject] eq "ALARM Fenster2") (setreading Alarmanlage Fenster2 1)(setreading Alarmanlage Fenster2 0)

DOELSEIF

([mail:Subject] eq "ALARM Fenster3") (setreading Alarmanlage Fenster3 1)(setreading Alarmanlage Fenster3 0)

DOELSEIF

([mail:Subject] eq "ALARM Fenster4") (setreading Alarmanlage Fenster4 1)(setreading Alarmanlage Fenster4 0)


Dann hab ich das Attribut wait gesetzt, welches so aussieht:

0,30:0,30:0,30:0,30

meine Frage hierzu: Geht das noch eleganter oder ist das so schon richtig, wie ich das mache?
Im Prinzip setzt mir das DOIF bei Maileingang und entsprechendem Subject das Dummy reading auf 1 und 30 Sekunden später wieder auf 0.
Sowas brauche ich.

Gruss
Dennis


Damian

#6
Das kannst du so lassen oder eben eleganter machen ;)

define di_count DOIF {                              # Block zur Auswertung des Ereignisses
   my $fenster= [mail:"Subject: ALARM Fenster":"Subject: Alarm (.*)",""];
   fhem"setreading Alarmanlage $fenster 1";
   set_Timer("Timer $fenster",30);                  # setze Event-Timer auf 30 Sekunden
}
{                                                   # Block für die Auswertung nach Ablauf des Timers
  if ([$SELF:"^Timer"]) {                           # wenn Timer nach 30 Sekunden abläuft
    my ($timer,$fenster)=split(" ",$event);
    fhem"setreading Alarmanlage $fenster 0";
  }
}


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

dennis_n

WOW, das hätte mich definitiv überfordert.

Probiere ich gleich aus und gebe Rückmeldung.

Danke Dir

Gruss
Dennis

Per

Zitat von: dennis_n am 08 September 2018, 20:59:38oder ist das so schon richtig, wie ich das mache?
Wenn du nur aller >31 min eine Mail bekommst, kann das so funktionieren. Ansonsten zerschiesst du dir deine Wait-Timer und Readings der Alarmanlage werden nicht zurückgesetzt.