Felder $val$ $this$ $src$ Scripteingabe

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

Felder $val$ $this$ $src$ Scripteingabe

Beitrag von erik » 17.02.2010, 23:01

Hi,

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

teddy278

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

Beitrag von teddy278 » 18.02.2010, 00:49

Dieser Beitrag wurde durch den Autor entfernt.
Zuletzt geändert von teddy278 am 12.06.2011, 00:44, insgesamt 1-mal geändert.

erik
Beiträge: 776
Registriert: 31.10.2007, 13:32
Hat sich bedankt: 6 Mal
Danksagung erhalten: 6 Mal

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

Beitrag von erik » 20.02.2010, 15:32

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

teddy278

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

Beitrag von teddy278 » 20.02.2010, 19:18

Dieser Beitrag wurde durch den Autor entfernt.

Benutzeravatar
Heinz H.
Beiträge: 12
Registriert: 25.04.2021, 18:30
System: CCU
Hat sich bedankt: 1 Mal

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

Beitrag von Heinz H. » 17.05.2021, 11:35

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.
Gruß aus dem Sauerland
Heinz.

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

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

Beitrag von Black » 17.05.2021, 12:26

$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
Zuletzt geändert von Black am 17.05.2021, 13:14, insgesamt 1-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
Baxxy
Beiträge: 10647
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

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

Beitrag von Baxxy » 17.05.2021, 12:45

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.

Benutzeravatar
Heinz H.
Beiträge: 12
Registriert: 25.04.2021, 18:30
System: CCU
Hat sich bedankt: 1 Mal

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

Beitrag von Heinz H. » 17.05.2021, 16:38

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!
Gruß aus dem Sauerland
Heinz.

Andersmacher
Beiträge: 14
Registriert: 14.10.2021, 14:54
System: CCU

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

Beitrag von Andersmacher » 21.10.2021, 17:12

$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?

Benutzeravatar
Baxxy
Beiträge: 10647
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

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

Beitrag von Baxxy » 21.10.2021, 17:46

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

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“