ich komme mit der IPS-Programmierung nicht zurecht…
Ich will z.B. folgendes erreichen:
ich bekomme von einem Homematic Device einen Feuchtigkeitswert als INT. Für KNX brauche ich aber einen Wert mit DPT9 (float). Ich habe das was programmiert, das funktioniert auch, aber das muß doch auch irgendwie generischer gehen … Mit den Systemvariablen kann ich trotz Doku leider noch nichts anfangen.
wobei 36547 die Variable von Homematic ist, 40182 eine Hilfsvariable (nachdem die Variable, die mit der DPT-Instanz erzeugt wird ‚readonly‘ ist, warum ?), 14972 die Instanz die den Wert in KNX übergibt.
Die sind in der Doku sehr gut erklärt. Wenn Du daran etwas nicht verstehst, dann stell Mal eine konkrete Frage, was Du daran genau nicht verstehst. Oder zeig Deine nicht funktionierenden Skripte, wo Du mit Systemvariablen arbeiten möchtest. Dann kann man Dir gezielter helfen.
Hallo Dr.Niels,
zusammenklicken ist nicht meine Intension. Ich programmiere schon seit einigen Jahren in einer anderen Sprache und habe hier nur Anlaufschwierigkeiten. Speziell was die Ausgabe von Variableninhalten anbelangt. Wie sehe ich z.B. was in der Variable $_IPS[‚TARGET‘] oder in $_IPS[‚VARIABLE‘] steht. Von der Schreibweise in der anderen Programmiersprache her kenne ich, das in eckigen Klammern der Wert optional ist. Das ist aber hier offensichtlich nicht so … So nur z.B.
ich versuche das Script generisch zu schreiben. Mit den Systemvariablen gelingt mir das nur teilweise. Insbesondere ist mir nicht klar, warum $_IPS[‚TARGET‘] die Id des Scripts zurückgibt. Das übergeordnete Objekt (Doku) ist doch hier die Instance (14972)?
Weil - gemäß Dokumentation - in $_IPS[‚TARGET‘] die ID des übergeordneten Objektes enthalten ist. Das übergeordnete Objekt des Ereignisses 27448 ist die 36431. Funktioniert also genau so, wie in der Doku beschrieben.
Ausgehend von wo?
Grundsätzlich verstehe ich nicht, warum das Skript unter der Variable „Value“ hängt. Ist es denn auch das Aktionskript von der Variable „Value“? Oder soll hier einfach nur eine Luftfeuchte von HomeMatic auf den KNX Bus gesendet werden und das Skript ist gar kein Aktionskript im eigentlichen Sinne? https://www.symcon.de/service/dokumentation/konzepte/variablen/variablenaktionen/
Nein, ausgehend vom Ereignis kommt die ID des Skriptes.
Eigentlich sollte nur der Wert von Homematic an KNX übergeben werden. Da ich aber mehrfach diese Situation habe, wollte ich ein Script schreiben was ich überall verwenden kann ohne absolute ID’s einzutragen. Aktionsskript im eigentlichen Sinne? Es soll eben aufgrund eines Ereignissen (Änderung des Wertes von Luftfeuchtigkeit) ausgeführt werden. Wo das Script hängt, war mir jetzt nicht besonders bewußt. Mir gings auch darum mit den Systemvariablen arbeiten zu können und diese zu verstehen.
Wobei mir jetzt immer noch nicht klar ist, wie ich die ID 14972 in den Systemvariablen finde.
Wenn deine Baumstruktur immer so ist, dann
$Parent = IPS_GetParent($_IPS[‚SELF‘]); // führt zu der ParentID
$NextParent = IPS_GetParent($Parent); // führt zu der nächsthöheren ID
Nirgends - zumindest bei dem oben gezeigten Screenshot nicht.
$_IPS[‚SELF‘] ist das Skript selber. $_IPS[‚VARIABLE‘] ist die Variable, die das Skript auslöst … und so weiter. Da musst Du mit IPS_GetParent arbeiten.
Ich kann Dir sagen, wie ich solche wiederkehrenden Dinge löse. Ich baue mit ein Skript, welches mir ein Skript erstellt.
Das zu erstellende Skript sieht am Ende beispielsweise so aus:
Völlig unspektakulär. Wir brauchen nur zwei IDs. Diese werden in das Skript eingetragen. Bei der Ausführung wird also ein Skript mit den passenden IDs erstellt. Gleichzeitig wird das auslösende Ereignis mit erstellt. Diese Variante ist nach dem Motto „Fire and Forget“ und niemals etwas ändern. Möchte ich dem Code etwas hinzufügen, könnte man den Teil mit KNX_WriteDPT9 noch mittels require in einem separaten Skript ausgliedern, sodass der eigentliche Code in einem eigenständigen Skript steckt.
Man könnte auch ein Skript für alle Werte machen und dies zyklisch ausführen.
Bin hier ja erst am Anfang. Habe bisher nur in xBase++ programmiert. Das hier ist was anderes …
Scheint aber sehr interessant zu sein. Werde dranbleiben, es gibt einige Sachen die ich mit IPS realisieren will.
wie gesagt - Danke für die Hilfe!