FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Domjo75 am 14 Oktober 2016, 11:12:44

Titel: email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 14 Oktober 2016, 11:12:44
Hallo zusammen,
nach einem guten halben Jahr pause mache ich nun wieder an meiner Haussteuerung weiter.
Heute morgen habe ich versucht meinen implementierten Abfallkalender mit der email Funktion zu verknüpfen.

Ich habe bereits einen funktionierenden Abfallkalender, der per Google ICS die Termine abholt. Das ganze wird mir im FTUI per Icon angezeigt. Am Tag des "Rausstell-Termins" drehen sich die Icon. Klappt super, nur muss man da auch immer reinschauen :)

Eine eMail Funktion ist auch bereits eingebaut. Im Moment macht die aber nichts anderes als täglich eine Test-Mail rauszuschicken.

Nun würde ich das ganze gerne verknüpfen. Ich möchte also eine Mail am "Rausstell-Termin" verschicken, die mich erinnert, dass die Tonne raus muss.

Könnt Ihr mir da weiterhelfen, ich steh komplett auf dem Schlauch.

Gruss
Dominik
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 09:44:54
Keiner ein Idee?
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Tedious am 19 Oktober 2016, 09:47:38
Ich würde ein DOIF nehmen. Wenn Bedingung (z.B. Müll in Tagen =1) erfüllt ist sende die EMail "Müll muss raus".
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: JoWiemann am 19 Oktober 2016, 09:50:20
Du musst schon ein bisschen mehr an Infos geben. Welchen Abfallkalender (Modul, Eigenlösung), wie sieht die Definition aus ( ein list wäre hilfreich), welche E-Mail Funktion?

Grüße Jörg


Gesendet von iPhone mit Tapatalk
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 10:13:14
OK...
ich habe für jede Mülltonne ein Dummy Device angelegt, welches jeweils die verbleibenden Tage als STATE anzeigt.

Name BIOMUELL
State 1

Name PAPIER
State 9

Ich versuche das mal aus dem Beispiel der Batterie in der Hilfe abzuleiten:

define di_BIOMUELL DOIF ([":BIOMUELL: 1"] and [?BIOMUELL:$DEVICE] ne "1") ({DebianMail('yourname@gmail.com', 'FHEM - Mülltonne: $DEVICE rausstellen')}, setreading BIOMUELL $DEVICE 1)

attr di_BIOMUELL do always
attr di_BIOMUELL notexist "novalue"

So etwa? Wie stelle ich sicher, dass mich das DOIF nicht alle 3min mit einer Mail beglückt?

Gruss
Dominik
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 10:25:13
Zitat von: JoWiemann am 19 Oktober 2016, 09:50:20
Du musst schon ein bisschen mehr an Infos geben. Welchen Abfallkalender (Modul, Eigenlösung), wie sieht die Definition aus ( ein list wäre hilfreich), welche E-Mail Funktion?

Hilft mein Code weiter? Ich habe das irgendwann mal im Forum gefunden und eingebaut.
#MuellKalender

define Abfall Calendar ical url https://calendar.google.com/calendar/ical/6l1gak0ar6rxxxxxxxxxxxxxxxgroup.calendar.google.com/private-374dee4e884xxxxxxxxxxxxx334fa4/basic.ics 43200
attr Abfall group Abfall
attr Abfall room Information

define Abfall_at at *00:15:00 set Abfall update
attr Abfall_at group Abfall
attr Abfall_at room Status

define Abfall_Update notify Abfall:(modeUpcoming|modeAlarmOrStart).* {Abfalltermine("$EVENT")}
attr Abfall_Update group Abfall
attr Abfall_Update room Status

define Papier dummy
attr Papier event-on-change-reading state
attr Papier group Abfall
attr Papier room Status

define Restmuell dummy
attr Restmuell event-on-change-reading state
attr Restmuell group Abfall
attr Restmuell room Status

define Biomuell dummy
attr Biomuell event-on-change-reading state
attr Biomuell group Abfall
attr Biomuell room Status

define Plastik dummy
attr Plastik event-on-change-reading state
attr Plastik group Abfall
attr Plastik room Status

define Muellalert dummy
attr Muellalert event-on-change-reading state
attr Muellalert group Abfall
attr Muellalert room Status

define at_Muellalert at *00:20:00 {if(Value("Papier") eq "1" || Value("Restmuell") eq "1" || || Value("Biomuell") eq "1" Value("Plastik") eq "1") {fhem("set Muellalert on")} else { fhem("set Muellalert off")}}
attr at_Muellalert group Abfall
attr at_Muellalert room Status


