Button anklicken, es passiert nichts!

Hallo,

ich teste gerade etwas mit dem Designer rum. Als erstes wollte ich einen Button erstellen, der eine Lampe ein und ausschaltet, wenn er angeklickt wird.

Ich habe also einen Button angelegt.
Unter Events (OnClickToggle) habe ich die entsprechende Statusvariable der Steckdose eingetragen.
Und bei Properties/Caption habe ich die selbe Statusvariable eingetragen. Dazu für FALSE den Text „Licht aus“ und bei TRUE „Licht an“.

Danach alles abgespeichert, upgedatet, F12 gedrückt.

Wenn ich jetzt den Button anklicke, dann wechselt der Text. Die FHZ schickt aber keinen Schaltbefehl raus.

Unter Variables kann ich sehen, dass die Statusvariable korrekt von False auf TRUE wechselt und auch wieder zurück.

Wie ich gerade festgestellt habe, schaltet die FHZ auch nicht, wenn ich die Variable von Hand ändere. Erst wenn ich das zugehörige Event-Script starte wird geschaltet.

An welcher Stelle muss ich noch was ändern, damits klappt?

Ich wünsche einen schönen Sonntag.

Christoph.

Hallo Christoph,
auch ohne Ahnung von FS20 will ich es mal wagen zu antworten.

Ich würde mit dem Button nicht die Variable ändern, sondern das Schalt-Script starten …
Die Anzeige der Variablen ist schon ok.

Hallo Uwe,

da bin ich mir sicher: kein FS20-User hätte dies besser erklären können :wink:

MST

Hallo Uwe & Steiner,

ok, ich habe jetzt nochmals gesucht. Danke, jetzt weiß ich, dass ich noch das Skript unter OnClick angeben muss.

Bisher dachte ich immer, dass alleine die Statusvariable zu einem Schaltbefehl führt. Das war wohl verkehrt.

Gibt es denn eine einfachere Möglichkeit, das Skript anzugeben? Ich finde es etwas umständlich, ein Skript zu erzeugen, das eine Zeile lang ist und dann mit dem Button zu verknüpfen.

Ich würde also z. B.
FS20_SwitchMode(58224,!GetValueBoolean(„WZ_Schrank_Licht.Status“));
einfach direkt angeben, wenn das geht. Bisher konnte ich nichts finden.

Ich wünsche einen schönen Sonntag.

Christoph

Ich würde also z. B.
FS20_SwitchMode(58224,!GetValueBoolean(„WZ_Schrank _Licht.Status“));
einfach direkt angeben, wenn das geht. Bisher konnte ich nichts finden.

Theoretisch wuerde das gehen, ich finde es aber nicht schneller.
Und für Einsteiger glaube ich ist das jetzige Verfahren einfacher
zu erlernen da man prinzipiell gar keine Programmierkentnisse braucht.

VG
Stephan

Hallo Christoph,

die Variable zeigt nur den Zustand der Steckdose nach dem Schaltvorgang durch ein Script von IP Symcon an, da diese ja nicht selber Ihren Zustand, aus oder an, zurückgeben kann. Eine Steckdose empfängt ja nur einen Befehl.

Wenn du mehrere Schalter etc. im Designer hast mache das doch über ein Script mit dem switch Befehl, sieht dann so aus:


switch ($IPS_COMPONENT)
 {
case 'Lampe_WZ_an':
FS20_SwitchMode($Lampe_WZ, True); 
break;
case 'Lampe_WZ_aus':
FS20_SwitchMode($Lampe_WZ, false);
break;
case 'Lampe_SZ_an':
FS20_SwitchMode($Lampe_SZ, True); 
break;
case 'Lampe_SZ_aus':
FS20_SwitchMode($Lampe_SZ, false);
break;
}
 //sonst nix machen


$IPS_COMPONENT ist der Wert IPSYMID, im Object Fenster Designer übergeben…

Gruß Thomas

Hallo Thomas,

so ganz verstehe ich das noch nicht.

$IPS_COMPONENT ist der Wert IPSYMID, im Object Fenster Designer übergeben…

Hier kann ich doch nur einen Wert eingeben. Das bedeutet, der Button liefert bei jedem Klick den gleichen Wert. Ich habe es extra mal ausprobiert und WZ_Licht eingetragen. Es wird dann auch nur WZ_Licht übergeben, aber nicht WZ_Licht_An und WZ_Licht_Aus.

Oder benutzt Du fürs Schalten zwei unterschiedliche Buttons?

Ich wünsche einen schönen Sonntag.

Christoph.

Es wird dann auch nur WZ_Licht übergeben

Das ist schon richtig.

