Ereignis eMail

Hallo,

ich bin noch sehr neu hier im Forum und nutze IPS erst seit 10 Tagen, bitte also nicht gleich über mich herfallen, aber ich habe über die Forensuche nichts finden können!!:confused:

Ich möchte gerne bei einem bestimmten Ereignis eine eMail versenden. Soweit so gut und das läuft auch Prima.
Jetzt möchte ich aber gerne den Inhalt einer Variable im eMail Text ausgeben:
z.B. Die Temperatur beträgt 18 Grad.

Wie kann ich eine Variable in den eMail Text einbauen?

In einer Push Nachricht über die Prowl Lösung, habe ich das recht einfach hinbekommen.

Danke für Eure Unterstützung!

Daniel

Hi Daniel,

man mus sich nicht entschuldigen wen man Neueinsteiger ist - das waren wir alle mal (ich bin es immer noch).

Ich nehme mal an das du das email-SMTP-Modul erfolgreich eingebunden hast?
wenn ja ist es reht einfach,

du baust dir ein Script, welches über ein entsprechendes Event angetriggert wird (z.B. bei unterschreiten einer bestimmten Temperatur). Im Script ist der Mailtext, Mailsubject sowie die Variable definiert, die den zu sendenen Temperaturwert enthält.

Beispiel:


<?
// ++++++++++++++++ Konfig ++++++++++++++++++++++++++++++++
$uhrzeit = date("H:i.s");
$sendmail = 56608 /*[Messaging\E-Mail senden (SMTP) raketenschnecke@gmail.de]*/;
$temperatur = getValue(35133  /*[Haussteuerung\Bad\HZ Ist-Daten\Temperatur]*/);
$mailsubject = "IPS.Raketenschnecke.loc: Bad-Temperatur Info";
$mailcontend = "IPS meldet: Die Bad-Temperatur wurde um $uhrzeit Uhr unterschritten und beträgt jetzt $temperatur °C";
 
// +++++++++++++++++Konfig Ende ++++++++++++++
 
SMTP_SendMail($sendmail, $mailsubject, $mailcontend);
?>

$sendmail enthält die ID des lokalen SMTP-Moduls,
$temperatur enthält den Wert der Temperatur-Variablen deren Wert du verschicken willst

Hallo Raketenschnecke,

das freut mich, ist aber leider in vielen anderen Foren nicht so, da stört man als Neuling gerne mal die Alten Hasen!

Ich hatte es vorher mit IPS_RunScript probiert und war dabei gnadenlos gescheitert…
Mir wird immer deutlicher wie die Abläufe in den Scripten funktionieren, auch wenn ich noch nicht bei allen Befehlen durchsteige.

Wie auch immer, trotz meiner extrem kurzen IPS Nutzungsdauer, muss ich leider deutlich machen das IPS wegen des hohen Suchtfaktors eigentlich unters BtMG fallen müsste. Das Motto lautet hier (IF - Projekt ready == THEN schnell next Projekt).

@raketenschnecke
Das mit Deinem Tipp hat also sofort einwandfrei funktioniert.
Eine Frage hätte ich dann aber noch (siehe Suchtfaktor oben).

Ich möchte gerne das über das AKM Modul beim verlassen des Hauses eine Status eMail versandt wird (das funktioniert Dank Dir schon mal) in diese Mail sollen mehrere Stati abgefragt werden (krieg ich auch hin).
Jetzt der eigentlich Knackpunkt. Wenn z.B Der Türstatus zu (false) ist, braucht die Meldung nicht in die eMail (oder Push Nachricht).

Mit meinem derzeitigen Verständnis also (nur ein Beispiel :slight_smile: )
(
IF Value XXXX = False
THEN NIX
)

Würde mich hier über einen Tipp, oder Lösungsansatz sehr freuen.

DANKE!

Grüsse

Daniel

ich behaupte mal: das ist hier definitiv nicht so!

der Ansatz ist grundsätzlich schon mal richtig (dank Obsthändler-Tastatur gibts heute keine geschweifte Klammer :mad:):


<?
$tuerstatus = getValueBoolean(12345);

if ($tuerstatus == true) // true = Türstatus wenn Tür nicht geschlossen
(
   SMTP_SendMail($sendmail, $mailsubject, $mailcontend);
)
?>

OK hab ich auch sofort geschluckt.
Da aber erst mehrere Stati abgefragt werden sollen bevor die Mail verschikct wird, müsste ich doch erst mehrere Variablen setzen, oder?


