Frage (Problem): Schalter als Toggle Schalter benutzen

Ich hatte mir das eigentlich ganz einfach vorgestellt, aber irgendwas mach ich noch falsch … wahrscheinlich wieder irgendein Häkchen oder so.

Ich habe gemacht:

  • Button erstellt und beschriftet

  • Doppelklick auf „OnClickToggle“

  • Eine FS20 Komponente (Steckdose) aus dem Objektbaum gewählt

  • Dort Statusvariable ausgewählt
    (Siehe Bild 1)

  • Speichern und hochladen

  • Tab Designer „hide“

  • Formular geöffnet.

Schalter drücken, und nix tut. Im Meldungsfenster sehe ich eine Statusänderung (siehe Bild 2).

Dierkt über den Objektbaum auf der Instanz kann ich mittels der Schalter „Ein“ und „Aus“ die Steckdose schalten.

Was mache ich falsch?

Danke
jwka

DesignerButtonSTDS02.jpg

Nun. Das könnte daran liegen, dass eine „Status Variable“ nur den Status anzeigt, aber nicht ändert. :slight_smile:

Du musst leider ein Skript schreiben, welches die Toggle-aufgabe erledigt und es dann mit OnClick damit verknüpfen.

Könnte so aussehen:


FS20_SwitchMode($id, !GetValue($statusvarid));

Für den Advanced IP-Symcon User vielleicht so:


FS20_SwitchMode($IPS_COMPONENT, !GetValue(IPS_GetStatusVariableID($IPS_COMPONENT, "StatusVariable")));

paresy

ähm. Danke.

Das habe ich schon gemacht und das tut auch. Ich dachte halt, dass einfache „Grundfunktionen“ sozusagen „eingebaut“ seien.

Gibt es eine Möglichkeit, mit dem Button einen Parameter an ein PHP zu übergeben, sodass man nicht für jede Kleinigkeit ein eigenes Script benötigt?

Oder gilt die Regel 1 GUI-Objekt = 1 PHP, um „ordentlich“ starten zu können?

Dafür war die „Advanced“ Zeile. Ich hatte gehofft, dass du das Forum/V1 Designer Doku zum IPS_COMPONENT (IPSYMID) befragst.

paresy

Tja … ich hatte mit Hr. Steiner telefoniert und er meinet u.a., dass V2 so verschieden zu V1 sei, dass ich mich damit nicht beschäftigen soll. Ich hatte gefragt, ob ich die V1 Doku studieren soll, weil ja für V2 die Doku noch recht unvollständig ist.

Aber ich befolge gerne Ratschläge. Werde also auch mal die V1 Doku ansehen.

Eines verstehe ich aber wirklich nicht so ganz:

Wenn die Status Variable nur dazu da ist, den Status anzuzeigen, warum kann ich denn dann diese Variable überhaupt als Verbindung zum „OnClick Toggle“ wählen? Irgendeine Funktion muss dahinter doch sein?

Du kannst jede beliebige Variable dafür auswählen.

Du könntest eine SollStatus Variabe erstellen, die wiederum ein Skript startet, welches den Status dann setzt. Das ist zwar komplizierter, wurde aber öfters gewünscht und deswegen implementiert.

paresy

Hallo,

das hatte mich am Anfang auch verwirrt. Man fragt sich zunächst: Warum ist es nicht einfach so dass wenn ich den Status der Variablen „zuweise“, das Gerät „mitdenkt“ und den Befehl automatisch generiert?

Das würde aber gerade bei so unzuverlässigen Systemen wie FS20, die ohne Rückmeldung funktionieren* (*meistens) zu argen Problemen führen.

Ich persönlich habe mir für jede Lampe (und jedes andere Gerät mit Steuerungsfunktionen) eine Variable angelegt die in einer eigenen „Interface“-Kategorie liegt. Die Variablen werden von Skripten überwacht, die Änderungen in Steuerbefehle umwandeln. Die Steuerung erfolgt komplett über diese Variablen, also sind auch sämtliche Wandschalter und Fernbedienungen zunächst mit einer individuellen Adresse versehen und IPS macht eben die komplette Steuerung.

