LowBat script und e-mail Funktion

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

bigscreen
Beiträge: 75
Registriert: 20.10.2009, 21:14

LowBat script und e-mail Funktion

Beitrag von bigscreen » 28.11.2009, 17:29

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

rhobin
Beiträge: 1007
Registriert: 09.11.2009, 12:01

Re: LowBat script und e-mail Funktion

Beitrag von rhobin » 30.11.2009, 08:06

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

LarsM
Beiträge: 202
Registriert: 08.05.2009, 22:36

Re: LowBat script und e-mail Funktion

Beitrag von LarsM » 11.05.2010, 12:56

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:
  1. 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)
  2. 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)
  3. 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)
Egal wie ich es drehe und wende, es läuft darauf hinaus, dass ich vmtl. einen Fehler bei der Variablenübergabe mache. Ich finde aber auch keine passende Lösung in den 4 Handbüchern der Scriptdokumentation. Eine Variable ist ja nur bis zum Laufzeitende des Scripts gültig, also muss ich sie irgendwie an eine Systemvariable übergeben, damit sie Bestand hat und weiterverarbeitet werden kann - nur wie geht das?
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

rhobin
Beiträge: 1007
Registriert: 09.11.2009, 12:01

Re: LowBat script und e-mail Funktion

Beitrag von rhobin » 11.05.2010, 14:05

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.
Das ist exakt richtig. SENDEMAIList ein Befehl aus Homeputer CL, der funktioniert sicher nicht in einem Script von der CCU aus.

ich kann Dir bei Script-Problemen nicht helfen - es gibt aber sicher Profis genug hier, die Dir Auskunft geben können.

Gruß
Rhobin

LarsM
Beiträge: 202
Registriert: 08.05.2009, 22:36

Re: LowBat script und e-mail Funktion

Beitrag von LarsM » 13.05.2010, 09:03

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)

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;
}
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.

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

Benutzeravatar
straubm
Beiträge: 25
Registriert: 31.03.2010, 11:31

Re: LowBat script und e-mail Funktion

Beitrag von straubm » 14.05.2010, 19:23

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!
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

LarsM
Beiträge: 202
Registriert: 08.05.2009, 22:36

Re: LowBat script und e-mail Funktion

Beitrag von LarsM » 15.05.2010, 09:32

Die Übergabe mittels argv habe ich im großen und ganzen verstanden, denke ich.
straubm hat geschrieben:...string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01 " # parameter, &stdout, &stderr);
...
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.
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

Benutzeravatar
straubm
Beiträge: 25
Registriert: 31.03.2010, 11:31

Re: LowBat script und e-mail Funktion

Beitrag von straubm » 15.05.2010, 10:22

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
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

Kadege
Beiträge: 78
Registriert: 12.10.2010, 12:13
Wohnort: an Rhein und Ruhr

Re: LowBat script und e-mail Funktion

Beitrag von Kadege » 05.11.2010, 11:30

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.
Gruß Kadege

LarsM
Beiträge: 202
Registriert: 08.05.2009, 22:36

Re: LowBat script und e-mail Funktion

Beitrag von LarsM » 05.11.2010, 12:43

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.
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

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“