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.

Hallo zusammen,
ich versuche gerade das Script von @Peter1984 auf meine Lüftungsanlage zu adaptieren. Leider tue ich mich mit PHP etwas schwer. Kann mir jemand verraten, wie die Unterscheidung „WebFront“ und „RunScript“ gemacht wird? Woher weiß Symcon, dass die Werte z.B. aus dem Webfront und nicht aus dem Script kommen?

Danke und Grüße
BBK

Anhand der Systemvariablen, welche hier bei Grundlagen in der Doku erklärt werden:

Michael

Danke für den Hinweis, das macht es einfacher verständlich. Ich seh schon, ich muss mich noch mehr in die Grundlagen einarbeiten… :wink:

Eine Frage hätte ich allerdings noch: Bei meiner Lüftung kann ich drei Stufen mittels zweier digitaler Eingänge schalten (alle AUS / der erste AN / der zweite AN / alle AN). Die beiden Eingänge werden von einem KNX Schaltaktor angesteuert, d.h. ich hab zwei Schaltkanäle dafür. Wie würdet ihr das im Webfront lösen? Ich möchte ja nicht alles einzeln an- und abwählen, sondern die Stufen in ein- und demselben grafischen Element anwählen (0-1-2-3). Muss ich dafür in Symcon eine Hilfsvariable mit entsprechendem Profil für das Webfront erstellen?

Danke!
BBK

Korrekt.
Und im Aktionsskript dann, je nach gewünschter Stufe, die Aktoren ansteuern.
Fast so wie oben, nur statt den Homematic dann die KNX Befehle, oder RequestAction auf die KNX Variablen.

     SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    switch($_IPS['VALUE'])
    {
       case 1:
	    RequestAction(37400,false);
	    RequestAction (26325,false);
       break;
       case 2:
	    RequestAction(37400,true);
	    RequestAction (26325,false);
       break;
       case 3:
	   RequestAction(37400,true);
	    RequestAction (26325,true);
        break;
    }

Sobald sie Steuerung aus dem WebFront funktioniert, kannst du auch diese selbst angelegte Variable wiederum mit RequestAction aus einem anderen Script ansteuern.
Michael

Meine beiden Skripte laufen seit geraumer Zeit völlig problemlos, vielen Dank nochmal für die Hilfe. Es gibt aber eine Sache die mich stört: Die Visualisierung der Lüftungsstufe im Webfront (Aktionsskript) stimmt nicht mit der tatsächlichen Lüftungsstufe überein, die vom Logikskript angesteuert wird. Kann man den Status im Webfront synchronisieren bzw. wie habt ihr das gelöst?

Danke und viele Grüße
BBK