<?
$tuerstatus = getValueBoolean(12345);

if ($tuerstatus == true) // true = Türstatus wenn Tür nicht geschlossen
{
   SetValueString(12345, $tuer1 = "Tür 1 noch offen");
}

$tuerstatus2 = getValueBoolean(12346);

if ($tuerstatus2 == true) // true = Türstatus wenn Tür nicht geschlossen
{
   SetValueString(12345, $tuer2 = "Tür 2 noch offen");
}

SMTP_SendMail($sendmail, $mailsubject, $mailcontend);
?> 

Und die oben gefüllten Variablen könnte ich dann wieder in den Mailcontent einbauen, hoffe ich.
Kann das leider grad nicht testen da ich noch @work bin.

Stimmt das so?

hier solltest Du zunächst definieren, was du erreichen willst: ich könnte mir vorstellen, dass du nur dann eine Mail haben willst, wenn eine der beiden Türen auf ist? - liege ich richtig? oder nur wenn beide offen sind? etc etc…
je genauer du das definierst desto präziser die Antwort :wink:

nicht ganz.

Wenn ich das Haus verlasse und das AKM Modul meldet -->Daniel Abwesend.
Soll eine eMail erstellt und versandt werden die mich über den Status mehrere Objekte informiert und irgendwas gibts bestimmt immer zu berichten…


z.B.
Hallo,

die Temperatur beträgt heute XX Grad, hast Du an deinen Pullover gedacht?

//(wen Regen gemeldet ist und nur dann)
Hast Du an den Regenschirm gedacht?

// (wen ich vergessen habe die Terassentür zu schliessen)
Fahr zurück Du Trottel, die Terassentür ist noch offen

usw. usw


Wenn kein Regen gemeldet ist soll der Hinweis mit dem Regegnschirm nicht erscheinen und wenn die Terassentür zu ist, braucht das IPS System mich auch nicht zu beleidigen.

Das selbe dann für meine Frau, wenn mal wieder vergessen wurde das Bügeleisen auszuschalten :slight_smile:

Und wenn ich dann Abends wieder da bin, wäre ich für die Infomeldung meines Kühlschranks dankbar die da lautet: Freut mich das Du wieder da bist, die Biertemperatur beträgt exakt 4,2 Grad :slight_smile:

Grüsse

Daniel


sorry, sehe ich jetzt erst.
nee, da liegt ein Mißverständnis vor:
die Variable „$tuerstatus = getValueBoolean(12345)“ fragt den Status der Tür ab, dann erfolgt die Prüfung „if ($tuerstatus2 == true)“ (ist die Tür offen?). Dein Script würde nun versuchen einen String „Tür 1 noch offen“ (wobei der Ausdruck in dieser Zeile syntaktisch falsch ist) in die Statusvariable der Tür zu schreiben (was IPS nicht zulassen wird). Macht hier keinen Sinn. Den Text, den Du per Mail versenden willst kannst Du hier im Script als Textbaustein definieren und anschließend - je nach Status der Variablen die Textbausteine zu einer kompletten Mail zusammensetzen lassen und verschicken. Die Definition könnte dann so aussehen:


$contend_tuer1 = "die Balkontür ist noch offen!
";
$contend_tuer2 = "die Haustür ist nicht verschlossen!
";
$contend_regen = "heute wird es regnen, nimm den Schirm mit!
";


vielleicht noch ein Hinweis: in einem solchen Falle schickt IPS keine Mail (wozu auch?? -> bis ich dann wireder zu Hause bin um das Eisen abzuschalten hat das längst die Feuerwehr erledigt - mit nem C-Schlauch) sondern schaltet das Bügeleisen selbst ab (mein IPS macht das jedenfalls)
:D:D:D

Genau, die verschiedenen Textbausteine ergeben dann die eMail.

aber wie setzte ich dann den Textbaustein?


<?
$tuerstatus = getValueBoolean(12345);

if ($tuerstatus == true) // true = Türstatus wenn Tür nicht geschlossen
{
   SetValue ($tuer1 = "Tür 1 noch offen");
}

?> 

???

grüsse

Daniel

Blödsinn, erst alles zu ende lesen…



<?
$tuerstatus = getValueBoolean(12345);

if ($tuerstatus == true) // true = Türstatus wenn Tür nicht geschlossen
{
   SetValue ($contend_tuer1);
}

?> 



oder wie muss ich das verstehen?!

Schaltet selber ab = next Projekt

:loveips::loveips:

