Boolean-Variablen zählen

Moin Zusammen,

vielleicht kann mir jemand helfen. Ich bin gerade dabei mir meine Designeroberfläche zu gestalten und möchte mir auf einer Statuspage als Zahl anzeigen lassen wie viele Lichter und Steckdosen gerade EINGESCHALTET sind.

Hab mir ein Script geschrieben was auch funzt, aber ich denke das muss doch auch 1000mal einfacher gehen, doch dafür fehlt mir ganz schwer das know-how.

Hier mal ein Auszug ( bitte nicht Lachen!!) aus meinem Script:



if ((GetValueBoolean(44057 /*[Bad\4.Licht Decke\Value]*/)==true)){$wert1=+1;}else{$wert1=0;}
 if ((GetValueBoolean(23815 /*[Bad\5.Licht Wand\Value]*/)==true)){$wert2=+1;}else{$wert2=0;}
 //$badradio = GetValueBoolean();
 
if ((GetValueBoolean(20846 /*[Schlafzimmer\1.Licht Decke\Value]*/)==true)){$wert3=+1;}else{$wert4=0;}
 if ((GetValueBoolean(19004 /*[Schlafzimmer\2.Licht Wand\Value]*/)==true)){$wert4=+1;}else{$wert4=0;}
 if ((GetValueBoolean(45774 /*[Schlafzimmer\Xbox360\Status]*/))==true)){$wert5=+1;}else{$wert5=0;}
  //$schlaftv = GetValueBoolean();


//.............. geht noch sehr lange so weiter!!! 

 $ergebnis=$wert1+$wert2+$wert3+$wert4;
 //usw. usw.
 echo "$ergebnis";


Würde mich über ne Anregung oder ein paar Scriptzeilen sehr freuen.

Grüße aus Hamburg,

Peter

… auf die Schnelle:

foreach(IPS_GetInstanceList() as $item){   // alle Unterobjekte
	$M = IPS_GetInstance($item);
   $MInfo = $M['ModuleInfo'];
	if ($MInfo['ModuleName'] == "FS20") {
   	$O = IPS_GetObject($item);
      //print_r(IPS_GetChildrenIDs($item));
      foreach(IPS_GetChildrenIDs($item) as $item_2){
         $name = IPS_GetName($item_2);
	   	//echo "Name: ".$name."
";
	   	if ($name == "StatusVariable"){
	   	   if (GetValue($item_2) == True){
	   			echo "ID: " . $item .  " " . $O['ObjectName'] . "
";
				}
			}
 	   }
   }
}

Es gibt sicherlich Experten, die daraus einen Einzeiler machen …

MST

Was muss bei „alle Unterobjekte“ stehen, ich meine in welcher Form muss das da stehen!? Kannst mir mal ein Beispiel anhand meines Scriptes oben geben!?

Es gibt sicherlich Experten, die daraus einen Einzeiler machen …

…da gibt es bestimmt den ein oder anderen Experten!! g

Danke …

Peter

Hallo Peter,

ich hab mal was zusammengeschrieben. Du mußt hal die ID Nummern anpassen.

Gruß
Attain

<?
$BoolVariablen = array (53178,58423,12521,40145 ,32406,12001);  //ID's der Boolvariablen
$Zaehler = 0;

foreach ($BoolVariablen as $ID){
  if (GetValue($ID)) $Zaehler++; //wenn true eins hochzählen
}

echo $Zaehler
?>

:confused: :confused:

… ich habe doch ein lauffähiges Skript gepostet …

Hallo Steiner,

die Frage ist nur: Sind es alles FS20 Geräte? Und heißt die Status Variable auch wirklich „StatusVariable“? Und Zusammenaddieren muß man auch noch.:eek:

Gruß

… ich verkneife mir die Antwort lieber -

$BoolVariablen = array (53178,58423,12521,40145 ,32406,12001);

ist auch super!