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
Keiner ein Idee?
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".
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
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
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')}}
Ja, das geht.
Willst du jetzt ein DOIF oder ein at nutzen?
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.
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.
die Kurve bekomme ich nicht. Ich finde kein Reading next_text
Das Reading findest du im definierten Modul Abfall.
Vorausgesetzt du verwendest das.
Das fehlt mir. Ich versuche es gerade zu installieren. Meine Leitung ist aber gerade kippelig.
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
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
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
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
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
- ....
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