Homematic
Programm aktiv/inaktiv in Variable schreiben

Programm aktiv/inaktiv in Variable schreiben

Das hier wird ein kurzer Beitrag. Ich möchte hier kurz ein Script vorstellen, mit dessen Hilfe es möglich ist, ein Programm zu aktivieren, bzw. zu deaktivieren, sowie den Status eines Programms in eine Variable zu schreiben.

Das kann beispielsweise dann hilfreich sein, wenn man häufig Programme deaktiviert, statt mit Automatismen zu arbeiten.

Wie rechts im Bild zu sehen, sind (wie wohl bei den meisten) die Haken bei „aktiv“ vorhanden. Um nun in Mediola oder ioBroker anzeigen zu lassen, ob ein Programm aktiv oder inaktiv ist, benötigt man eine Systemvariable, dessen Status man verarbeiten kann.

Schritt 1:
Zuerst erstellen wir eine Variable vom Typ Logik mit einer Bezeichnung, die sich auf das jeweilige Programm bezieht. Bei mir habe ich als Beispiel das Programm „Backup erstellen“ verwendet. Demnach lautet auch meine Variable „Programm Backup“ mit den Werten „aktiv“ bzw. „inaktiv“.

Schritt 2:
Nun folgt das eigentliche Programm, mit dem das Programm aktiviert oder deaktiviert werden kann. Dies geschieht im „toggle“. Das bedeutet, dass bei jedem Durchlauf des Programms, auch der jeweilige Status geändert wird. War das Programm aktiv, wird es deaktiviert. War es deaktiviert, wird es aktiviert usw.

Aus Trigger kann man nun den Tastendruck einer Fernbedienung nehmen, einen virtuellen Taster, einen Lichtschalter, Funktaster oder etwas ähnliches, bei dem ein Tasterdruck möglich ist.

Das Script selbst lautet:

var prg = dom.GetObject("NamedesProgramms");
var prgstate = prg.Active();
prg.Active(!prgstate);
dom.GetObject("NamederVariablen").State(!prgstate);

Nun sollte sich beim Durchlauf des Programms der Status des Programmes und gleichzeitig auch die Systemvariable ändern.

PS: Auch hier stammt das Script wieder von Jerome Pech. Die Idee stammt von Frank Bugenhagen. 


Update 06.01.2018:
„Harry Fazzebuck“ und Jerome haben dann noch eine Ergänzung dazu entwickelt. Mit folgendem Script können alle inaktiven Programme in der Systemvariable (Zeichenkette) „InactivePrograms“ aufgelistet werden.

string id;
string inactive_pgm_list;
foreach(id, dom.GetObject(ID_PROGRAMS).EnumUsedIDs()){
var program = dom.GetObject(id);
if (!program.Active()) {
inactive_pgm_list = inactive_pgm_list #"<br>"# program.Name();
}
} 
dom.GetObject("InactivePrograms").State(inactive_pgm_list);
WriteLine(inactive_pgm_list)
Print Friendly, PDF & Email
0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.