Hallo
ich bin neu in diesem Forum. Habe nun lange damit verbracht diverse Beiträge zu lesen, bin aber nicht fündig geworden. Ich erlaube mir mein Anliegen hier zu platzieren. Vermutlich wurde dies in der Vergangenheit schon mehrfach gefragt. Habe aber eine passende Antwort bis anhin nicht gefunden.
Habe mir ein einfaches Programm zusammengestellt, welches mir eine Email sendet, eine der zwei Türen auf geht. Funktioniert einwandfrei. Siehe Anhang.
Nun möchte ich nur noch, dass ich im email.body den auslösenden Aktor einfügen kann. Damit ich weiss welche Türe sich geöffnet hat. Habe keinen Plan wie ich dies da reinkriege. Hab was mit TCL Variablen gelesen etc. Weiss nicht ob es eine Systemvariable gibt, welche ein Pointer auf den im Programm auszulösendes Gerät war. Bin aber an dieser Stelle ein wenig ratlos. Alternativ kann ich zwei Programme machen auf je einen Gerät. Wär halt schöner in einem Programm zu machen.
Kann mir da jemand einen Tip geben, in welche Richtung ich loslaufen soll?
Danke und Gruss
Robert
Gerätename in email.body einfügen
Moderator: Co-Administratoren
-
- Beiträge: 6744
- Registriert: 22.05.2012, 08:40
- System: CCU
- Hat sich bedankt: 25 Mal
- Danksagung erhalten: 486 Mal
Re: Gerätename in email.body einfügen
Im einfachsten Fall legst Du einfach zwei Programme an mit einem Auslöser, dann kannst Du auch einfach in den Body statt Door Alarm Open die passende Bezeichnung der Tür reinschreiben, weil der Auslöser eindeutig ist.
- Black
- Beiträge: 5483
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: Gerätename in email.body einfügen
Es braucht keine 2 oder mehr Programme,
Den Auslöser des Programmes bekommst du mit den paar Scriptzeilen raus:
sDevName enthält in dem Falle den Namen des Gerätes, dessen Datenpunkt das Programm getriggert hatte.
Das musst du dann entprechend in dem Script weiterverarbeiten und zuweisen. (heisst die Scriptzeilen sinnig in des Script deines Programmes einarbeiten und sDevName dann entsprechend verarbeiten
Black
Den Auslöser des Programmes bekommst du mit den paar Scriptzeilen raus:
Code: Alles auswählen
object oID= dom.GetObject("$src$");
string sDevName;
if (oID) {
if (oID.Type()==OT_HSSDP) {
sDevName= (devices.Get((channels.Get(oID.Channel())).Device())).Name();
}
}
Das musst du dann entprechend in dem Script weiterverarbeiten und zuweisen. (heisst die Scriptzeilen sinnig in des Script deines Programmes einarbeiten und sDevName dann entsprechend verarbeiten
Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
-
- Beiträge: 4155
- Registriert: 09.09.2012, 10:41
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 78 Mal
- Danksagung erhalten: 301 Mal
Re: Gerätename in email.body einfügen
Die Richtung sieht so aus:
Ich habe eine Systemvariable (eigentlich mehrere, da ich mehrere Scharfschaltebereiche habe) "Alarm_Eingaenge_Ausloeser".
Im Programm, das durch die auslösenden Sensoren getriggert wird, wird unter anderem flgendes Script ausgeführt, welches die se Variable füllt:
Im E-Mail AddOn wird dann folgendes TCL-Script definiert:
Wie gesagt - ich habe mehrere Alarmarten/-bereiche.
Bei Alarm wird per Script der Mailversand angestoßen:
Der im TCL-Script definierte Wert wird dann im Mailbody eingefügt:
Kleiner Schönheitsfehler:
Die Werte V1 bis V4 definieren erstausgelöste Melder von vier Schafschaltebereichen.
Die in HM definierte SV wird immer beim Unscharfschalten mit einem Punkt gefüllt. Somit ist nur die SV des alarmauslösenden Bereichs mit sinnvollem Inhalt gefüllt. Ergebnis (Beispiel) in der Mail:
Hätte ich umgehen können, indem ich für jeden Bereich eine eigene Mailvorlage definiert hätte. Aber ich bin faul...
Ich habe eine Systemvariable (eigentlich mehrere, da ich mehrere Scharfschaltebereiche habe) "Alarm_Eingaenge_Ausloeser".
Im Programm, das durch die auslösenden Sensoren getriggert wird, wird unter anderem flgendes Script ausgeführt, welches die se Variable füllt:
Code: Alles auswählen
! Auslöser in SV Alarm_Eingaenge_Ausloeser schreiben
var source = dom.GetObject("$src$");
if(source.IsTypeOf(OT_VARDP))
{
var source = dom.GetObject("$src$").Name();
}
else{
var source = dom.GetObject(((dom.GetObject("$src$")).Channel())).Name();
}
dom.GetObject("Alarm_Eingaenge_Ausloeser").State(source);
Code: Alles auswählen
array set values [rega_script {
var v1 = dom.GetObject("Alarm_Wohnung_Ausloeser").Value();
var v2 = dom.GetObject("Alarm_ELW_Ausloeser").Value();
var v3 = dom.GetObject("Alarm_Intern_Ausloeser").Value();
var v4 = dom.GetObject("Alarm_Eingaenge_Ausloeser").Value();
var v5 = dom.GetObject("Alarm_Zusatzinfo").Value();
var v6 = dom.GetObject("Alarm_Feuer_Ausloeser").Value();
} ]
set v1 $values(v1)
set v2 $values(v2)
set v3 $values(v3)
set v4 $values(v4)
set v5 $values(v5)
set v6 $values(v6)
Bei Alarm wird per Script der Mailversand angestoßen:
Code: Alles auswählen
string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01", &stdout, &stderr);
Code: Alles auswählen
...
Ausgelöster Bereich: $values(v5)
Erster ausgelöster Melder: $values(v1) $values(v2) $values(v3) $values(v4)
...
Die Werte V1 bis V4 definieren erstausgelöste Melder von vier Schafschaltebereichen.
Die in HM definierte SV wird immer beim Unscharfschalten mit einem Punkt gefüllt. Somit ist nur die SV des alarmauslösenden Bereichs mit sinnvollem Inhalt gefüllt. Ergebnis (Beispiel) in der Mail:
Code: Alles auswählen
...
Ausgelöster Bereich: Intern
Erster ausgelöster Melder: . . Bewegungsmelder_Flur_unten .
...
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.
Re: Gerätename in email.body einfügen
OK. Vielen Dank. Denke nun habe ich genügend Material zu verarbeiten.