Gelöst: Wie auslösende Systemvariable ermitteln ?

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Gelöst: Wie auslösende Systemvariable ermitteln ?

Beitrag von paul53 » 03.04.2013, 16:57

In einem Script, das von zwei Systemvariablen ausgelöst wird, möchte ich ermitteln, welche SV die auslösende SV war, was mir jedoch nicht gelingt.

Code: Alles auswählen

var src = dom.GetObject("$src$");
dom.GetObject("Test_String").State(src);

if (src == "Test_bool") {dom.GetObject("Test_Multistate").State(2);}
else {dom.GetObject("Test_Multistate").State(1);}
In der SV "Test_String" wird mir der Name der auslösenden SV geliefert, aber der Vergleich funktioniert nicht, denn er liefert immer falsch zurück. D.h. die SV "Test_Multistate" wird immer mit dem Wert 1 beschrieben.

Hat jemand eine Idee, wie man die auslösende SV ermitteln kann ?

Den Test habe ich mittels HQ WebUI vorgenommen, da man hiermit die Werte der SV bequem ändern kann.
Zuletzt geändert von paul53 am 03.04.2013, 19:39, insgesamt 1-mal geändert.
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

stefanp
Beiträge: 38
Registriert: 18.12.2012, 22:15

Re: Wie auslösende Systemvariable ermitteln ?

Beitrag von stefanp » 03.04.2013, 19:25

Nur mal so vermutet - ich habe mich selbst noch nicht damit beschäftigt:
"src" wird die Objectreferenz der Systemvariable zugewiesen, nicht Ihr Name.
Um einen Vergleich durchzuführen musst du eine identische Eigenschaft von src und deiner Systemvariable finden.
Ich habe gerade keine CCU zur Hand um das auszuprobieren... aber die ID des Datenpunktes müsste hier eigentlich weiterhelfen.

Code: Alles auswählen

    var src = dom.GetObject("$src$");
    var vgl1 = dom.GetObject("Variable1");
    var vgl2 = dom.GetObject("Variable2");
if( src.ID() == vgl1.ID() ) 
{
 WriteLine( "Quelle ist Variable1");
}

if( src.ID() == vgl2.ID() ) 
{
 WriteLine( "Quelle ist Variable2");
}

Alternativ zur .ID() müsste auch Name() funktionieren.
Ob sich die Objektreferenzen direkt vergleichen lassen weiss ich aus dem Stand leider nicht.

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Wie auslösende Systemvariable ermitteln ?

Beitrag von paul53 » 03.04.2013, 19:39

Habe das Problem gelöst mit der Methode Name():

Code: Alles auswählen

var src = dom.GetObject("$src$").Name();
dom.GetObject("Test_String").State(src);

if (src == "Test_bool") {dom.GetObject("Test_Multistate").State(2);}
else {dom.GetObject("Test_Multistate").State(1);}
Da hätte ich eigentlich gleich drauf kommen können. Offenbar hat mich die Tatsache verwirrt, dass das direkte Schreiben der Objekt-Referenz in eine Systemvariable vom Typ Zeichenkette ohne die Methode Name() den Namen angezeigt hat.
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“