ich habe bei mir alle Geräte nach folgenden Schema benannt Ort.Geschoss.Raum.Element(.Gerät). Beispielshaft I.EG.Wohnzimmer.Terassentür.SWDM oder A.OG.Balkon.Licht.
Jetzt habe ich ein vorhandenes Script so umgeschrieben, dass mir die offenen Fenster bzw. Türen aufgezählt werden und dann via Alexa ausgegeben werden. Jetzt sagt natürlich Alexa zu mir: "Folgende Türen oder Fenster sind offen: I.EG.Wohnzimmer.Terassentür.SWDM" und das klingt natürlich nicht sehr schön und ist dann bei mehreren offenen Türen / Fenstern dann auch noch extra lang.
Ich könnte jetzt natürlich alle Geräte umbennen, so dass aus I.EG.Wohnzimmer.Terassentür.SWDM nur Wohnzimmer Terassentür wird. Das würde das Problem größtenteils beseitigen, aber a) möchte ich nicht alle Geräte umbenennen und b) haben manche Elemente mehrere Geräte - beispielshaft I.EG.Wohnzimmer.Terassentür.SRH.
Jetzt hätte ich zwei Fragen an die Script Profis:
1. Wie kann ich während der Laufzeit des Scripts die Umbenennung vornehmen, so dass ich nicht alle Geräte umbenennen muss? bzw. welche elegantere Lösung gibt es ggf?
2. Wie kann ich Geräte, die am gleichen Element hängen, zusammenfassen, so dass diese nicht doppelt ausgegeben werden, wie zB SRH und SWDM?
Mein Script sieht wie folgt aus:
Code: Alles auswählen
var sec=dom.GetObject("funcSecurity");
if (sec) {
string i; string list; list="";
foreach(i,sec.EnumUsedIDs()) {
var channel=dom.GetObject(i);
boolean isOn = false;
if(channel.IsTypeOf(OT_CHANNEL)) {
var dev=dom.GetObject(channel.Device());
if(
(dev.HssType()=="HmIP-SWDO-I") ||
(dev.HssType()=="HmIP-SWDM") ||
(dev.HssType()=="HmIP-SRH")) {
var state=channel.DPByHssDP("STATE");
if (!state) {
var level=channel.DPByHssDP("LEVEL");
if (level.Value() > 0) {
isOn = true;
}
} else {
if(state.Value()) {
isOn = true;
}
}
if (isOn == true) {
list=list#channel.Name()#"\n ";
}
}
}
}
if (list.Length() > 2) {
list = list.Substr(0,list.Length()-2);
} else {
list = "Alle Türen oder Fenster sind geschlossen.";
}
} else {
list = "FEHLER - GEWERK PRUEFEN!";
}
WriteLine(list);
string Alexa_fixed = "Folgende Türen oder Fenster sind offen!";
string Alexa_variabel = list;
string texttest = Alexa_fixed + Alexa_variabel;
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Alexa TTS Echo").State(texttest);
! Sprachausgabe auf Echo Flur
! -----------------------------------------------------------------------------------------------------------------------
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Alexa TTS Echo").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d 'Echo' -e speak:'" #message.ToUTF8() #"' &");