Szenensteuerung mit HM Script

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Pihero
Beiträge: 238
Registriert: 02.08.2019, 21:24
Wohnort: Pforzheim
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: Szenensteuerung mit HM Script

Beitrag von Pihero » 05.01.2020, 22:06

Ja!
Das wäre toll!

Gruß, Philipp

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Szenensteuerung mit HM Script

Beitrag von alchy » 05.01.2020, 22:28

Sinn des hier vorgestellten Scriptes ist es, einen Istzustand zu speichern und dann diesen wieder her zu stellen.
Ich wage zu bezweifeln das ein Script zur Aufnahme des Zustandes eine gedrückte Taste erwischt.
Das würde ja voraussetzen, das du genau in dem Moment das Script laufen lässt, wo eine Taste gedrückt wird.

Aber jetzt erst gelesen:
Pihero hat geschrieben:
05.01.2020, 12:41
Ich möchte das Skript zur Abschaltung aller Lampen im EG verwenden.
Dazu könnte man es zwar verwenden / verbiegen, aber ist das sinnvoll?
>> Alle Lichter an bzw. ausschalten (Je Raum) <<
sollte die geschilderte Aufgabe besser erfüllen. Oder einfach eine Direktverknüpfung.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Pihero
Beiträge: 238
Registriert: 02.08.2019, 21:24
Wohnort: Pforzheim
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: Szenensteuerung mit HM Script

Beitrag von Pihero » 06.01.2020, 11:24

Da hast du natürlich Recht...in meinem Kopf war der virtuelle Taster irgendwie eher wie eine Systemvariable.
In diesem Fall also "im-Zustand" EIN oder AUS...
Aber klar...ich teste mal die andere Variante.

Aber vielleicht nochmal zur Beschreibung meines Ziels bzw. meiner Installation (vielleicht hat noch jemand eine bessere Idee dafür...)

Ich habe ein Haus saniert und komplett mit Hmipw ausgestattet.
Jetzt haben wir natürlich diverse schaltbare Steckdosen an denen Stehlampen o.ä. hängen.

Im Moment verwende ich für alle Stehlampen in einem Raum einen virtuellen Taster. (...wegen dem gleichzeitig Einschalten etc. ...da gibts ja einiges zu lesen).
D.h. ich habe ja schon direkte Verknüpfungen zwischen dem virtuellen Taster und den Stehlampen.
Jetzt habe ich gedacht ich kann das Skript auf den virtuellen Taster anwenden (über Favorit zugewiesen)...nach deiner Erklärung kann das natürlich nicht funktionieren, eigentlich glasklar!

Danke und Gruß, Philipp

Gerti
Beiträge: 3035
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 274 Mal

Re: Szenensteuerung mit HM Script

Beitrag von Gerti » 04.08.2020, 07:24

Hi!

Ein Bekannter sprach mich gestern an, dass er das Skript nutzen würde und ganz begeistert wäre, seine IP Dimmer damit aber nicht funktionieren würden und ob ich mir das mal ansehen könne.

Damit IP Dimmer unterstützt werden, fehlt in meinen Augen der DIMMER_VIRTUAL_RECEIVER.
Ich habe ihm den Code mal entsprechend erweitert und nun funktioniert es wohl.
Hier mal der erweiterte Code, ich hoffe Alchy ist es recht.

Code: Alles auswählen

! Szenensteuerung Teil 1 durch Auslesen des Zustandes der Kanäle eines Gewerkes oder Favoriten und speichern in Systemvariable
! v 0.5 (c) by Alchy
! Erweitert um IP Dimmer 03.08.2020 Gerti
string liste = "Licht"; ! Name des Gewerkes, Favoriten usw. auch mehrere Möglich dann trennen mit \t 
string sysvar = "Name deiner Speichervariable"; ! Name deiner Speichervariable Typ Zeichenkette welche die ISE_IDs der Datenpunkte enthalten soll 
! Dont touch behind this Line
string index;string slist;var status = "";integer an = 0;integer aus = 0;integer counter = 0; 
foreach (index, liste) {
object sec = dom.GetObject(index);
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
var hssType = item.HssType();
! Schalter
if ( (hssType == "SWITCH") && (item.DPByHssDP("STATE")) ) {
status = item.DPByHssDP("STATE").Value();
slist = slist# (item.DPByHssDP("STATE")).ID()#"="#status#" ";
if(status){ an = an+1; }else{ aus = aus+1;}}
!Dimmer
if ( (hssType == "DIMMER") && (item.DPByHssDP("LEVEL")) ) {
status = item.DPByHssDP("LEVEL").Value();
slist = slist# (item.DPByHssDP("LEVEL")).ID()#"="#status#" ";
if(status){ an = an+1; }else{ aus = aus+1;}
}
!RGBW_COLOR
if ( (hssType == "RGBW_COLOR") && (item.DPByHssDP("COLOR")) ) {
status = item.DPByHssDP("COLOR").Value();
slist = slist# (item.DPByHssDP("COLOR")).ID()#"="#status#" ";
if(status){ an = an+1; }else{ aus = aus+1;}
}
!IP Schalter
if ( (hssType == "SWITCH_VIRTUAL_RECEIVER") && (item.DPByHssDP("STATE")) ) {
status = item.DPByHssDP("STATE").Value();
slist = slist# (item.DPByHssDP("STATE")).ID()#"="#status#" ";
if(status){ an = an+1; }else{ aus = aus+1;}
}
!IP Dimmer
if ( (hssType == "DIMMER_VIRTUAL_RECEIVER") && (item.DPByHssDP("LEVEL")) ) {
status = item.DPByHssDP("LEVEL").Value();
slist = slist# (item.DPByHssDP("LEVEL")).ID()#"="#status#" ";
if(status){ an = an+1; }else{ aus = aus+1;}
}
!Rolloaktoren
if ( (hssType == "BLIND") && (item.DPByHssDP("LEVEL")) ) {
status = item.DPByHssDP("LEVEL").Value();
slist = slist# (item.DPByHssDP("LEVEL")).ID()#"="#status#" ";
if(status){ an = an+1; }else{ aus = aus+1;}
}
counter = an + aus;
}}
}
if (counter > 0) {
WriteLine("von "#counter #" gescannten Kanälen, sind "#an #" Kanäle an und "#aus#" Kanäle aus" );
slist = slist.Substr(0, slist.Length()-1);
WriteLine("\tDatenpunkt IDs "#slist #" aufgenommen");
if ( (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(sysvar) ) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar).State(slist); WriteLine("\t\tgespeichert")}else{WriteLine("Speichervariable nicht vorhanden");}
} else{
WriteLine ("Keine berücksichtigten Kanäle gescannt");
if ( (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(sysvar) ) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar).State(""); WriteLine("Speichervariable zurückgesetzt")}else{WriteLine("Speichervariable nicht vorhanden");}
}
Gruß,
Gerti

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“