Der Ansatz ist aufwändig einzurichten, sicher nicht so von den IPS-Machern gedacht gewesen und zudem sehr zentral und serverabhängig. Die Notfalllösung macht bei mir eine Makrosteuerung MST von ELV, die leicht in Betrieb genommen werden kann und Grundfunktionen bei Systemausfall übernimmt. Also zumindest eine gewisse Redundanz.

Warum dieser seltsame Weg?

Einmal eingerichtet ist diese Lösung von der Programmierung her sehr übersichtlich und wartungsfreundlich. Eine Lichtszene besteht dann nur noch aus Zuweisungen z.B.:

SetValueInteger(„Wohnzimmer Stehlampe“, 100);
SetValueInteger(„Wohnzimmer Deckenlampe“, 20);
SetValueInteger(„Wohnzimmer Ecktischlampe“, 50);

Die Umsetzung der Variablenwerte in Steuerbefehle erfolgt in einem generischen Makro, so dass es leicht ist, Dinge wie die Überblendzeit, Sendungswiederholungen etc. zu verändern, ohne dies an 100 Stellen einzeln tun zu müssen. Sogar eine globale Glühlampenschonung ist realisierbar, denn man kann den Maßstab (ich bevorzuge 0-100% statt der nicht sehr intuitiven Stufen 0-16) beliebig umrechnen. Somit kann 100% auch Stufe 15 bedeuten und man muss dies nur einmal festlegen, oder man macht das über eine Variable so dass man die Funktion bei Bedarf leicht deaktivieren kann… und, und und…

Schade ist, dass das Webinterface dadurch relativ unbrauchbar wird. Man muss sich eben überlegen, wie man gestrickt ist. Die große Stärke von IPS ist, dass dieser Weg, obgleich nicht unbedingt im Sinne des Erfinders, möglich ist.

Im Designer ist auf diese Weise z.B. alles sehr einfach. Man weist etwa einem Slider als Value und OnChange die Interfacevariable einer Lampe zu und fertig ist die Laube. Keine Extramakros notwendig.


Sorry, dass ich den Thread noch einmal ausgrabe, aber ich hab da offensichtlich noch etwas nicht verstanden!

Ich hätte gerne ein Script, welches aus dem Designer heraus aufgerufen werden kann, und alle verfügbaren FS20-Steckdosen togglen kann. Ich dachte auch, dass ich das Prinzip begriffen hätte, aber …

Ich bin wie folgt vorgegangen:

Im Designer habe ich einen Image-Button mit je einem Bild für den Zustand „TRUE“ und „FALSE“ angelegt. Beim Klick darauf wird ein Script ausgeführt und das enthält diesen Code:

<?
$id=$IPS_COMPONENT; // INSTANCE-ID; WIRD VOM DESIGNER ÜBERGEBEN
FS20_SwitchMode($id, !getValue(IPS_GetStatusVariableID($id, "StatusVariable")));
?>

In IPSYMID habe ich im Designer die InstaceID der „Stehlampe“ übergeben und frage mich, wieso das Script einen Fehler auswirft, dass in GetStatusVariableID die falsche Anzahl Parameter übergeben worden wären. Ersetze ich im Script die Variable durch die Instance-ID, dann klappts doch?!

Wo ist mein (Denk-)Fehler?

Gruß Ralf

Bitte Scripte immer in PHP Tags setzen, kann man besser lesen.
Kann es sein das das der $IPS_COMPONENT nicht an das Script übergeben wird?
Triggert auch der Image Button das Script mit OnClick und steht in IPSYMID die ID als Integer Wert (z.B. 11230)?

OK, ich werde die Scripte demnächst in die Tags setzen. Danke für den Hinweis.

Und: Wenn ich statt des Schaltbefehls nur ein „echo $IPS_COMPONENT“ in das Script schreibe und die „Glühbirne“ im Designer anklicke, dann poppt ein Fenster mit der übergebenen Instance-ID auf! Ich denke also, dass die ID übergeben wird.

Aha, es klappt. Ich habe nun den übergebenen Parameter noch einmal explizit zu einem Integer konvertieren lassen:

<? 
$id=(int) $IPS_COMPONENT; // INSTANCE-ID; WIRD VOM DESIGNER ÜBERGEBEN 
FS20_SwitchMode($id, !getValue(IPS_GetStatusVariableID($id, "StatusVariable"))); 
?> 

Danke sehr!

Ja die Tücken von PHP…:slight_smile:
IPSYMID wurd hier als String übergeben.