Skript kürzen

Hallo Gemeinde,

ich soooooo stolz…mein erstes „größeres“ script funktioniert !!!

Dummerweise ist es gefühlte 20 Meter lang :frowning:

Jetzt wollte ich mal anfangen, es ein wenig zu kürzen, bzw aufzuräumen

Nur da mache ich anscheinend irgendwas noch falsch…

Dieses GetValueBoolean(ID) wollte ich durch einen zuvor definierten Namen ersetzen…

Wo liegt denn hier mein Fehler ?

(Is nur ein kleiner Auszug vom Script…hab Angst, das sonst Eure Scrollräderchen heißlaufen)

$irtID = 19869; // ID vom IRTransvestitenmodul
$TopfieldPower = GetValueBoolean(32565);

switch($IPS_VALUE) //Saugeile Methode (Made by RWN)
{
    case 0: // Alle Geräte, die zum Fernsehen nötig sind, einschalten
    
    if ($TopfieldPower) == FALSE)
   {
    IRT_SendOnce ($irtID,"topfield","on/off Toggle");
    SetValue(32565 /*[Mein Haus\Multimedia\Geräte\Topfield\Topfield 2\Power Topfield]*/,TRUE);  //Topfield AN
   }

LG und vielen Dank
Sascha

Hallo Sascha,

so mal auf die Schnelle…

Hallo Sascha,

Du hast da einen Fehler mit den Klammern gemacht.
Richtig wäre:

if ($TopfieldPower == FALSE)

oder

if (!$TopfieldPower)

Gruß

Hallo Sascha,
wenn du sozusagen ‚IR Scenarien‘ erstellen willst, kannst du dir auch meine Version dazu mal anschauen. Könnte auch für dich ganz gut funktionieren:

<?
$commands =array( //Fernbedienung, Befehl, Pause
   array("panasonicplasma","power on",1),
   array("panasonicplasma","power on",1),
   array("panasonicplasma","power on",1),
   array("mediacenter","livetv",2),
	array("logisound","power",2),
	array("panasonicplasma","input pc",1),
	array("mediacenter","livetv",2),
	array("logisound","analog",1)
);
if($IPS_SENDER == "RunScript")	{
   SetValue(12909 /*[Erdgeschoss\Wohnzimmer\MediaCenter\Mediacenter einschalten\Step]*/,0);
   IPS_SetScriptTimer($IPS_SELF, $commands[0][2]);
	}
	
if($IPS_SENDER == "TimerEvent"){
	$step=GetValue(12909 /*[Erdgeschoss\Wohnzimmer\MediaCenter\Mediacenter einschalten\Step]*/);
	$count = count($commands);
	if($step<$count){
		IRT_SendOnce(46883 ,$commands[$step][0],$commands[$step][1]);
		IPS_SetScriptTimer($IPS_SELF, $commands[$step][2]);
		$step++;
		SetValue(12909 /*[Erdgeschoss\Wohnzimmer\MediaCenter\Mediacenter einschalten\Step]*/,$step);
		}
	else{
	   IPS_SetScriptTimer($IPS_SELF, 0);
	   }
	}
?>

Die Variable 12909 ($step) aus dem Beispiel wird nicht automatisch angelegt. die müsstest du noch manuell erstellen.
Ansonsten nur die gewünschten Befehle und falls notwendig auch die pausen zwischen den Befehlen eintragen und die IRT ID anpassen. Dann sollte es funktionieren.

Gruß
Smudo

Danke Torro, Attain und Smudo,

@Attain :

das Ausrufezeichen in deiner 2. möglichkeit, stellt wohl „false“ da.
Wie würde denn für „true“ in diesem fall die bedingung sein ?

@Smudo :

berücksichtigt dein Script auch, ob die Geräte momentan eingeschalten sind ?
Hierfür frage ich in meinem Script die Variablen ab, da die meisten Geräte bei mir den gleichen Code für „an“ und „aus“ haben.

Wobei ich jetzt sowieso erst mal versuche, mein Script etwas ordentlicher zu gestalten…ich werde das eventuell nacher mal posten, und wäre über Hilfe, wie man es noch „aufgeräumter“ bekommt, dankbar.

Ich steh ja ganz am Anfang in einer Programmiersprache, und es war heute morgen fast wie eine „Geburt“, als mein Script das erstemal fehlerfrei lief :slight_smile:

JUHUUUUU…ich bin Papa geworden :slight_smile:

LG
Sascha

das Ausrufezeichen in deiner 2. möglichkeit, stellt wohl „false“ da.
Wie würde denn für „true“ in diesem fall die bedingung sein ?

Einfach ohne !-Zeichen

if ($TopfieldPower) 

Und Gratulation zum Ersten:D

Danke Werner :slight_smile:

Ja, nach all eurer Hilfe, sollte ich ja eigentlich euch hier im Forum mein Erstgeborenes versprechen :slight_smile:

LG
Sascha

Hallo Gemeinde,

kurze zwischenfrage:

wie würde denn der syntax aussehen ?

$OnkyoTuner = IRT_SendOnce($irtID,„onkyo“,„tuner“); UND mach „was anderes“);

Vielen Dank…damit könnte ich mir einige Zeilen sparen, hoffe ich

Hi,

ich verstehe die Frage nicht richtig …
„UND mach was anderes“ würde einfach einen weiteren Befehl hinter dem Semikolon bedeuten.

$OnkyoTuner = IRT_SendOnce($irtID,"onkyo","tuner"); 
$a < = 12;

Eine UND Abfrage macht ja irgendwie nur in einer IF Schleife Sinn, oder?

Für eine Abfrage wäre es

if ($a == 12 && $b <= 30) {tue etwas}

Dieser Codeblock wird nur ausgeführt, wenn a == 12 und b <= 30 ist, ansonsten wird er übersprungen.

Für ODER wäre es

if ($a == 12 || $b <= 30) {tue etwas}

Du wirst es nicht glauben…aber genau die information habe ich gesucht :slight_smile:

Vielen Dank :slight_smile:

Bin eben noch völlig am Anfang…

LG
Sascha

Nein, das berücksichtige das Script so nicht. Dieses Script ist z.B: das ‚Einschaltscript‘. Es setzt also voraus, daß die Geräte vorher aus sind.

Das ganze lässt sich natürlich beliebig erweitern und man kann auch, bei Bedarf, die Zustände in weiteren Variablen speichern bzw. abfragen.

Gruß
Smudo