ich weis nicht was du immer mit deinem "SetValue ($tuer1 = „Tür 1 noch offen“) hast :wink: - das ist nicht nötig. Wenn du an dieser Stelle einen Variableninhalt definieren willst (Betonung liegt auf definieren, nicht in eine IPS-Variable schreiben!) reicht


$tuer1 = "Tür 1 noch offen";

völlig aus. Den Rest später, evtl. wird’s erst heut Abend bei mir was

jetzt ist der Groschen gefallen.

Ich brauch den Befehl SetValue gar nicht :rolleyes:

Dann will ich heute Abend mal basteln! Ich versuche es erst mal und melde mich dann wie das resultat ist!

DANKE erst einmal.

als Denkanstoß: der fertige Mailcontend müsste nach diesem Beispiel so aussehen (Voraussetzung: alle Variablen-Prüfungen erfordern den Einsatz des jeweiligen Textbausteins => alle Türen offen und es regnet):



$mailcontend = $contend_tuer1.$contend_tuer2.$contend_regen;

alternativ kannst Du auch eine Variable definieren und dann immer etwas dazuhängen. Damit ersparst Du Dir das zusammebauen am Ende und kannst einfacher zwischendrinn etwas dazubasteln ohne daran denken zu müssen, den String unten zu erweitern:


$mailContext = "";

if (TRUE) {
   $mailContent .= "Eine erste Zeile";
   }

if (1 == 2) {
   $mailContent .= "das ist eine Zeile die nicht angehängt wird";
   }

if ($variable1 == 20) {
   $mailContent .= "eine dritte Zeile die angehängt wird";
   }


$mailContent kannst dann in der E-Mail verwenden.

Danke, ich werde testen und berichten…

prima Tipp,

das „.=“[COLOR=black] hatte ich nicht vor Augen und grad nach gegoogelt.

thanks;)
[/COLOR]

nur so der Vollständigkeit halber, alternativ etwas ausfürhlicher ohne „.=“ als mehrfaches neu setzen der Variablen geschrieben:


$mailContext = ""; 

if (TRUE) { 
   $mailContent = $mailContext . "Eine erste Zeile"; 
   } 

if (1 == 2) { 
   $mailContent = $mailContext . "das ist eine Zeile die nicht angehängt wird"; 
   } 

if ($variable1 == 20) { 
   $mailContent = $mailContext . "eine dritte Zeile die angehängt wird"; 
   }  

P.S.: Du hast 1000 POSTS!

Glückwunsch @raketenschnecke
1000 Postings seit letzten Oktober :confused:, nicht schlecht!

@ernie
Ich habe mal versucht Deinen letzten Vorschlag einzubauen.

Genau so:


<?
// ++++++++++++++++ Konfig ++++++++++++++++++++++++++++++++
$sendmail = 47282 /*[Testen\E-Mail senden @widemedia.de)]*/;
$mailsubject = "IPS Status Info";
$tuerstatus = getValueBoolean(40803 /*[Gewächshaus\Tür Gewächshaus\Status]*/);
$tempAussen = getValueFloat(18821 /*[Wetterstation\Aussen Temperatur\Temperatur]*/);
$tempGew = getValueFloat(37541 /*[Gewächshaus\Gewächshaus\Temperatur]*/);
$lichtKueche= getValueBoolean(43429 /*[Küche\Halogen Fenster\Status]*/);
$mailContext = "";

// +++++++++++++++++Konfig Ende ++++++++++++++


if ($tuerstatus == true) // true = Türstatus wenn Tür nicht geschlossen
{
   $mailContent = $mailContext . "Die Gewächshaustür ist noch offen!";
}
if ($lichtKueche == true) // true = Licht an
{
   $mailContent = $mailContext . "Und mach nächstes mal das Licht in der Kücke aus";
}
if ($tuerstatus == false) // false = Türstatus wenn Tür geschlossen
{
   $mailContent = $mailContext . "Bist Du sicher das es bei $tempGew sinnvoll ist, das die Tür zu ist?";
}
if ($tempGew == 20)
{
   $mailContent = $mailContext . "Achtung es ist über 20 Grad im Gewächshaus";
}

SMTP_SendMail($sendmail, $mailsubject, $mailContent);
?>

In der eMail die versandt wird, steht jetzt aber nur des ersten abgefragten Status. Alle anderen werden nicht ausgeführt und auch nicht in Mail übernommen.

Was habe ich denn übersehen?

Grüsse

Daniel