Aber emails Versenden vom WeMos aus ist oft hilfreich.
Für die CCU gibt es das email-Addon und das kann man als eine Art Relaisstation für den WeMos nutzen. Eine Einführung in das Addon findet sich im Forum http://homematic-forum.de/forum/viewtop ... 41&t=18610 . Aktuell scheint Version 1.6.6 zu sein. Meine CCU hat noch 1.6.0 drauf.
alchy hat dort http://homematic-forum.de/forum/viewtop ... 87#p256887 auch beschrieben, wie man damit emails von Skripten aus versendet. Etliche von uns betreiben das schon so und das ist auch die Basis für den WeMos. Wer das schon so eingerichtet hat, kann gleich mit dem Andocken des WeMos beginnen. Den anderen empfehle ich, sich erst mal mit dem email-Addon vertraut zu machen. Wer mit einem Skript emails verschicken kann, wird es auch mit dem WeMos können.
alchys Anleitung kurz zusammengefaßt:
3 Variablen in der CCU mit Namen EmailEmpfaenger, EmailBetreff, EmailText jeweils als Zeichenkette anlegen.
Im TCL Reiter steht dann irgendetwas so ähnlich:
Code: Alles auswählen
load tclrega.so
array set values [rega_script {
var v1 = dom.GetObject("EmailEmpfaenger").Value();
var v2 = dom.GetObject("EmailBetreff").Value();
var v3 = dom.GetObject("EmailText").Value();
} ]
set v1 $values(v1)
set v2 $values(v2)
set v3 $values(v3)
Code: Alles auswählen
set theText1 $values(v1)
set theText2 $values(v2)
set theText3 $values(v3)
Dazu ist vielleicht noch der Post http://homematic-forum.de/forum/viewtop ... 33#p258533 hilfreich. Der macht es im Prinzip ähnlich aber im Detail deutlich besser. Dort wird noch die Zeichenkodierung auf der CCU umgesetzt.
Code: Alles auswählen
load tclrega.so
array set values [rega_script {
var v1 = dom.GetObject("Betreff").Value(); }]
set v1 [encoding convertfrom utf-8 $values(v1)]
Jetzt wird noch ein WebUI-Programm benötigt, welches ein TCL-Skript aufnimmt und so die email losschickt. Das Programm nenne ich "EmailForward". Triggerbedingung ist ein einmaliger Zeitpunkt in der Vergangenheit. Es soll ja nur direkt durch den WeMos aktiviert werden.
Das Skript sieht bei mir mittlerweile so einfach wie bei alchy aus:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State ("/etc/config/addons/email/email 10");
Dort werden die Variablen angelegt:
Code: Alles auswählen
/* ********* variables for emailing via CCU ************/
String emailTo = "eine.email@mail.de"; // addressee's email address. Multiple addresses can be used separated by semikolon (;)
String const emailToCcuVarName = "EmailEmpfaenger"; // Same name and same spelling as the CCU variable used in the mail program; may be case senssitive
String emailSubject = "WeMos Message"; // the email subject
String const emailSubjectCcuVarName = "EmailBetreff"; // Same name and same spelling as the CCU variable used in the mail program; may be case senssitive
String emailText = "keep it short and simple"; // the text of the email.
String const emailTextCcuVarName = "EmailText"; // Same name and same spelling as the CCU variable used in the mail program; may be case senssitive
String const ccuEmailForwarder = "EmailForward";// Same name and same spelling as the CCU mail forward program; may be case senssitive
/* ********* end variables for emailing via CCU ************/
Zur Übermittlung an die CCU wird m.yodas melde_ccu modifiziert:
Code: Alles auswählen
void mailViaCCU() { // Werte an die CCU melden here: transfer email parameters and start email program
WiFiClient client; // Webclient initialisieren
String tempstring = ""; // temporaerer string
if (!client.connect(cfg.hostCCU, cfg.hostportCCU))
{ // mit dem CCU-Port 8181 verbinden
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println(zeitstempel() + " Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
#endif
delay(100);
}
meldung = "";
meldung = meldung + ""; // without this an error message occured (types incompatible)
meldung = "/eriwan.exe?antwort1=dom.GetObject('" + emailToCcuVarName + "').State('" + emailTo + "')";
meldung = meldung + "&antwort2=dom.GetObject('" + emailSubjectCcuVarName + "').State('" + emailSubject + "')";
meldung = meldung + "&antwort3=dom.GetObject('" + emailTextCcuVarName + "').State('" + emailText + "')";
meldung = meldung + "&antwort4=dom.GetObject('"+ ccuEmailForwarder +"').ProgramExecute()";
meldung = meldung + " "; //to avoid to be shorter than %20
meldung.replace(" ", F("%20")); // replaces whitespaces by %20. necessary otherwise CCU drops string. CCU cannot handle whitesspaces
meldung = "GET " + meldung;
client.println(meldung); // Daten an CCU melden
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println("command -String to CCU:");
DBG_OUTPUT_PORT.println(meldung);
#endif
delay(100);
int i = 0;
String zeile = "";
while (client.available()) { // Antwort der CCU zeilenweise auslesen
i ++;
zeile = client.readStringUntil('\n'); // Zeitstempel der CCU ausfiltern und merken
if (i == 7) {
letzteMeldungCCUzeit = zeile;
}
}
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println("Werte an CCU gemeldet, " + letzteMeldungCCUzeit);
#endif
letzteMeldungMillis = jetztMillis; // gemeldete Daten merken
} // end mail via CCU
Code: Alles auswählen
/************ startup email **************/
emailSubject = F("WeMos - up and running");
emailText="";
emailText = emailText + cfg.sensorName + "\n" + localip + "\nStarted: " + localUhrzeitstempel();
mailViaCCU();
/*********** end startup email **********/
Die email trägt dann den Betreff
und den TextWeMos - up and running
Als etwas komplexeres Anwendungsbeispiel habe ich das in einen BME280 Sketch eingebaut und maile neben dem Startup auch noch bei Über- und Untertemperatur (z.B. Frostgefahr), s. http://homematic-forum.de/forum/viewtop ... 49#p308449.Test-T-H-P-WeMos
192.178.1.70
Started: 2016-10-08 21:51:34
Edit / Nachträge:
- seit CCU2 FW 2.27.8 führen z.B. im emailText Zeilenumbrüche als "\n" kodiert zum Nichtversenden der email. Workaround: Zeilenumbruch als "%0D%0A% kodieren
- Mittlerweile gibt es auch eine Lösung emails über CUxD und email-Addon zu versenden. Dadurch spart man sich die Systemvariablen für Adresse, Subject und Text und man braucht kein Skript auf der CCU. Wie es geht habe ich dort beschrieben viewtopic.php?p=348490#p348490 und viewtopic.php?p=348484#p348484.