Thomas meint sicherlich, dass für jede Funktion ein Button angelegt wird (bei Licht an/aus sind das schon zwei :rolleyes: ). Für die entsprechende Funktion muss dann bei IPSYMID der Wert eingetragen werden, welcher in der Case-Anweisung ausgewertet werden soll.

Und gleich vorweg: natürlich gehts bei an/aus auch mit einem Gnöbbsche, dann aber geringfügig aufwändiger…

Gruß
Fabian

Ja, ich benutze ein An und einen Aus Image der das Script startet.
Und die Variablenänderung lasse ich mit einem dritten Image anzeigen, siehe Bild im Anhang.

Na dann viel Spaß noch…:wink:

Hallo,

ich habe jetzt mal den folgenden Code ausprobiert, damit die Anzahl der Scripts nicht ewig ansteigt:

switch ($IPS_COMPONENT)
{
case 'WZ_Schrank_Licht':
 FS20_SwitchMode(58224,!GetValueBoolean("WZ_Schrank_Licht.Status"));
break;

case 'K_Kaffeemaschine':
 FS20_SwitchMode(42491,GetValueBoolean("K_Kaffeemaschine.Status"));
break;

}

Ich kann keinen Fehler finden. Mein Problem ist folgendes. WZ_Schrank_Licht funktioniert problemlos. K_Kaffeemaschine schaltet aber immer doppelt.

Wenn ich den Modus mit NOT schalte, dann wird immer erst das Gerät ein und danach sofort wieder ausgeschaltet. Der Status bleibt immer auf FALSE stehen. Ich habe einfach mal das ! rausgenommen, dann klappts, aber eben immer so, dass der Switchbefehl zweimal gesendet wird.

Ich habe auch schon einen neuen Button angelegt, auch hier ist es das Gleiche.

So, jetzt habe ich mal die Steckdose gelöscht, neu angelegt, diesmal mit einem anderen Hauscode und es ist wieder das selbe Problem. Ich verstehe nicht, warum bei der Kaffeemaschine immer zwei Schaltvorgänge rausgehen.

Das Script habe ich auch schon geändert und nur den Switchbefehl für die Maschine dort hineingepackt. Also am Script scheint es wohl nicht zu liegen.

Mit zwei Befehlen meine ich übrigens folgendes:
Das Fenster in dem ich den Wert der Statusvariable verfolgen kann zeigt bei jedem Schaltversuch zwei neue Einträge mit dem selben Zeitstempel an.
Das Debugfenster meldet für dieses Gerät nur einen Schaltbefehl. Ich denke, der zweite Befehl wird nicht gesendet, da das Gerät sich ja schon in dem gewünschten Zustand befindet.

Ich wünsche einen schönen Tag.

Christoph.

Also Du gehst die Sache von der falschen Seit an.
Die Variable die Du zum schalten der FS20 benutzt sind das Ergebnis eines Schaltvorgangs und nicht der Auslöser.
Ich meine das so:
FS20 wird geschalten und die Status Variable ändert sich, diese Variable wird dann zur Visualisierung im Designer benutzt.

Ich würde jeweils einen Einschalt- und einen Ausschaltbefehl benutzen und diesen direkt uber true und false schalten und nicht über die Variable.
Das ist dann auch immer besser nachzuvollziehen.

Thomas

Hallo Thomas,

das ist natürlich auch eine Möglichkeit, zwei unterschiedliche Befehle aufzurufen für das Ein- und Ausschalten.

Ich habe mir aber nun mal in den Kopf gesetzt nur einen Button zu benutzen, der dann auch gleich noch anzeigt, ob das Gerät ein- oder ausgeschaltet ist. Jetzt funktioniert es auch. Ich hatte einen ganz dummen Fehler gemacht. Beim ersten Button hatte ich eine falsche Variable gesetzt. Das Script war dann korrekt. Wenn ich dann geschaltet hatte wurde die Variable durch den FS20-Befehl gesetzt. Der ToggleVariable-Befehl griff dann auf eine Schaltervariable zu.

Beim zweiten Button hatte ich dann die korrekte Variable für die Steckdose angegeben. Daher wurde die Variable erst durch ToggleVariable gesetzt und dann per FS20-Befehl wieder umgedreht.

Jetzt habe ich Toggle-Variable überall gelöscht, damit läufts jetzt.

Wie die Scripte später mal aussehen werden weiss ich noch nicht. Ich teste im Moment einfach mal alle Funktionen aus. Ich denke, so lerne ich das Programm am schnellsten kennen.

Danke für die Hilfe.

Christoph.

Na fein.
Mit einem Button gehts natürlich auch:


if (Schaltervariable == true) // also Schalter an
{
 switch Befehl für Schalter aus
}
else
{
switch Befehl für Schalter an
}

Und der Variablen dann einfach zwei Bilder im Designer zuordnen.:wink: