Seite 1 von 2

Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 17.02.2010, 23:01
von erik
Hi,

bei der Scripteingabe gibt es drei Felder $val$ $this$ $src$ - für was sind diese?
Zwischenablage01.gif
Zwischenablage01.gif (8.16 KiB) 3248 mal betrachtet
Erik

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 18.02.2010, 00:49
von teddy278
Dieser Beitrag wurde durch den Autor entfernt.

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 20.02.2010, 15:32
von erik
teddy278 hat geschrieben:RTFM! Scriptdokumentation, IIRC Teil 1.

$this$ = aktuelles Programm, $src$ = aufrufendes Objekt, $val$ weiß ich nicht aus dem Kopf.
Hi Teddy,

das ich mal RTFM an den Kopf geworfen bekomme, ist schon lange her.
Habe natürlich die Doku (Teil 1, Bereich 7) gelesen, doch wirklich schlau werde ich da nicht draus.
Was kann ich mit der Info anfangen? Wäre nett, wenn DU ein paar mehr Infos gibst, als einfach nur RTFM - Danke
7 Skriptumgebung
In der Regel wird HomeMatic-Script innerhalb von Programmen auf der HomeMatic
Zentrale verwendet. Für diesen Einsatzzweck sind spezielle Symbole definiert, welche
die Umgebung des Skripts darstellen. Die Symbole werden bei der Ausführung ersetzt.
7.1 Selbstbezug - $this$
Das Symbol „$this$“ ist in jedem Fall vorhanden. Es wird ersetzt durch die Id des
Programms, in dem das Skript abläuft.
Für das folgende Beispiel wurde eine Systemvariable mit dem Namen „i“ vom Typ
„Zahl“ angelegt. Anschließend wurde ein Programm erstellt, welches keine Bedingung
und als einzige Aktion das folgende Skript besitzt:
Beispiel:
var i = dom.GetObject("i");
i.Variable($this$);
Anschließend wurde das Programm gespeichert und auf „aktiv“ gesetzt. Sobald man
das Programm über die Bedienung ausführt, wird der Systemvariablen die Id des
Programms zugewiesen.
7.2 Quelle - $src$
Das Symbol „$src$“ bezeichnet den Datenpunkt, welcher das Programm, in dem das
Skript abläuft, ausgelöst hat. Reagiert ein Programm auf mehrere Ereignisse, kann auf
diese Weise herausgefunden werden, welches der Ereignisse die Ausführung ausgelöst
hat.
Unter bestimmten Umständen, z.B. wenn ein Programm manuell ausgeführt wird, ist
das Symbol „$src$“ nicht gesetzt. In diesen Fällen wird es nicht aufgelöst.
Im folgenden Beispiel wird die Systemvariable i (Typ: Zahl) auf die Id des Datenpunktes
gesetzt, der das betreffende Programm angestoßen hat. Ist keine Quelle verfügbar, weil
das Programm z.B. manuell ausgeführt wurde, wird i auf -1 gesetzt.
Beispiel:
var i = dom.GetObject("i");
var source = dom.GetObject("$src$");
if (source) { i.Variable(source.ID()); }
else { i.Variable(-1); }
Bevor das Skript ausgeführt wird, werden alle Vorkommen von „$src$“ durch die Id des
tatsächlichen Auslösers ersetzt. Wird das Programm von einem externen Ereignis
angestoßen, so wird in Zeile 2 die Variable „source“ auf den Auslöser gesetzt. Wird das

Programm dagegen manuell ausgeführt, existiert kein Auslöser und „$src$“ wird nicht
ersetzt. Da es kein Objekt mit der Bezeichnung „$src$„ gibt, liefert „dom.GetObject“
den Wert „null“.
Grüße

Erik

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 20.02.2010, 19:18
von teddy278
Dieser Beitrag wurde durch den Autor entfernt.

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 17.05.2021, 11:35
von Heinz H.
Ich möchte diese Frage speziell im Blick auf $this$ noch einmal aufgreifen,
komme aber mit der praktischen Anwendung noch nicht zurecht.

Problem:
Scripte, die ich im SDV teste lasse ich oft mit Testwerten laufen. Diese Werte werden in eine if-Abfrage eingebunden.
Z.Bsp. if (Test == true) ....
Kopiere ich das Script dann in die WebUi, muss ich diese Abfrage auf jedesmal false setzen, lästig besonders wenn ich es vergesse.

Das könnte ich eventuell mit der Funktion $this$ kombinieren, das Script merkt beim Ablauf, dass es sich in der WebUi befindet und umgeht die Testwertübernahme.

Ist der Gedankengang so richtig - oder ginge das noch ganz anders viel einfacher.

Falls es ein Weg ist, brauche ich Hilfe diese $this$-Abfrage richtig zu programmieren. Mit den Angaben in der Doku Punkt 7 komme ich so noch nicht zurecht.

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 17.05.2021, 12:26
von Black
$this$ ist ein Selbstbezug aus das Programm, welches das Script aufgerufen hat.


object o=dom.GetObject ("$this$");
If (o) { AUS PROGRAMM HERAUS} else { aus script testen oder api }

Black

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 17.05.2021, 12:45
von Baxxy
Hmm, da er mit dem SDV testet funktioniert das aber nicht.
Lässt man das "$this$"-Feld unten im SDV unberührt (= $this$ ) gibt's nen SyntaxError, leert man das Feld ergibt das als object DOM und somit true.

Alchy löst das ziemlich clever in seinem Auslöser finden... Script.

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 17.05.2021, 16:38
von Heinz H.
Vielen Dank Black & Baxxi,

nun bin ich weitergekommen, ich habe aus Alchys Script die für mich nötigen Zeilen eingesetzt - und es klappt !
Danke auch für die schnelle Reaktion!

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 21.10.2021, 17:12
von Andersmacher
$this$ und $src$ wurden hier erklärt und stehen ja auch in der Skript-Doku. Eine Erklärung für $val$ habe ich nirgends gefunden. Weiß da jemand mehr?

Re: Felder $val$ $this$ $src$ Scripteingabe

Verfasst: 21.10.2021, 17:46
von Baxxy
Andersmacher hat geschrieben:
21.10.2021, 17:12
$val$
Naja, das ist dann der "auslösende" Wert.
Black hatte >>hier<< mal ein Beispiel dazu gepostet. Und Alchy verwendet das auch in seinem "Programmauslöser-Script".

Grüße, Baxxy