Zur Zeit versuche ich mal wieder meine Forms für den Designer ein wenig zu verändern. Unter anderem soll eine Möglichkeit eingebaut werden, mit der ich die Soll-Vorgabewerte für die Heizung verändern kann.
Viele Beispiele hier im Forum zeigen ein Feld mit dem Wert und darüber bzw. darunter dann ein Dreieck-Button. Dieser Button verändert dann den Wert.
Nur wie ist das gelöst? Habt ihr für jeden Button dann noch ein eigenes Script angelegt oder gibt es eine andere Möglichkeit? Denn dann müßte ich ja für 8 Stellantriebe 16 zusätzliche Scripte anlegen …
Du brauchst dafür natürlich nur ein Script. Dazu legst Du Dir z.B. 8 Label Felder im Designer an. Die Labelfelder enthalten die Caption der Sollwertvariable. Jedem dieser Labelfelder ordnest Du zwei Pfeilsymbole als Image zu. Jedes Image hat einen IPSYMID Wert z.B. hoch1 und runter1, dann hoch2 und runter2 usw. Das jeweilige Image wird per OnClick Event auf ein Script getriggert. In diesem Script kannst Du per:
switch ($IPS_COMPONENT)
{
case 'hoch1':
//was gemacht werden soll
break;
case 'runter1':
//was gemacht werden soll
break;
//usw.
}
ich möchte diese Frage noch einmal herauskramen und erweitern, weil auch ich im Designer gerade die Heizung visualisieren möchte.
Ist es denn auch möglich, mehr als einen Wert an IPS zu übergeben? Ich denke da zum Beispiel daran, dass ich die ID und den neuen Sollwert übergebe. Dann müsste man nicht 10 mal klicken, wenn man die Heizung um 5°C höher einstellen möchte, sondern könnte den neuen Wunschwert direkt über einen Schieberegler oder ein Texteingabefeld an IPS übergeben.
Oha, da fällt mir gerade noch eine Zusatzfrage ein:
Kann ich denn überhaupt den neuen Wert eines Schiebereglers als IPSYMID an IPS übergeben oder nur Konstanten?
So ganz verstehe ich Dein Problem nicht, der Schiebereglerwert wird vom Designer in einer Variable abgelegt, dieser kann doch von einem Script abgefragt werden…
Ehhm kleine aufmerksamkein bei seite …
Wenn du uber ein schiebe regler deine Soll wert ändertst - dan uberschwimmt der sende-buffer in keine Zeit.
Jeden Wert die den Schieberegler annimmt wird dadurch gesendet
also : 18 -> 21, da wird 19, 20 und 21 gesendet under dauert bis zu 6 minuten bis das ankommt.
Bessere lösung:
eine art ‚set‘ knopf neben den Schieberegler.
Schieben und dann drucken -> das script lauft nur nach drucken vom ‚set‘ knopf.
das stimmt so nicht. Du kannst den Schieber mehrfach hin und her schieben. Erst beim Loslassen des Schiebers wird der erreichte Wert übernommen. Es wird also nur ein einzelner Wert gesendet. Eine Überschwemmung findet nicht statt.
Trotzdem ist es die bessere Lösung so vorzugehen, wie Du es beschrieben hast: mit einem zusätzlichen Button. Damit wird sicher gestellt, dass nicht Werte übertragen werden, die durch versehentliches kurzes Loslassen des Schiebers erzeugt wurden.
IPSYMID ist immer ein String. Du kannst daraus aber ohne Probleme ein array machen. In dem Du, wie schon angesprochen, Trennzeichen verwendest und den String mittels explode in ein array überträgst.