Skript soll Skrip aufrufen und Wert übergeben

Hallo,

ich habe ein Skript, dass mir den Bypass der Lüftungsanlage steuert, je nach Außentemperatur.
In einem 2. Skript kann ich über das Webinterface die Lüftungsstufe von 1-4 steuern. Das Skript sieht so aus und funktioniert einwandfrei:

<?
//Homematic-Kanäle 
//Kanal 1: 16286 
//Kanal 2: 37400 
//Kanal 3: 26325 

switch($_IPS['SENDER'])
{
    case "WebFront":
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    switch($_IPS['VALUE'])
    {
       case 1:
        HM_WriteValueBoolean(16286,"STATE",false);
	    HM_WriteValueBoolean(37400,"STATE",false);
	    HM_WriteValueBoolean(26325,"STATE",false);
       break;
       case 2:
	    HM_WriteValueBoolean(16286,"STATE",true);
	    HM_WriteValueBoolean(37400,"STATE",false);
	    HM_WriteValueBoolean(26325,"STATE",false);
       break;
       case 3:
	    HM_WriteValueBoolean(16286,"STATE",true);
	    HM_WriteValueBoolean(37400,"STATE",true);
	    HM_WriteValueBoolean(26325,"STATE",false);
        break;
        case 4:
	    HM_WriteValueBoolean(16286,"STATE",true);
	    HM_WriteValueBoolean(37400,"STATE",true);
	    HM_WriteValueBoolean(26325,"STATE",true);
        break;
    }
    break;
}  
?>

Meine Frage ist nun, wie kann ich dem Skript, dass den Bypass steuert, sagen, wenn Bypass auf --> Setze Lüftungsanlage auf 2 (case 2). Am liebsten wäre wir ein eleganter Weg, der das vorhandene Skript nutzt.

Ich hoffe, ihr versteht mein Vorhaben und könnt mir helfen :slight_smile:

Mit RunScriptEx:
IPS_RunScriptEx — IP-Symcon :: Automatisierungssoftware
Du musst aber unter dein case ‚WebFront‘:
noch ein case ‚RunScript‘: einfügen.
Michael

Ok, in der Theorie ist es jetzt klar.
Aber in der Praxis klappt es nicht.

Ist das so korrekt?

Aufgerufenes Skript:

<?
//Homematic-Kanäle 
//Kanal 1: 16286 
//Kanal 2: 37400 
//Kanal 3: 26325 

switch($_IPS['SENDER'])
{
    case "WebFront":
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    case "RunScript":
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    switch($_IPS['VALUE'])
    {
       case 1:
        HM_WriteValueBoolean(16286,"STATE",false);
	    HM_WriteValueBoolean(37400,"STATE",false);
	    HM_WriteValueBoolean(26325,"STATE",false);
       break;
       case 2:
	    HM_WriteValueBoolean(16286,"STATE",true);
	    HM_WriteValueBoolean(37400,"STATE",false);
	    HM_WriteValueBoolean(26325,"STATE",false);
       break;
       case 3:
	    HM_WriteValueBoolean(16286,"STATE",true);
	    HM_WriteValueBoolean(37400,"STATE",true);
	    HM_WriteValueBoolean(26325,"STATE",false);
        break;
        case 4:
	    HM_WriteValueBoolean(16286,"STATE",true);
	    HM_WriteValueBoolean(37400,"STATE",true);
	    HM_WriteValueBoolean(26325,"STATE",true);
        break;
    }
    break;
}  
?>

Das Skript soll das obere aufrufen:

