Alle Lichter ausschalten - oder alle Instanzen schalten abh. vom Variablenprofil

Hallo,

wieder mal ein kleines Script - unabh. vom verwendeten System (s.u. HomeMatic, Z-Wave, FS20, etc.) .
Dieses Script kann alle Lichter AUS (z.B. beim verlassen des Hauses) oder alles AN Schalten (z.B. bei Brand!) schalten.
Dazu prüft es ob eine Variable ein entsprechendes Variablenprofil hat.
Dh. alle Status Variablen meiner Lichter haben ein eigenes Profil „Licht“ bekommen.

Man kann dieses Script in leicht abgewandelter Form auch anders verwenden (zB. alle Standby Verbraucher abschalten, Dazu halt dann ein eigenes Variablenprofil verwenden).

<?
	/* ----------------------------------------------------------------------
								Alle Lichter aus / anschalten

		Dieses Script ermittelt alle Lichter anhand eines Profils und schaltet
		diese ein bzw. aus.
		
		Wird das Skript normal aufgerufen, schaltet es aus. Über runScriptEX kann
		aber auch der Wert mitgegeen werden:
		IPS_RunScriptEx(<SCRIPTID>, Array("VALUE"=>true, "FORCE"=>true);
		
		$c_profiles: string,  Variablenprofil das geprüft werden soll
		$c_force: true/false, Wenn TRUE wird auf jeden Fall geschalten, egal
					 ob der aktuelle Wert in IPS bereits den Zielwert hat.
					 Bei Systemen ohne Rückkanal notwendig.
		$c_delay: integer, Millisekunden Pause bis zum nächsten Schaltvorgang
		
	  ----------------------------------------------------------------------*/

	  $c_profiles[] = "Licht";
	  $c_profiles[] = "Lichter";
	  
	  $c_force = false; // S.o.
	  $c_delay =  250;

	

	/* End of configuration ------------------------------------------------*/
	DEFINE("ZWAVE","{101352E1-88C7-4F16-998B-E20D50779AF6}");
	DEFINE("FS20", "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}");
	DEFINE("HOME_MATIC","{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}");
	DEFINE("XCOMFORT","{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}");
	DEFINE("LCN","{2D871359-14D8-493F-9B01-26432E3A710F}");

	// status Lesen -
	$stat = @$_IPS['VALUE'];
	settype($stat, "boolean");

	$force = (isset($_IPS['FORCE']))? $_IPS['FORCE'] : $c_force;
	settype($force, "boolean");
	
	
	// Alle Lichter ausschalten (mit Profil Licht!)
	$a_var = IPS_GetVariableList();
   foreach($a_var as $varid){
      $var_info = IPS_GetVariable($varid);
		$var_prof = (!empty($var_info["VariableCustomProfile"]))?
		            $var_info["VariableCustomProfile"] :
		            $var_info["VariableProfile"];
		$var_data = getValue($varid);

		if(in_array($var_prof,$c_profiles) && (($var_data != $stat) || $force) ){
		   // Übergeordnete Instanz ermitteln.
		   $instid = IPS_GetParent($varid);
			$inst_info = IPS_GetInstance($instid);
			switch($inst_info["ModuleInfo"]["ModuleID"]){
			   case ZWAVE:
								ZW_SwitchMode($instid, $stat);
			         		break;

				case FS20:
								FS20_SwitchMode($instid, $stat);
				      		break;
				      
				case LCN:
								LCN_SwitchMode($instid, $stat);
				      		break;

				case XCOMFORT:
								MXC_SwitchMode($instid, $stat);
						      break;
				      
				case HOME_MATIC:
				            HM_WriteValueBoolean($instid, "STATE", $stat);
				      		break;
			} // Switch

			IPS_Sleep($c_delay);
		} // if

	}


?>

Hallo Stele99,

auch, wenn es bereits eine weile her ist, ich finde die Idee UND Dein Script toll. Auch wenn ich KNX benutze und es bei mir sowieso eine Adresse gibt um alles auszuschalten, macht des Sinn dies über alle „Insel-Systeme“ zu tun.

Grüße
:rolleyes:

Danke,
tolles Script - überhaupt für Homematic Geräte, da man diese ja keiner Gruppenadresse zuweisen kann.

Werner

oh geantwortet, aber der Post ist nicht mehr da.
Egal, hier die Änderung für KNX
ziemlich oben folgendendes bei den fast gelichen Zeilen einfügen:

DEFINE("KNX","{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}");

Dann weiter unten in der Case Anweisung folgenden Case einfüngeN:

            case KNX:
                                EIB_Switch($instid, $stat);
                              break;

so sollte es gehen.
evlt. den Befehl noch anpassen EIB_Switch

Hallo Zusammen,
kann man damit auch EnOcean (bei mir komplett über Eltako abgedeckt) schalten?
LG Marcus.

Hallo. Wieder schon eine Weile her…
Was müsste man bei Digitalstrom eingeben?

Seit 5.0 kannst du dafür wunderbar die Funktion RequestAction auf der Variable verwenden. Die ist dann auch unabhängig vom verwendeten System.

Perfekt. Und wie nütze ich das im vorliegenden Skript? Sorry, ich krieg das ohne Hilfe nicht hin…

Wenn ich das soweit richtig verstehe kannst du den ganzen Block zum Schalten


if(in_array($var_prof,$c_profiles) && (($var_data != $stat) || $force) ){
           // Übergeordnete Instanz ermitteln.
           $instid = IPS_GetParent($varid);
            $inst_info = IPS_GetInstance($instid);
            switch($inst_info["ModuleInfo"]["ModuleID"]){
               case ZWAVE:
                                ZW_SwitchMode($instid, $stat);
                             break;

                case FS20:
                                FS20_SwitchMode($instid, $stat);
                              break;
                      
                case LCN:
                                LCN_SwitchMode($instid, $stat);
                              break;

                case XCOMFORT:
                                MXC_SwitchMode($instid, $stat);
                              break;
                      
                case HOME_MATIC:
                            HM_WriteValueBoolean($instid, "STATE", $stat);
                              break;
            } // Switch

            IPS_Sleep($c_delay);
        } // if

auf


if(in_array($var_prof,$c_profiles) && (($var_data != $stat) || $force) ){
           // Variable schalten
           RequestAction($varid, $stat);

            IPS_Sleep($c_delay);
        } // if

runterkürzen