Fehler in $_IPS['Value'] Script

Mal wieder stehe ich auf dem schlauch:

$zeit = ($_IPS['VALUE']);
if( $zeit <= 9)
{
$zeit = 100;
}
if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    ZW_SwitchMode(37906 /*[Original\Grow\Growbox 1]*/, false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    
} else {
    //An Befehl
    ZW_SwitchMode(37906 /*[Original\Grow\Growbox 1]*/, true);
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], $zeit);
	 SetValueInteger(38940 /*[Original\Grow\An für 130 sek\Timer]*/ , $zeit);
}

bekomme ich als notice in den Meldungen:
Undefined index: VALUE in: … on Line 3

Jemand einen Tipp (:

Moin!

Wie rufst du das Skript denn auf? Als Aktion-Skript in einer Variable und über WebFront geschaltet? Oder einfach durch manuelles aufrufen des Skriptes…

Wenn über WebFront geschaltet wird, dann muss der Teil rein:

if ($_IPS['SENDER'] == "WebFront") {
     SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
}

…und dann muss das als Aktion-Skript zur Variable dazu… Einfach das Skript starten endet in dem Fehler, weil so wie dein Skript jetzt ist, ist wohl einfach $zeit ohne Wert und deshalb der Fehler.

Wenn du was anderes machst, dann bitte genauer beschreiben :slight_smile:

Grüße,
Chris

2’erlei würde ich gerne machen, was auch zum Teil funktioniert hat nur die Notice das es da das Problem gibt.
Aber zu dam was ich machen will.

Ich habe eine Integer Variable Angelegt und dieser ein Profil zugewiesen, sowie eine Eigene Aktion (Action Script oder?) dieses hier.

Zusätzlich habe ich verschieden Ereignisse welches dieses Script aufruft.

Das anklicken von den verschieden boxen (10 sek., 30 sek, ect. ) im webfront funktioniert und es lößt das auch alles richtig aus. aber wenn die Stündliche Wässerung kommen soll per Ereignis macht er nix. bzw:
Error: Notice: Undefined index: VALUE
Error in Script C:\IP-Symcon\scripts\57522.ips.php on Line 3</div>
und führt es auch nicht aus.

würdest du mir kurz erklären was dein Script im genauen macht?

Vielen Herzlichen Dank im voraus.

Ist hier erklärt.
Das wichtigste Handwerkszeug :wink:
Systemvariablen — IP-Symcon :: Automatisierungssoftware
Michael

Ok, also Buttons im WebFront anklicken funktioniert bei dir mit dem Aktion-Skript, weil dann „$zeit = ($_IPS[‚VALUE‘]);“ durch diesen Teil das im WebFront angeklickte in der Variable $zeit landet.

Wenn du aber auch über Änderung der Variable das Skript aufrufen und damit dann was auslösen willst, dann muss das Skript angepasst werden:

if ($_IPS['SENDER'] == "WebFront") {
     SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
}  

$ZeitVariable = 12345;  // hier die ID deiner Integer-Variable eintragen 
$zeit = GetValue($ZeitVariable);

if( $zeit <= 9) 
{ 
$zeit = 100; 
} 
if($_IPS['SENDER'] == "TimerEvent") 
{ 
    //Aus Befehl 
    ZW_SwitchMode(37906 /*[Original\Grow\Growbox 1]*/, false); 
    //Timer ausschalten 
    IPS_SetScriptTimer($_IPS['SELF'], 0); 
     
} else { 
    //An Befehl 
    ZW_SwitchMode(37906 /*[Original\Grow\Growbox 1]*/, true); 
    //Timer anschalten 
    IPS_SetScriptTimer($_IPS['SELF'], $zeit); 
     SetValueInteger(38940 /*[Original\Grow\An für 130 sek\Timer]*/ , $zeit); 
}  

…zusätzlich muss dem Skript ein Ereignis (ausgelöstes Ereignis - Variablenänderung - IntegerVariable auswählen - OK) hinzugefügt werden.

Dann kannst du über WebFront schalten und kannst das Skript auch durch einfaches ändern der Zeit-Integer-Variable aufrufen lassen…

Grüße,
Chris

Vielen Dank für deine Erklärung.
Ich habe zwar noch nicht ganz verstanden wieso Set und nicht get im
if ($_IPS[‚SENDER‘] == „WebFront“) {
SetValue($_IPS[‚VARIABLE‘],$_IPS[‚VALUE‘]);
}
aber ich hoffe das erschließt sich mir noch.

Vielen Dank.

if ($_IPS['SENDER'] == "WebFront") { 
     SetValue($_IPS['VARIABLE'],$_IPS['VALUE']); 
}   

sorgt dafür, wenn man im WebFront etwas anklickt, dass der Inhalt in die Variable eintragen wird, in der das Skript als Aktion-Skript eingetragen ist.

$zeit = GetValue($ZeitVariable);

>> diese Zeile brauchst du, wenn das Skript durch die Variablenänderung aufgerufen wurde. Weil da funktioniert der 1. Teil nicht, deshalb muss man da extra nochmal den Wert aus der Variable auslesen, damit das Skript damit arbeiten kann… Eigentlich logisch :wink: :stuck_out_tongue:

Grüße,
Chris

Ja wohl, sehr logisch gewusst wie aber was ist dem mit dem fall eines Timer Aufrufs also durchs web geschalteter timer.

if ($_IPS[‚SENDER‘] == „TimerEvent“) {
SetValue($_IPS[‚VARIABLE‘],$_IPS[‚VALUE‘]);
}

gibt Fehler aus.
Kann ich das irgendwie mit der Webfront abfrage kombinieren oder habe ich einen Gedanken-Knoten und es geht nicht anders?
Nur wenn ich die Timer unter der Integer Variable habe funktioniert es.

Ich kann mich für die Hilfe nur recht Herzlich Bedanken (:

Das kann ja nicht funktionieren:

if ($_IPS['SENDER'] == "TimerEvent") { 
SetValue($_IPS['VARIABLE'],$_IPS['VALUE']); 
} 

> weil FALSCH und unnötig…der Wert holste ja über den Teil „$zeit = GetValue($ZeitVariable);“

wieso nimmst du nicht einfach mein Skript, da sollte doch alles laufen?! oder was passt an meinem skript nicht?

Nicht böse sein, wollts ja nur verstehen (:

Doch doch, tue ich, alles bestens.

Funzt.
Danke!

Keiner is böse, alles gut :slight_smile: Dann lies das Skript von mir und verstehe es :slight_smile: Weil man sollte sich schon etwas mit PHP und seinen Skripten befassen…man wird sicher nicht immer alles vorgekaut bekommen und außerdem möchte man ja selbst vlt. mal was größeres skripten :slight_smile:

> Wenn einzelne Zeilen unklar sind > IPS-Doku, IPS-Befehlsreferenz, PHP Manual :wink:

Grüße,
Chris

Falls wer lust und zeit hat mir kurz zu helfen:



for ($i = 100; $i > 1; $i--)
  {
	  ZW_DimSet(54212 /*[Original\Aquarium LED\B]*/, $i);
	  $i = $i - 1;
	  IPS_Sleep(100);
	if ($i == 50)
	{
	IPS_RunScript(22015 /*[Original\Aquarium LED\0. Teil Sonnenuntergang\1. Teil\2. Teil]*/ );
	}
	
  }


Er ruft einfach nicht das Script bei der if anweisung auf :frowning: was mache ich falsch?
Im Vorraus vielen Dank

Bau mal vor der if Anweisung ein ‚Echo "$i
";‘ ein. Dann sollte man sehen, was los ist…

Gesendet von meinem iPad mit Tapatalk

durch das $i = $i - 1; reduzierst du den Index pro Durchlauf um 2, schmeiß das mal raus.
Und um ganz sicher zu gehen tausch mal if ($i == 50) gegen if ($i <= 50)

Abend cooljack!

Kleine Inspiration für dich > Aquarium/Terrarium - Sonnenaufang und Sonnenuntergang simulieren
…ist zwar nicht direkt was du machst, aber vlt. machts dann klick. Würde gerne mehr schreiben, geht aber gesundheitlich grad nicht…

Grüße,
Chris