Kann ich einfach diesen Befehl missbrauchen und noch ein ({DebianMail('yourname@gmail.com', 'FHEM - Mülltonne: $DEVICE rausstellen')} anhängen?
define at_Muellalert at *00:20:00 {if(Value("Papier") eq "1" || Value("Restmuell") eq "1" || || Value("Biomuell") eq "1" Value("Plastik") eq "1") {fhem("set Muellalert on")} else { fhem("set Muellalert off")}; {DebianMail('yourname@gmail.com', 'FHEM - Mülltonne: $DEVICE rausstellen')}}
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Devender am 19 Oktober 2016, 11:12:22
Ja, das geht.
Willst du jetzt ein DOIF oder ein at nutzen?
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 11:57:24
Das AT gefällt mir besser.
Ich habe das jetzt so gemacht:
define at_MuellalertMail at *00:20:00 {if(Value("Papier") eq "1" || Value("Restmuell") eq "1" || Value("Biomuell") eq "1" || Value("Plastik") eq "1") { DebianMail('do***@***.de','WatchDOG Haussteuerung Muell', "Mülltonne",'') }}
attr at_MuellalertMail group Abfall
attr at_MuellalertMail room Status


Die Mail kommt an; alles schick. Die Königslösung wäre jetzt, wenn ich noch einbauen könnte welche Tonne ich rausschieben muss.
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Devender am 19 Oktober 2016, 12:04:14
Kannst du doch.
Du kannst z.b das Reading next_text aus deiner Abfalldefinition auslesen.

Also, wenn dein at ausgelesen hat, dass morgen ein Muellbehaelter abgeholt wird
Ziehst du dir mit ReadingsVal noch das Reading next_text und setzt es direkt in deiner Mail ein.

Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 13:29:54
die Kurve bekomme ich nicht. Ich finde kein Reading next_text
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Devender am 19 Oktober 2016, 13:57:50
Das Reading findest du im definierten Modul Abfall.
Vorausgesetzt du verwendest das.
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 13:59:32
Das fehlt mir. Ich versuche es gerade zu installieren. Meine Leitung ist aber gerade kippelig.
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Domjo75 am 19 Oktober 2016, 15:54:21
So, geschafft. Wie bekomme ich das Reading nun in meine Mail? Mit List myAbfall bekomme ich alles schön aufgelistet
Bisher sieht es so aus

define at_MuellalertMail at *00:20:00 {if(Value("Papier") eq "1" || Value("Restmuell") eq "1" || Value("Biomuell") eq "1" || Value("Plastik") eq "1") { DebianMail('do***@***.de','WatchDOG Haussteuerung Muell', "Die [myAbfall:next_text] Tonne wird morgen abgeholt",'') }}
attr at_MuellalertMail group Abfall
attr at_MuellalertMail room Status


An kommt dann einen Mail mit genau diesem Inhalt "Die [myAbfall:next_text] Tonne wird morgen abgeholt"

Edit: Ich hab´s dann endlich geschafft. Jetzt schickt er mir alle Info´s die ich brauche :) Danke für die Hilfe
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Skipper am 31 Mai 2021, 06:22:12
Hallo zusammen,
Ich würde das gerne nutzen. Ich habe allerdings folgende zusätzliche Schwierigkeit, an einigen Wochen im Jahr sind bei mir zwei Tonnen am gleichen Tag fällig. Jetzt will ich natürlich beide Tonnen in einer Mail stehen haben. Hat einer eine Idee, die nicht einer Fallunterscheidung gleich kommt? Also wie wenn Blaue Tonne = 1 und Schwarze Tonne dann tu X oder wenn Schwarze Tonne = 1 und Blaue Tonne > 1 dann tu Y?

Kleiner Unterschied zu der Lösung von oben bei mir, ich hab alle Tonnen in einem Device.
Grüße
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Otto123 am 31 Mai 2021, 20:09:13
Hi,

ich habe Deinen Text jetzt 10 mal gelesen und nicht verstanden.  :o Willst Du jetzt eine Fallunterscheidung oder nicht?
Dein dritter Satz in Perl:
if (ReadingsVal('Device','Blaue Tonne','') eq '1' and ReadingsVal('Device','Schwarze Tonne','') ) {X};
if (ReadingsVal('Device','Blaue Tonne','') gt '1' and ReadingsVal('Device','Schwarze Tonne','') eq  '1') {Y} 

Wobei mir Dein Satz unvollständig erscheint :)

Gruß Otto
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Skipper am 01 Juni 2021, 06:21:51
Hallo Otto,

danke für die rasche Antwort.
Eigentlich will ich keine Fallunterscheidung.
Aber ich komme wohl nicht drum herum.
Ich hatte eigentlich eher an eine generische Nachricht gedacht, die dann quasi wie per foreach mit Inhalten befüllt wird.

Grüße
Timo
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: kadettilac89 am 01 Juni 2021, 08:01:07
Zitat von: Skipper am 01 Juni 2021, 06:21:51
Hallo Otto,

danke für die rasche Antwort.
Eigentlich will ich keine Fallunterscheidung.
Aber ich komme wohl nicht drum herum.
Ich hatte eigentlich eher an eine generische Nachricht gedacht, die dann quasi wie per foreach mit Inhalten befüllt wird.

Grüße
Timo

Bei zwei Möglichkeiten ist die Fallunterscheidung schneller als zusätzliche Programmierung oder zusätzliche Module.

Ein paar Ideen wie du das ohne Fallunterscheidung machen könntest. Mehr theoretisch um zu zeigen dass es ginge, aber den Aufwand nicht lohnt.

- Per at am Sonntag (oder wann auch immer) alle fälligen Tonnen in einen Dummy schreiben. Ich meine per Verkettung. Diesen dann per Email versenden falls was drin steht.
- ggf. per Monitoring Modul die Status abfragen und dann verketten
- ....
Titel: Antw:email versenden zur Erinnerung an die Mülltonne
Beitrag von: Otto123 am 01 Juni 2021, 10:00:57
Moin Timo,

wenn Du etwas konkreter werden willst kann man es auch konkreter in Codevorschläge fassen.
Du kannst den Kalender abfragen und erhälts ein Array von Tonnen, entweder weil es mehrere Termine sind oder weil der Eintrag im Termin einen Trenner enthält:
my @array=split "\n", fhem("get Calendar events ...");
oder
my @array=split q{,}, fhem("get Calendar events ...");
Deine Nachricht baust Du dann mit dem Array:
my $nachricht='Die '.$array[0];
if (defined $array[1]) {$nachricht .= ' und die '.$array[1]}
$nachricht .= 'muss raus.';


Gruß Otto