Button für "Nur EIN" mit korrektem Status

Hi, ich würde gerne folgendes in der Kachelvisu umsetzen, aber ich glaube ich verwende einfach den falschen Ansatz dafür:

Zum Scharfschalten der Alarmanlage hätte ich gerne einen Button, mit dem man nur Scharf und nicht Unscharf schalten kann. Dies habe ich auch mit Hilfe einer Dummy-Variable und dem folgenden Aktionsskript hinbekommen:

RequestAction(34293, true);

Nun wird mir aber durch den Leuchtring nicht der aktuelle Status der echten Scharf/Unscharf Variable angezeigt. Könnt ihr mit sagen, wie man sowas am besten lösen kann?

P.S. Bei dem Befehl um über KNX „Alle Lichter AUS“ zu schalten habe ich die gleiche Aufgabenstellung. Hier hätte ich gerne als Status die ODER-Verknüpfung von allen Lichtern um direkt zu sehen, ob noch etwas an ist. Wenn ich dann den Button betätige, soll aber immer das AUS-Telegramm gesendet werden.

Warum nutzt Du nicht den „Sichtbar“ status? Damit blende ich zum Beispiel Update-Buttons ein, wenn ein Update für eine FW vorhanden ist.

image

Also die Sichtbarkeit per Skript aktivieren und deaktivieren.

LG
Burkhard

Zeigt 34293 den aktuellen Status der Alarmanlage an?
Lösung (okay, hier wird immer nur aus gesendet, aber das ist ja schnell auf nur ein anzupassen):

Erklärung: Frage zum Zentral Aus KNX und Visu - #2 von volkerm

Michael

Guten Morgen @Nall-chan, lass uns erst mal beim Thema Alarmanlage bleiben. Ich habe nämlich das Gefühl, dass die Ansätze in den beiden Fällen etwas unterschiedlich sind.

Ja, über diese Variable wird die Alarmanlage eingeschaltet und das ist auch der Status. Wenn ich hier nun das Aktionsskript mit dem Inhalt ausführe,

RequestAction(34293, true);

dann bekomme ich aber immer eine endlose PHP Schleife, wenn ich z.B. über das Pin-Pad die Alarmanlage ausschalten möchte. Was für mich auch verständlich ist, da eine Veränderung der Variable ja immer wieder ein „true“ sendet. Ich bräuchte daher ein Skript, das den aktuellen Zustand abfragt und nur dann eine „true“ sendet, wenn der Zustand „false“ ist. Da sollte ich mir dem Beispiel oben hinbekommen. Aber gibt es noch einen anderen Befehl außer den RequestAction und die Variable zu verändern? Also ein

Write($variableID, true);

Wie fange ich eigentlich in IPS solche Endlosschleifen ab wenn ich das im PHP-Skript nicht ordentlich gemacht habe? Ich muss dann immer den Dienst hart über den Task-Manager beenden und wieder neu starten.

Das mit der Sichtbarkeit, wie von @Burki24 vorgeschlagen, ist glaube ich nicht das Richtige, weil ich will ja nicht, dass die Kachel ganz verschwindet, sondern nur, dass man darüber nicht mehr Aus-Schalten kann. Hier man ein Screenshot, dann ist es evtl. verständlicher

Nein, sind sie nicht.

Korrekt, darum steht da auch KNX_WriteDPT1 im Aktionsskript.
Da leider dein Screenshot nicht zeigt was es für eine KNX Instanz ist, musst du den Befehl eventuell anpassen.

Ja, einfach den Value beim Befehl auf true lassen.
Michael

Die Alarmanlage ist rein in IPS und hat erst mal nix mit KNX zu tun. KNX war nur für den Alles Aus Befehl. Da habe ich 2 Dinge zusammen in meine Frage geworfen, was zu dem Missverständnis geführt hat.

Daher benötige ich in dem Fall einen Befehl um eine IPS Variable auf True zu setzen.

Danke André

Variablen, also keine Statusvariablen, setzt man mit SetValue.
Michael

Danke! Das probiere ich heute Abend mal aus und poste hier mal das Ergebnis.

Und dann suche ich mir hier mal weitere Infos und Beispiele zu PHP Skripten zusammen.

Habt einen sonnigen Tag☀️
André

Ich wollte hier ja noch kurz berichten.

Also es hat soweit alles gut geklappt und ich hab neben Scharf-/Unscharf schalten auch noch eine Abfrage, ob der PIN gültig ist eingebaut :slight_smile:

An einer Stelle hat es mit SetValue($value_Aktiv, false); nicht funktioniert. Hier hat sich zwar der Status im Objektbaum von IPS geändert, aber das was hinten dran steckt wurde nicht ausgeführt. Dafür war ein RequestAction($variable_Aktiv, false); notwendig. Habe ich jetzt in der Doku auch so nachlesen können.

So ein Aktionsskript wird ja normal durch eine Variable, oder einen Button in der Visu ausgeführt und ich frage dann in dem Skript den Zustand von anderen Variablen ab.

Wie mache ich es nun, wenn ich in so einem Aktionsskript auch auf die Änderung einer anderen Variablen reagieren möchte? Also das Skript auch durch eine andere Variable aufgerufen werden soll?

Z.B. in meinem Fall, dass jemand einen neuen PIN eingegeben hat, sprich sich die Variable PIN geändert hat? Ich habe gerade versucht unter PIN ein weiteres Aktionsskript zu erstellen, welches mit IPS_RunScript(41798); dann nur mein Scharf/Unscharf Skript aufruft. Aber das funktioniert nicht, weil das Skript bei einer Änderung von PIN(String) nicht aufgerufen wird. Warum? Kann evtl. eine String-Variablen keine Aktionsskripte auslösen?

Lieber wäre mir auch sowas wie ein OnChange(PIN) in meinem ersten Skript. Damit ich alles an einer Stelle habe. Kann ich dafür evtl. IPS_SetEventTrigger($eid, 0, 12345); verwenden? Falls ja, ist mir aber noch nicht klar wie :man_shrugging:

Edit: ich führe das Skript nun durch ein Ereignis „Bei Aktualisierung von PIN)“ aus. Problem ist aber, dass ich in dem Skript selbst auch die Variable PIN ändere und dadurch das Skript direkt wieder aufgeführt wird! Da beißt sich die Katze in den Schwanz :black_cat:

Dann bleibe ich wohl dabei, dass die Änderung der PIN in einem separaten Ablaufplan gemacht wird.