<?
$Bypass_Temperatur = "23.0";                                        // gewünschte Raumtemperatur;
$Mindest_Aussentemperatur = "5.0";                                 // minimale Aussentemperatur; 
$Hysterese = "1.0";                                                 // Hysterse
$Aussenluft = GetValueFloat(38339);                                   // aktuelle Außentemperatur
$Abluft = GetValueFloat(34473);                     // aktuelle Ablufttemperatur
$Zuluft = GetValueFloat(53040);                                             // aktuelle Zulufttemperatur
$Status_Bypass = GetValueBoolean(36803);                                       // aktueller Bypassstatus
$Sommerbetrieb = GetValueBoolean(17793);                      // Prüfung ob Sommer- oder Winterhalbjahr
$SEWT = GetValueBoolean(25099);                                      // Läuft der Erdwärmetauscher (falls ja, kühlt er die Aussenluft herunter)

if ($Status_Bypass == false){                                       // Bedingungen für Öffnung des Bypass, nur im Sommerhalbjahr aktiv
    if ($Sommerbetrieb == true and $Aussenluft > $Mindest_Aussentemperatur and ($Abluft+$Hysterese) > $Bypass_Temperatur and $Aussenluft < $Abluft)  	{
			    HM_WriteValueBoolean(52155,"STATE",true);                   // Bypass öffnen
                IPS_RunScriptEx(42440, array("case" => "2"));                          //Lüftung auf Stufe 2 stellen
		        }
               elseif ($SEWT == true){
                HM_WriteValueBoolean(52155,"STATE",true);           // Bypass öffnen 
                IPS_RunScriptEx(42440, array("case" => "1"));                          //Lüftung auf Stufe 1 stellen
                }
	}

elseif ($Status_Bypass == true){                                                            // Bypass schließen
    if ($Sommerbetrieb == true) {                                                           // Prüfung auf Sommerhalbjahr
        if ($SEWT == true){
          IPS_Sleep(5);                                                                     // nichts tun
        }
        elseif ($Aussenluft < $Mindest_Aussentemperatur){
            HM_WriteValueBoolean(52155,"STATE",false);                      // Bypass schließen, wenn es draußen zu kalt ist
            IPS_RunScriptEx(42440, array("case" => "1"));                          //Lüftung auf Stufe 1 stellen

        }
        elseif ($Aussenluft >= ($Bypass_Temperatur-$Hysterese)){                                    
            HM_WriteValueBoolean(52155,"STATE",false);                       // Bypass schließen, wenn es draußen wärmer ist als gewünscht
            IPS_RunScriptEx(42440, array("case" => "1"));                          //Lüftung auf Stufe 1 stellen
            }
        }
    }

elseif ($Status_Bypass == true){
    if ($Sommerbetrieb == false){
        HM_WriteValueBoolean(52155,"STATE",false);                      // Bypass im Winter geschlossen halten
        IPS_RunScriptEx(42440, array("case" => "1"));                          //Lüftung auf Stufe 1 stellen
    }
}

Case ist keine Variable, sondern ‚VALUE‘.
Also:


IPS_RunScriptEx(42440, array("VALUE" => 2)); //Lüftung auf Stufe 2 stellen

Und in Script 1 das zweite SetValue raus Sonst gibt es Fehler, weil VARIABLE nicht vorhanden ist bei starten des Script über RunScript.
So:


case "WebFront":

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
case "RunScript":

Michael

Danke, funktioniert perfekt! :slight_smile:

Hi, ich würde gerne auch so ein Script verwenden.
Wie viele in diesen Tagen. ABER:

Um welche Anlage dreht es sich?
Ich habe eine WOLF CWL 300 und bin froh, dass ich mehr als
diesen Stufenschalter im HWR habe.
Aber diese Infowerte und Schaltmöglichkeiten hätte ich gerne.

Kann mir da jemand auf die Sprünge helfen?

Vielen Dank!

Hallo, ich habe eine Helios KWL 370 aus 2014. Das ist noch die Anlage ohne Webinterface. Mein Schwager hat mir eine Platine gebaut, die die Widerstände des internen Schalters nachahmt. Diese Platine steuere ich über einen 4 Kanal Homematic Aktor, die Temperaturen bekomme ich über 1Wire-Sensoren. Du solltest dazu aber ein neues Thema aufmachen oder suchen, ob es schon was passendes gibt.