LowBat script und e-mail Funktion
Moderator: Co-Administratoren
LowBat script und e-mail Funktion
Hallo zusammen,
kann mir jemand einen Denkanstoss geben, wie ich die Variable "Text" aus dem LowBat script an das neue e-mail Plugin übergeben kann. Bin nicht der große Programierer und stehe gerade total auf dem Schlauch. Letztendlich möchte ich nur ein mail wenn irgendwo eine Baterie leer ist.
Vielen Dank für den Denkanstoss.
Viele Grüße
Bigscreen
kann mir jemand einen Denkanstoss geben, wie ich die Variable "Text" aus dem LowBat script an das neue e-mail Plugin übergeben kann. Bin nicht der große Programierer und stehe gerade total auf dem Schlauch. Letztendlich möchte ich nur ein mail wenn irgendwo eine Baterie leer ist.
Vielen Dank für den Denkanstoss.
Viele Grüße
Bigscreen
Re: LowBat script und e-mail Funktion
Hallo Bigscreen,
versuche'a mal so:
Die "Low-Bat"-Nachricht an eine Variable (z.B. MT) übergeben und dann in ein Makro
SENDEMAIL("DeinEMAIL@tralala.de", Uhr + "Info: Batterie leer im Gerät: " + MT)
schreiben.
Du musst natürlich vorher Deine Email-Adresse (samt Passwort und SMTP-Server) der Software bekannt machen. Wenn Du nicht weißt, wo, melde Dich wieder.
Gruß
Rhobin
versuche'a mal so:
Die "Low-Bat"-Nachricht an eine Variable (z.B. MT) übergeben und dann in ein Makro
SENDEMAIL("DeinEMAIL@tralala.de", Uhr + "Info: Batterie leer im Gerät: " + MT)
schreiben.
Du musst natürlich vorher Deine Email-Adresse (samt Passwort und SMTP-Server) der Software bekannt machen. Wenn Du nicht weißt, wo, melde Dich wieder.
Gruß
Rhobin
Re: LowBat script und e-mail Funktion
Da ich exakt das gleiche Problem habe, möchte ich den Thread mal wieder aktivieren.
Das Makro SENDEMAIL("DeinEMAIL@tralala.de", Uhr + "Info: Batterie leer im Gerät: " + MT) ist vmtl. eine Lösung mittels Homeputer, denn die CCU spricht entweder von Programmen, Direktverknüfungen oder Skripts.
Ich habe eine Systemvaribale LowBat angelegt und ein dazugehöriges Programm, welches zeitgesteuert (WENN), das unveränderte LowBat-Skript und das eMail-Skript von Homematic-Inside.de ausführt.
Ich habe auch dafür das Gewerk "Batterie betrieben" angelegt und alle Batterie-Geräte darin aufgenommen.
Wie kann ich jedoch die Variable text aus dem ersten Skript an die Systemvariable LowBat übergeben? Im nächsten Schritt würde ich diese gerne per eMail versenden. Der allgmeine eMail-Versand funktioniert bereits problemlos.
Ich habe schon verschiedene Lösungen ausprobiert:
Das Makro SENDEMAIL("DeinEMAIL@tralala.de", Uhr + "Info: Batterie leer im Gerät: " + MT) ist vmtl. eine Lösung mittels Homeputer, denn die CCU spricht entweder von Programmen, Direktverknüfungen oder Skripts.
Ich habe eine Systemvaribale LowBat angelegt und ein dazugehöriges Programm, welches zeitgesteuert (WENN), das unveränderte LowBat-Skript und das eMail-Skript von Homematic-Inside.de ausführt.
Ich habe auch dafür das Gewerk "Batterie betrieben" angelegt und alle Batterie-Geräte darin aufgenommen.
Wie kann ich jedoch die Variable text aus dem ersten Skript an die Systemvariable LowBat übergeben? Im nächsten Schritt würde ich diese gerne per eMail versenden. Der allgmeine eMail-Versand funktioniert bereits problemlos.
Ich habe schon verschiedene Lösungen ausprobiert:
- LowBat-Sript in den Script-Editor für die Programmerstellung unter DANN eingefügt, zweites DANN ist das eMail-Script (system.EXEC-Aufruf) dies kann aber mit der Variable text nichts anfangen)
- eMail-Script in den Script-Editor für die Programmerstellung unter DANN eingefügt, im TCL-Editor der eMail-Einstellungen das LowBat-Script eingefügt (im Log steht wiederum unbekannte Variable text)
- LowBat-Sript in den Script-Editor für die Programmerstellung unter DANN eingefügt und das eMail-Script an das Ende des LowBat-Script oder direkt hinter unter text = text # ", " # item.Name(); eingefügt (im Log steht wiederum unbekannte Variable text)
Zuletzt geändert von LarsM am 11.05.2010, 19:52, insgesamt 1-mal geändert.
Gruß
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Re: LowBat script und e-mail Funktion
Das ist exakt richtig. SENDEMAIList ein Befehl aus Homeputer CL, der funktioniert sicher nicht in einem Script von der CCU aus.LarsM hat geschrieben:Das Makro SENDEMAIL("DeinEMAIL@tralala.de", Uhr + "Info: Batterie leer im Gerät: " + MT) ist vmtl. eine Lösung mittels Homeputer, denn die CCU spricht entweder von Programmen, Direktverknüfungen oder Skripts.
ich kann Dir bei Script-Problemen nicht helfen - es gibt aber sicher Profis genug hier, die Dir Auskunft geben können.
Gruß
Rhobin
Re: LowBat script und e-mail Funktion
Da HomeMatic-Inside down ist und ich leider noch immer keine Lösung für mein Problem habe, zitiere ich hiermit die beiden Skripts:
LowBat-Skript: Das Gewerk "Batterie betreiben" enthält alle batterieberiebenen Sensoren und Aktoren, die Variable text möchte ich abschließend an eine Systemvariable übergeben (heißt bei mir LowBat und ist als Zeichenkette definiert)
eMail-Skript: Hier wird ein Skript aufgerufen, dass mit Hilfe von 10 verschiedene vordefinierte (im Beispiel 01) eMail-Vorlagen eine Mail versendet. Dabei können Variablen genutzt werden, welche dort im TCL-Skript enthalten sind (z.B. $variable, diese wird mit TCL wie folgt definiert set variable variableninhalt). Hier möchte ich die Systemvariable an $variable übergeben.
LowBat-Skript: Das Gewerk "Batterie betreiben" enthält alle batterieberiebenen Sensoren und Aktoren, die Variable text möchte ich abschließend an eine Systemvariable übergeben (heißt bei mir LowBat und ist als Zeichenkette definiert)
Code: Alles auswählen
var myAssembly = dom.GetObject("Batterie betrieben");
string itemID;
string text = "";
integer counter = 0;
foreach(itemID, myAssembly.EnumUsedIDs())
{
var item = dom.GetObject(itemID);
var device = dom.GetObject(item.Device());
var interface = dom.GetObject(item.Interface());
string interface_name = interface.Name();
string device_address = device.Address();
device_address = device_address.StrValueByIndex(":", 0);
string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
var channel = dom.GetObject(channel_name);
if ( (channel.State() == true) && (channel.Value() == true) )
{
if ( counter == 0 )
{
text = item.Name();
}
else
{
text = text # ", " # item.Name();
}
}
counter = counter + 1;
}
Code: Alles auswählen
string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01");
Gruß
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Re: LowBat script und e-mail Funktion
Hi,
dem TCL werden Parameter in argv übergeben, Parameter 0 ist der erste, hier die Nummer der Template, Parameter 1 ... n sind dann die eigenen.
lindex extrahiert den Parameter (1 den 2., 100 den 101.).
Im TCL trägt Du (mit eckigen Klammern!) ein:
set msg [lindex $argv 1]
im Template muss stehen:
......... $msg ...........
der Aufruf ist (parameter ist der Text, der mit soll):
string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01 " # parameter, &stdout, &stderr);
Take Care!
dem TCL werden Parameter in argv übergeben, Parameter 0 ist der erste, hier die Nummer der Template, Parameter 1 ... n sind dann die eigenen.
lindex extrahiert den Parameter (1 den 2., 100 den 101.).
Im TCL trägt Du (mit eckigen Klammern!) ein:
set msg [lindex $argv 1]
im Template muss stehen:
......... $msg ...........
der Aufruf ist (parameter ist der Text, der mit soll):
string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01 " # parameter, &stdout, &stderr);
Take Care!
Mit freundlichen Grüßen
Martin Straub
Wien
1xHM-CCU-1, 1xHM-RC-19, 1xHM-Sec-MDIR, 1xHM-Sec-Key, 1xHM-RC-Key3, 1xHM-WDS100-C6-O, 1xHM-OU-CF-Pl, 2xHM-LC-Sw2-FM, 9xHM-LC-Bl1-FM
Martin Straub
Wien
1xHM-CCU-1, 1xHM-RC-19, 1xHM-Sec-MDIR, 1xHM-Sec-Key, 1xHM-RC-Key3, 1xHM-WDS100-C6-O, 1xHM-OU-CF-Pl, 2xHM-LC-Sw2-FM, 9xHM-LC-Bl1-FM
Re: LowBat script und e-mail Funktion
Die Übergabe mittels argv habe ich im großen und ganzen verstanden, denke ich.
Aber im Grunde will ich ja nicht einen beliebigen Text, sondern die Systemvariable LowBat übergeben, welche zuvor von dem LowBat-Script die Batterie-Zustände zugewiesen bekommt.
Gelingen tut mir aber keines von beiden. Die Systemvariable LowBat ist immer noch "???".
Irgendwo mache ich einen deutlichen Denkfehler. Erstes Skript soll den Wert aus text an die Systemvariable LowBat übergeben, zweites Script soll die Systemvariable verarbeiten und mir als Mail zukommen lassen.
Wenn ich diesen Aufruf mit einem String (z.B.- Parameter, text, LowBat (Systemvariable),...) teste, bekomme ich bereits einen Parser Error (Zeile 3, Spalte 99). Fehlerfrei bleibt es nur, solange ich numerische Daten als Paramter (z.B. 1, 2 oder 3) angebe.straubm hat geschrieben:...string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01 " # parameter, &stdout, &stderr);
...
Aber im Grunde will ich ja nicht einen beliebigen Text, sondern die Systemvariable LowBat übergeben, welche zuvor von dem LowBat-Script die Batterie-Zustände zugewiesen bekommt.
Gelingen tut mir aber keines von beiden. Die Systemvariable LowBat ist immer noch "???".
Irgendwo mache ich einen deutlichen Denkfehler. Erstes Skript soll den Wert aus text an die Systemvariable LowBat übergeben, zweites Script soll die Systemvariable verarbeiten und mir als Mail zukommen lassen.
Gruß
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Re: LowBat script und e-mail Funktion
Habe folgendes probiert:
real test = 1.0;
system.Exec("/etc/config/addons/email/email 01 " # test, &stdout, &stderr);
boolean test = true;
system.Exec("/etc/config/addons/email/email 01 " # test, &stdout, &stderr);
geht alles, test wird vor der Concatenation immer automatisch richtig in Text gewandelt. Der Punkt ist, dass die Übergabe als String erfolgen muss, der Befehl wird dem exec ja auch als string gegeben. Andere Typen dann im Tcl halt wieder vom String zurückwandeln, falls dort gerechnet werden soll.
So sieht mein vollständiger Code aus, der exakt das tut, was Du willst: Systemvariable per eMail versenden! Ich checke auch in einem anderen Script die Geräte, stelle noch eine zusätzliche Systemvariable mit den Gerätenahmen der betroffenen Geräte zusammen ("Fehlergeräte") und verschicke im zweiten Script (siehe unten) die eMail, die dann sagt "Die Batterie bei HM-xxxxx-blah, HM-Sec-blahblah, ... ist schwach". Bei Interesse Listing gern per PN.
var text = dom.GetObject("Fehlergeräte").State(); !Systemvariable holen
var cmd = "/etc/config/addons/email/email 01 " # "'"# text # "'"; !Zwischenschritt für Lesbarkeit, die beiden "'" sind wegen embedded blanks nötig
system.Exec(cmd, &stdout, &stderr); !ab dafür
real test = 1.0;
system.Exec("/etc/config/addons/email/email 01 " # test, &stdout, &stderr);
boolean test = true;
system.Exec("/etc/config/addons/email/email 01 " # test, &stdout, &stderr);
geht alles, test wird vor der Concatenation immer automatisch richtig in Text gewandelt. Der Punkt ist, dass die Übergabe als String erfolgen muss, der Befehl wird dem exec ja auch als string gegeben. Andere Typen dann im Tcl halt wieder vom String zurückwandeln, falls dort gerechnet werden soll.
So sieht mein vollständiger Code aus, der exakt das tut, was Du willst: Systemvariable per eMail versenden! Ich checke auch in einem anderen Script die Geräte, stelle noch eine zusätzliche Systemvariable mit den Gerätenahmen der betroffenen Geräte zusammen ("Fehlergeräte") und verschicke im zweiten Script (siehe unten) die eMail, die dann sagt "Die Batterie bei HM-xxxxx-blah, HM-Sec-blahblah, ... ist schwach". Bei Interesse Listing gern per PN.
var text = dom.GetObject("Fehlergeräte").State(); !Systemvariable holen
var cmd = "/etc/config/addons/email/email 01 " # "'"# text # "'"; !Zwischenschritt für Lesbarkeit, die beiden "'" sind wegen embedded blanks nötig
system.Exec(cmd, &stdout, &stderr); !ab dafür
Mit freundlichen Grüßen
Martin Straub
Wien
1xHM-CCU-1, 1xHM-RC-19, 1xHM-Sec-MDIR, 1xHM-Sec-Key, 1xHM-RC-Key3, 1xHM-WDS100-C6-O, 1xHM-OU-CF-Pl, 2xHM-LC-Sw2-FM, 9xHM-LC-Bl1-FM
Martin Straub
Wien
1xHM-CCU-1, 1xHM-RC-19, 1xHM-Sec-MDIR, 1xHM-Sec-Key, 1xHM-RC-Key3, 1xHM-WDS100-C6-O, 1xHM-OU-CF-Pl, 2xHM-LC-Sw2-FM, 9xHM-LC-Bl1-FM
Re: LowBat script und e-mail Funktion
Hallo zusammen, ich hole die Eingangsfrage von bigscreen (und von LarsM) mal hervor, weil ich das gleiche Problem habe und die Antworten in diesem Thread mir nicht weiterhelfen.
Wie bekommt man die Low-Bat-Nachricht aus dem Script an eine Systemvariable übergeben?
Auch der letzte Beitrag von straubm hilft mir nicht so recht weiter, da er m.E. den ersten Schritt (Scriptvariable an Systemvariable) nicht beschreibt.
Wie bekommt man die Low-Bat-Nachricht aus dem Script an eine Systemvariable übergeben?
Auch der letzte Beitrag von straubm hilft mir nicht so recht weiter, da er m.E. den ersten Schritt (Scriptvariable an Systemvariable) nicht beschreibt.
Gruß Kadege
Re: LowBat script und e-mail Funktion
Also ich habe auch noch keine Lösung für die Übergabe an eine Systemvariable.
Das grundsätzliche Problem LowBat an eMail/SMS habe ich inzwischen durch den Dienst von meine-homematic.de gelöst. Ob das jedoch tatsächlich funktioniert, kann ich nicht sagen, da ich derzeit nicht zu Hause bin und das Script über Fernzugang eingespielt habe.
Auch habe ich in dem halben Jahr, die ich die Homematic jetzt nutze, noch nicht eine einzige Servicemeldung erhalten - müssen überall Duracell-Batterien drin sein
Offenbar läuft die Anlage absolut fehlerfrei.
Das grundsätzliche Problem LowBat an eMail/SMS habe ich inzwischen durch den Dienst von meine-homematic.de gelöst. Ob das jedoch tatsächlich funktioniert, kann ich nicht sagen, da ich derzeit nicht zu Hause bin und das Script über Fernzugang eingespielt habe.
Auch habe ich in dem halben Jahr, die ich die Homematic jetzt nutze, noch nicht eine einzige Servicemeldung erhalten - müssen überall Duracell-Batterien drin sein
Offenbar läuft die Anlage absolut fehlerfrei.
Gruß
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000
Lars
84 Kanäle in 39 Geräten und 29 CUxD-Kanäle in 14 CUxD-Geräten:
2x HM-Sec-SC, 8x HM-CC-VD, 8x HM-CC-TC, 3x HM-Sec-WDS, 5x HM-Sec-RHS, 1x CUX28, 1x CUX40, 1x HM-WDS10-TH-O, 8x CUX02, 2x CUX06, 1x HM-CCU-1, 2x HM-RC-Key3-B, 3x HM-Sec-SD, 2x CUX03, 1x HM-WDS100-C6-O, 1x HM-Sec-SD-Team, 1x HM-OU-LED16, 2x HM-Sec-MDIR, 1x HM-WDC7000