NEWS
E-mail Script für Statusmeldungen
-
Guten Abend,
ich möchte mir gerne bestimmte Daten aus ioBroker als "Statusmeldung" per E-mail zukommen lassen. Dieses habe ich nun auch erfolgreich hinbekommen und nutze das Script aus einem anderen Fred…
// wird um 06:30 ausgeführt //schedule("30 6 * * *", function (){ var tempMax = getState("yr.0.forecast.day0.temperature_max").val; var beschreibung = getState("yr.0.forecast.day0.text").val; var tempAct = getState("hm-rpc.0.KEQ105664.1.TEMPERATURE").val; [color] hier müssen alle weiteren Variablen auftauchen, die ich nutzen möchte? Richtig?[/color] sendTo("email", { from: "Hausautomation@tengeler.net", to: "hausautomation@tengeler.net", subject: "So wird das Wetter heute bei Tengeler´s", text: "Guten Morgen Sven, die aktuelle Temperatur beträgt " + tempAct + " °C und es wird heute voraussichtlich bis zu " + tempMax + "°C warm. \n neuer Absatz \n" }); //});
Nun möchte ich gerne in dieser E-mail übersichtlich weitere informationen bekommen. Z.b. Informationen aus dem Pollenadapter.
Ich möchte dafür einen neuen Absatz und die Pollenwerte untereinander:
Birke: schwach
Gräser: stark
Hanf: zu wenig
Wie muss ich den Code dafür ändern um so etwas hinzubekommen? Gibt es dazu Hilfen?
Gruß Sven
-
Hallo,
ich habe das bei mir so eingebaut (Die e-Mail Funktion in einem Globalen Script):
function fgEMail (strTo, strBetreff, strText){ sendTo("email", { from: "absender@e-mail.de", to: strTo, subject: strBetreff, //text: strText //HTML body html: '``` **Temperaturen & Luftfeuchte:** ' + 'Garten ' + getState("hm-rpc.0.12345.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.12345.1.HUMIDITY").val + '% ' + 'Wohnzimmer ' + getState("hm-rpc.0.12345.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.12345.1.HUMIDITY").val + '% ' + ' ' + '**Offen / Laufzeiten:** '+ 'Poolpumpe ' + getState("javascript.0.PoolpumpeAn.Tag").val +'Min | ' + getState("javascript.0.PoolpumpeZaehler.Tag").val + ' ' + 'Terrassentür ' + getState("javascript.0.WohnzimmerTerrassentuerOffen.Tag").val +'Min | ' + ' ' + '**Automatik:** ' + ' ```' }); }
diese Funktion rufe ich dann wie folgt auf (Entweder über Schedule oder on):
cb(fgEMail("empfaenger@e-mail.de", 'Poolpumpe spülen', ""));
Ich hoffe Du meinst das
Den Text in der e-Mail kannst Du dann ja beliebig erweitern z.B. mit den Daten vom Pollenadapter.
Jede e-Mail die ich mit dem Adapter versende enthält dann halt immer alle Daten.
Gruß
Phantomio
-
Hallo Sven,
ja, ich habe es so gemacht wie du und habe im Kopf die var definiert. Die ziehst du aus den Objekten die dir das Pollenskript anlegt.
Diese kannst du dann in das Script einbetten.
Aber, teste mit der HTML Version. Dann kannst du auch noch die Bilder aus dem YR Adapter einbinden.
Unsere Lösung ist rein Text. Das ist recht einfach, aber eine Einbahnstr.
Gute Nacht
-
Hey super danke dafür.
Ich versuche es erst mal mit dem html Script. Das sieht momentan schon mal ganz gut aus.
Kann mir noch jemand sagen wie ich das Bild aus dem yr Adapter einbinden kann? In die Doku des Adapters habe ich bereits geschaut. Daraus werde ich aber leider nicht schlau.
Gute Nacht.
Gruß sven
Gesendet von iPhone mit Tapatalk
-
Hallo Leute,
ich bin nun schonmal einen Schritt weiter:
Hier der aktuelle Code für meine Mails, nicht schön, funktioniert aber bisher:
sendTo("email", { from: "Haus@tengeler.net", to: "Haus@tengeler.net", subject: "Statusinformationen Haus Tengeler", //text: strText //HTML body html: ' <u>So wird das Wetter heute:</u> ' + 'Guten Morgen Sven, die aktuelle Temperatur beträgt ' + getState("hm-rpc.0.KEQ1057664.1.TEMPERATURE").val +'°C '+ 'und es wird heute voraussichtlich bis zu ' + getState("yr.0.forecast.day0.temperature_max").val +'°C warm.' + ' ' + ' ' + getState("yr.0.forecast.html").val + ' ' + getState("yr.0.forecast.diagram").val + ' ' + ' <u>Mülltermine:</u> ' + getState("ical.1.data.html").val + ' ' + ' <u>Terminübersicht für die nächsten Tage:</u> ' + getState("ical.0.data.html").val + ' ' + ' <u>Geburtstage für die nächsten Tage:</u> ' + getState("ical.2.data.html").val + ' ' + ' <u>Pollenflug für Heute:</u> ' + 'Ambrosia ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.ambrosia").val + ' ' + 'Ampfer ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.ampfer").val + ' ' + 'Beifuß ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.beifuß").val + ' ' + 'Birke ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.birke").val + ' ' + 'Buche ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.buche").val + ' ' + 'Eiche ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.eiche").val + ' ' + 'Erle ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.erle").val + ' ' + 'Gräser ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.gräser").val + ' ' + 'Hasel ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.hasel").val + ' ' + 'Pappel ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.pappel").val + ' ' + 'Roggen ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.roggen").val + ' ' + 'Ulme ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.ulme").val + ' ' + 'Wegerich ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.wegerich").val + ' ' + 'Weide ' + getState("javascript.1.WetterOnline.pollenvorhersage.heute.weide").val + ' ' + ' <u>Günstigste Tankstelle Heute:</u> ' + 'Name: ' + getState("tankerkoenig.0.stations.cheapest.e5.name").val + ' ' + 'Preis für Super: ' +getState("tankerkoenig.0.stations.cheapest.e5.combined").val + ' ' + 'Ladenzeit: ' +getState("tankerkoenig.0.stations.cheapest.e5.status").val + ' ' + ' <u>Temperaturen & Luftfeuchte:</u> ' + 'Garten ' + getState("hm-rpc.0.KEQ1057664.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.KEQ1057664.1.HUMIDITY").val + '% ' + 'Wohnzimmer ' + getState("hm-rpc.0.LEQ0228650.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.LEQ0228650.1.HUMIDITY").val + '% ' + 'Moritz ' + getState("hm-rpc.0.NEQ0122832.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.NEQ0122832.1.HUMIDITY").val + '% ' + 'Nele ' + getState("hm-rpc.0.NEQ0122927.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.NEQ0122927.1.HUMIDITY").val + '% ' + 'Schlafzimmer ' + getState("hm-rpc.0.NEQ0122846.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.NEQ0122846.1.HUMIDITY").val + '% ' + ' ' + ' <u>Statistik der Pooldaten:</u> ' + 'Poolpumpe ' + getState("javascript.1.Betriebsstundenzaehler.Counter.Poolpumpe.DAY").val +'(HEUTE) ' + ' ' + 'Poolpumpe ' + getState("javascript.1.Betriebsstundenzaehler.Counter.Poolpumpe.MONTH").val +'(Monat) ' + ' ' + 'Poolpumpe ' + getState("javascript.1.Betriebsstundenzaehler.Counter.Poolpumpe.YEAR").val +'(Jahr) ' + ' ' + ' ' + 'Solarlaufzeit ' + getState("javascript.1.Betriebsstundenzaehler.Counter.Solaranlage.DAY").val +'(HEUTE) ' + ' ' + 'Solarlaufzeit ' + getState("javascript.1.Betriebsstundenzaehler.Counter.Solaranlage.MONTH").val +'(Monat) ' + ' ' + 'Solarlaufzeit ' + getState("javascript.1.Betriebsstundenzaehler.Counter.Solaranlage.YEAR").val +'(Jahr) ' + ' ' + ' ' + ' ```' });` Hierzu habe ich noch Fragen: 1\. Wie bekomme ich statt dem Link das Bild angezeigt? 2\. Die Kalender enthalten Daten von mehreren Tagen, ich möchte aber nur den heutigen Tag in der E-mail angezeigt bekommen. 3\. Wie kann ich die Pollen nur anzeigen lassen, wenn es einen Pollenflug gibt? 4\. Wie bekomme ich die "Antworten" sauber in eine Linie untereinader sortiert? (Temperaturen und Luftfeuchte da sollen die Striche untereinander) Oder bei Günstigste Tankstelle soll es so aussehen: Name: Esso Preis für Super: 1,99€ Ladenzeit: offen ![576_email.png](/assets/uploads/files/576_email.png) ![576_email2.png](/assets/uploads/files/576_email2.png) Danke für eure Mühe…
-
3. Wie kann ich die Pollen nur anzeigen lassen, wenn es einen Pollenflug gibt? `
ich hatte mal so ein Script-schnipsel für Humoran entwickelt:
Kannst du vielleicht noch mit einbauen.
Vielleicht hilft das ja weiter.
! var logging = true;
! var instanz = 'javascript.0'; instanz = instanz + '.';
! var pfad = 'wetter.pollenvorhersage.'; // Pfad innerhalb der Instanz
! Pollenarten = ['Hasel','Pappel','Weide','Ulme','Birke','Buche','Ampfer','Roggen','Gräser','Eiche','Wegerich','Beifuß','Ambrosia'];
! PollWarn0 = "";
! PollWarn1 = "";
! PollWarn2 = "";
! PollWarn3 = "";
! var code = {'kein':0, 'schwach':1, 'mäßig':2, 'stark':3};
! viewPollenwetter();
! function viewPollenwetter(){
! PollWarn0 = "";
! PollWarn1 = "";
! PollWarn2 = "";
! PollWarn3 = "";
! for(var i=0;i <pollenarten.length;i++) {<br="">// Objekt in Variable packen
! var varPoll = Pollenarten__;
! var varPollArt = pfad+Pollenarten__.toLowerCase();
! // Wert des Objektes auslesen und in neuer Variable speichern
! var varPollWert = getState(varPollArt).val;
! // weiterverwerten …
! log(varPollArt + " -> " + varPollWert);
! if (varPollWert == 3) {
! PollWarn3 = PollWarn3 + varPoll + " , ";
! }
! if (varPollWert == 2) {
! PollWarn2 = PollWarn2 + varPoll + " , ";
! }
! if (varPollWert == 1) {
! PollWarn1 = PollWarn1 + varPoll + " , ";
! }
! if (varPollWert == 0) {
! PollWarn0 = PollWarn0 + varPoll + " , ";
! }
! }
! log("Pollen stark : " +PollWarn3);
! log("Pollen mäßig : " +PollWarn2);
! log("Pollen schwach: " +PollWarn1);
! log("Pollen kein : " +PollWarn0);
! createState(pfad + "PollWarn.3.",0);
! createState(pfad + "PollWarn.2.",0);
! createState(pfad + "PollWarn.1.",0);
! createState(pfad + "PollWarn.0.",0);
! setState(pfad+"PollWarn.3.",PollWarn3);
! setState(pfad+"PollWarn.2.",PollWarn2);
! setState(pfad+"PollWarn.1.",PollWarn1);
! setState(pfad+"PollWarn.0.",PollWarn0);
! }
! schedule("5 0 * * *", viewPollenwetter);____</pollenarten.length;i++)> ____GrußJürgen____
-
Hallo Jürgen,
Schön wäre es, wenn da noch wie die Summe aller pollenwarnstufen integriert wäre.
Wenn die dann auf 0 geht, kann man damit weiterarbeiten.
Gruß
Rainer
-
Hallo Jürgen, Hallo Homoran
danke dafür. Leider bekomme ich den Schnipsel nicht eingebaut.
Ich habe dafür ein extra Script gemacht und bei der Auslösung erhalte ich immer:
23:01:05.473 [info] javascript.1 Stop script script.js.Pollen.Pollen-Zusatz 23:03:28.543 [info] javascript.1 Start javascript script.js.Pollen.Pollen-Zusatz 23:03:28.544 [info] javascript.1 script.js.Pollen.Pollen-Zusatz: Homematic-Servicemeldungen: hm-rpc.0.LEQ1002192.0.CONFIG_PENDING, 23:03:28.544 [info] javascript.1 script.js.Pollen.Pollen-Zusatz: Anzahl Homematic-Servicemeldungen: 1 23:03:28.544 [error] javascript.1 script.js.Pollen.Pollen-Zusatz: TypeError: Cannot read property 'val' of null at viewPollenwetter (script.js.Pollen.Pollen-Zusatz:125:39) at script.js.Pollen.Pollen-Zusatz:113:1
Kannst mir einer von euch kurz erklären wie ich den einbaue?
Gruß Sven
-
ja
du musst die Datenpunkte erst anlegen lassen.
soll heißen:
den "schnipsel" als eigenen Script laufen lassen
in deinem Mail-Script wertest du dann die neuen Datenpunkte aus
Gruß
Jürgen
-
Hallo Jürgen,
danke für deine Antwort. Allerdings habe ich das versucht, das ruft den Fehler aus meinem Letzten Post hervor.
Der Fehler schein in Zeile 36. Kannst du da vielleicht mal schauen?
Gruß Sven
-
Hallo,
ich habe das bei mir so eingebaut (Die e-Mail Funktion in einem Globalen Script):
function fgEMail (strTo, strBetreff, strText){ sendTo("email", { from: "absender@e-mail.de", to: strTo, subject: strBetreff, //text: strText //HTML body html: '``` **Temperaturen & Luftfeuchte:** ' + 'Garten ' + getState("hm-rpc.0.12345.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.0.12345.1.HUMIDITY").val + '% ' + 'Wohnzimmer ' + getState("hm-rpc.0.12345.1.TEMPERATURE").val +'°C | ' + getState("hm-rpc.12345.1.HUMIDITY").val + '% ' + ' ' + '**Offen / Laufzeiten:** '+ 'Poolpumpe ' + getState("javascript.0.PoolpumpeAn.Tag").val +'Min | ' + getState("javascript.0.PoolpumpeZaehler.Tag").val + ' ' + 'Terrassentür ' + getState("javascript.0.WohnzimmerTerrassentuerOffen.Tag").val +'Min | ' + ' ' + '**Automatik:** ' + ' ```' }); }
diese Funktion rufe ich dann wie folgt auf (Entweder über Schedule oder on):
cb(fgEMail("empfaenger@e-mail.de", 'Poolpumpe spülen', ""));
Ich hoffe Du meinst das
Den Text in der e-Mail kannst Du dann ja beliebig erweitern z.B. mit den Daten vom Pollenadapter.
Jede e-Mail die ich mit dem Adapter versende enthält dann halt immer alle Daten.
Gruß
Phantomio `
Hallo Phantomio,
Ich habe in deinem Script etwas von einem Laufzeitzähler Poolpumpe gelesen. Könntest Du den Code hier zu Verfügung stellen. Wäre auch sehr an so etwas interessiert-bin jedoch nicht so begabt im coden.
Habe mir schon einige Scripte hier im Forum abekupfert u. angepasst und denke ich würde das mit dem Zähler auch hinbekommen.
Gruß
crepp
-
Hi crepp,
ich habe das bei mir so gelöst:
createState('PoolpumpeZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Poolpumpe"}); createState('PoolpumpeAn.Tag', 0, {read: true, write: true, type: 'number', name: "Poolpumpe An"}); var Poolpumpe = "hm-rpc.0.KEQxxxxxxx.1.STATE"; // Poolpumpe Aktor:1.STATE var PoolpumpeAn = "javascript.0.PoolpumpeAn.Tag"; // Poolpumpe An on ({id: Poolpumpe, change: "gt"}, fPoolpumpe); on ({id: PoolpumpeAn, change: "any"}, fPoolpumpeAn); function fPoolpumpe (){ setState("javascript.0.PoolpumpeZaehler.Tag", ++getState("javascript.0.PoolpumpeZaehler.Tag").val); newvalue = Number(getState(PoolpumpeAn).val); newvalue = newvalue + 0.01; newvalue = newvalue.toFixed(2); setState(PoolpumpeAn, newvalue); } function fPoolpumpeAn(){ if (getState(Poolpumpe).val === true){ newvalue = Number(getState(PoolpumpeAn).val); newvalue = newvalue + 0.10; newvalue = newvalue.toFixed(2); setStateDelayed (PoolpumpeAn, newvalue, 6000); if (newvalue >= 300 && newvalue <= 300.09){cb(fgEMail("test@test.de", "Die Poolpumpe läuft bereits über 5 Stunden!", ""));} } }
hier gibt es dazu auch noch einen Eintrag im Forum:
http://forum.iobroker.net/viewtopic.php?f=21&t=2233
Gruß
Phantomio
-
Vielen Dank, werde ich auf jeden Fall mal probieren einzurichten. Reicht es wenn ich nur den Namen des Gerätes anpasse?
-
Hi,
das sollte reichen (Wenn Du die Funktion fgEMail eingebaut hast… Sonst die Zeile löschen).
Gruß
Phantomio
-
Hallo,
Habs jetzt eingerichtet, hat auf Anhieb funktioniert. Im Log kam beim ersten Start diese Meldung:
Ist das ein Problem ?Ausserdem wurden zwei Datenpunkte angelegt:
Diese ändern sich aber trotz Pumpenlaufs nicht. Sollten die sich nicht selbstständig aktualisieren ?
Gruß
crepp
-
Kommando zurück, Die Anzeige ist in KW- deshalb die Änderung erst nach längerer Zeit (Meine Pumpe hat ca. 650W)
Jetzt funktioniert alles Super !
Gruß
crepp
-
Hab hier noch etwas im Logfile stehen:
javascript-0 2016-07-01 16:02:07.174 warn Wrong type of javascript.0.PoolpumpeAn.Tag: "string". Please fix, while deprecated and will not work in next versions.
Kann mir jemand weiterhelfen ?
Gruß
crepp
-
Hallo crepp,
ich glaube ich stehe auf dem Schlauch 8-)
Warum ist die Anzeige KW für die Pumpe in dem Fall wichtig?
Ist doch ein Zeitzähler (in Minuten). Der sollte wenn alles funktioniert "Live" alle paar Sekunden aktualisiert werden.
Entweder unter Objekte javascript … oder den Datenpunkt im vis einbinden um die Laufzeit abzulesen.
Zu dem Log Eintrag:
Welche Java Version hast du?
In der Readme steht etwas:
Siehe Changelog 2.1.2 / 2.1.3 // (bluefox) fix warning with wrong types
https://github.com/iobroker/ioBroker.ja … /README.md
Gruß
Phantomio
-
update von 18:38 Uhr
Ich habe gerade alles auf den neuesten Stand gebracht (Die Versionen die im Admin GUI angeboten werden).
Jetzt habe ich auch diese Meldungen im Log 8-)
javascript.0 2016-07-01 18:39:59.726 warn javascript.0 Wrong type of javascript.0.WohnzimmerTerrassentuerOffen.Tag: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2016-07-01 18:39:53.709 warn javascript.0 Wrong type of javascript.0.WohnzimmerTerrassentuerOffen.Tag: "string". Please fix, while deprecated and will not work in next versions. javascript-0 2016-07-01 18:39:47.690 warn Wrong type of javascript.0.WohnzimmerTerrassentuerOffen.Tag: "string". Please fix, while deprecated and will not work in next versions. javascript-0 2016-07-01 18:39:41.643 warn Wrong type of javascript.0.WohnzimmerTerrassentuerOffen.Tag: "string". Please fix, while deprecated and will not work in next versions. javascript-0 2016-07-01 18:39:35.632 warn Wrong type of javascript.0.WohnzimmerTerrassentuerOffen.Tag: "string". Please fix, while deprecated and will not work in next versions.
Das Müllt einem bei der Vorgehensweise mit den Zählern schon ganz schon das Log zu (Ich zähle Fenster / Türen / Poolpumpe usw. 11 Stück).
Deswegen habe ich erst einmal in den Instanzen die Log Stufe vom javascript Adapter auf error gestellt.
Gruß
Phantomio
-
Das werde ich auch tun bis es vielleicht mal eine Lösung gibt, ich habe aber noch ein ganz anderes Problem:
Mein Zähler (Poolpumpe nullt sich nicht um 24:00. Er zählt also fröhlich weiter die kW. Muss ich da etwas manuell tun.
Gruß
crepp