Variable Wert vor der Aktualisierung abfragen

Hallo Allerseits

Ich habe eine Auswahl für die Steuerung meines Verstärkers hier. Siehe Bild

Nun möchte ich, dass wenn ich auf Vol+ drücke, dass er ein Skirpt ausführt, dann aber wieder zurück auf den Eigentlichen Eingang springt.

Folgender Ablauf sollte das sein:

  • Radio ist ausgewählt (Variable Eingang = Radio)
  • Vol + wird gedrückt (Variable Eingang = Vol+)
  • Lautstärke wird erhöht
  • Radio ist wieder ausgewählt (Variable Eingang = Radio)

dazu müsste ich mir vor der Lautstärkeänderung die Variable speichern. Wie das am besten geht weis ich nicht. Hab da mal was in der Doku gelesen, dass das angeblich gehen sollte, den Wert VOR der Aktualisierung auszulesen. Nur finde ich das in den 400 Seiten nicht mehr.

Meinen code hab ich hier auch mal.
Danke schonmal für eine Idee :slight_smile:


<?

 //Fügen Sie hier ihren Skriptquellcode ein
$szene = GetValueFormatted(20787 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\ZZ Eingang Auswahlschalter\Eingang]*/);


if ($szene == "ON"){
  	SetValueBoolean (25949 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\Harman Kardon]*/, true);
}

SetValueBoolean (25949 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\Harman Kardon]*/, true);
if ($szene == "TV Sat"){
	$id = 26085 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 1 (Cable Sat)        --> TV Receiver]*/;
}
if ($szene == "Wii"){
	$id = 37210 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 2 (DVD)                 --> Wii]*/; 
}
if ($szene == "Server"){
	$id = 13253 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 3 (MediaServer)    --> Server Stereo]*/; 
}
if ($szene == "Radio"){
	$id = 54393 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 4 (Radio)               --> Radio]*/;
}
if ($szene == "Dune 5.1"){
	$id = 56625 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 5 (TV)                    --> Dune Player Sourround]*/;
}
if ($szene == "Dune 2.0"){
	$id = 41987 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 6 (Game)               --> Dune Player Stereo]*/;
}
if ($szene == "AUX"){
	$id = 24219 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\AVR255 Mode 7 (AUX)                 --> ]*/; 
}
if ($szene == "OFF"){
	SetValueBoolean (25949 /*[Aktoren\Wohnzimmer\Aktor / Gerät\Gerät Harman Kardon\Aktoren\Harman Kardon]*/, false);
}


FS20_SwitchMode ($id, true);
IPS_Sleep (1000);
FS20_SwitchMode ($id, false);


Unbenannt.jpg

Hallo,

eine spontane Idee wäre die Systemvariable $IPS_OLDVALUE, die den Wert der Variable vor dem Auslösezeitpunkt hat.

Oder eine Datenbank wie MySQL, in der Du die Werte immer bei Änderung zusätzlich speicherst und bei Änderung den Wert des aktuellen Eintrag in der DB (weil ja bei Änderung geschrieben) - 1 ausliest, also den davor gültigen. Ausserdem hättest Du noch eine Art Log, das Du ja nachst wieder löschen könntest.

jaaa genau $IPS_OLDVALUE das sollte es gewesen sein. werd ich dann später gleich mal ausprobieren.

Danke schonmal

hab mich jetzt mal weng umgeschaut, aber wie man die Variable verwenden kann hab ich leider noch nicht rausgefunden.

ein Skript, dass bei Ausführung sich den Wert von vorher nimmt und dann den Wert von jezt wie er verändert ist. Alternativ habe ich ein anderes Vorhaben.

Die Lautstärke beim Verstärker ist beim Einschalten immer auf 20. Jetzt würde ich gerne über einen Regler die Lautstärke einstellen. Folgedessen:

  • Wert ist beim einschalten 20 (Variable steht auch auf 20)
  • Variable wird verändert (z.B. auf 30)
  • Skript schaut alter Variablenwert war bei 20, neuer Variablenwert ist bei 30. 30-20=10
  • Skript sendet 10 mal den Befehl zum Lautstärke erhöhen

$zähler = $IPS_VALUE - $IPS_OLDVALUE;

Jetzt eine for-Schleife über $zähler und Du hast, was Du willst.
Probier mal aus. :slight_smile:

tut mir leid ich steh grad weng auf dem schlauch.
hast du ein konkretes beispiel?

Danke

Hi,

das mit der For-Schleife und dem Zähler könnte so aussehen:

// Wert, um wieviel die Lautstärke erhöht werden muss
$zaehler = $IPS_VALUE - $IPS_OLDVALUE;

for($i=0;$i<$zaehler;$i++)
{
	// Hier muss die "Lautstärke-Erhöhen-Funktion rein
	$lautstaerke+=1;
	
	//Evtl. hier noch n kurzer Sleep....
}

Gruß
Marc

soweit schon logisch. was ich mich frage ist das:

wie kann ich die variable abfragen? also irgendwo müsste ich doch dann z.B.

$wert = Getvalueinteger (11159 ) oder sowas schreiben. sonst weis er ja gar nicht welche daten er nehmen soll.

$IPS_VALUE,$IPS_OLDVALUE;
sind beides Systemvariablen, welche zum Zeitpunkt eines Trigger einen Wert erhalten.
$IPS_VALUE den aktuellen
$IPS_OLDVALUE den letzten Wert.

Du brauchst hier also kein GetValue.

Ah wunderbar. Klappt perfekt. Danke Jungs!