Lüftungssteuerung

Hallo,

ich raffs einfach nicht, warum mein Script nicht funktioniert.
Ich hab eine Homematicsteckdose, die die Lüftung ein- oder ausschalten kann.
Getriggert soll sie werden, wenn ein bestimmter Threshold von 2 Luftgütesensoren überschritten wird.

Das Script schaltet aber weder ein, noch aus…

<?

$WZ = GetValueFloat (53104 /*[Visualization\WebFront\Heizung\Heizung EG\Wohnzimmer\Luftguete]*/); // ppm Wert Wohnzimmer auslesen
$SZ = GetValueFloat (59302 /*[Visualization\WebFront\Heizung\Heizung OG\Schlafzimmer\Luftguete]*/); //ppm Wert Schlafzimmer auslesen
$guete = GetValueFloat (45651 /*[Visualization\WebFront\Homematic\Nilan KWL\STATE	hreshold Luftguete]*/);
//echo $WZ;
//echo $SZ;
//echo $guete;

if ($WZ || $SZ >= $guete)
	{
HM_WriteValueBoolean(34301 /*[Visualization\WebFront\Homematic\Nilan KWL]*/, "STATE", true); //Gerät einschalten
	}
else
	{
 HM_WriteValueBoolean(34301 /*[Visualization\WebFront\Homematic\Nilan KWL]*/, "STATE", false); //Gerät ausschalten
   }
?>

Könnte an der Notation liegen.
Probier mal…

if (($WZ || $SZ) >= $guete) 

hat auch nicht funktioniert…

so funktionierts:

if (($WZ > $guete) || ($SZ > $guete))

Das wäre das nächste Angebot gewesen… hatte ich schon als Option;):slight_smile:

mhm, ich wollte nun eine art 2 punkt regler bzw. hysterese einbauen, da meine KWL nun taktet, wenn die ppm Werte an der Einschaltschwelle liegen :o

funktioniert so weit, nur schaltet das ding jetzt nicht mehr ab, wenn die ppm werte unter der einschaltschwelle liegen.

Könnt ihr bitte nochmal einen Blick draufwerfen?
Danke.

$WZ = GetValueFloat (53104 /*[Visualization\WebFront\Heizung\Heizung EG\Wohnzimmer\Luftguete]*/); // ppm Wert Wohnzimmer auslesen
$SZ = GetValueFloat (59302 /*[Visualization\WebFront\Heizung\Heizung OG\Schlafzimmer\Luftguete]*/); //ppm Wert Schlafzimmer auslesen
$guete_ein = GetValueFloat (45651 /*[Visualization\WebFront\Homematic\Nilan KWL\STATE	hreshold Luftguete]*/);
$guete_aus = GetValueFloat (25274 /*[Visualization\WebFront\Homematic\Nilan KWL\STATE	hreshold luftguete aus]*/);

echo $WZ;
echo "
";
echo $SZ;
echo "
";
echo $guete_ein;
echo "
";
echo $guete_aus;
echo "
";

if ((($WZ > $guete_ein) || ($SZ > $guete_ein)) ||  (($WZ < $guete_aus) || ($SZ < $guete_aus)))
	{
HM_WriteValueBoolean(34301 /*[Visualization\WebFront\Homematic\Nilan KWL]*/, "STATE", true); //Gerät einschalten
echo 'KWL eingeschaltet';
	}
else
	{
 HM_WriteValueBoolean(34301 /*[Visualization\WebFront\Homematic\Nilan KWL]*/, "STATE", false); //Gerät ausschalten
echo 'KWL ausgeschaltet';
   }
?>

ergibt das:

ppm WZ: 690
ppm SZ: 622.67032757252
guete_ein: 730
guete_aus: 700
KWL eingeschaltet

Der Teil mit $guete_aus sollte wohl in den else Zweig,

Hi Blopp,

das versteh ich nicht ganz, was du meinst.

Ich will eigentlich eine Hysterese, die zwischen guete_ein und guete_aus definiert ist.

Also wenn ppm grösser guete_ein ist, soll eingeschaltet werden und solange an bleiben, bis ppm kleiner guete_aus ist.

Hier mal eine Beispiel-Hysterese meiner Lichtsteuerung.
Durch den Vergleich mit dem OLDVALUE wird nur bei der Überschreitung der Schwelle einmalig reagiert - das ist eher Optional.
Die eigentliche Hysterese wird durch die 2 If-Abfragen gestaltet.



$thresh_up = 40;
$thresh_do = 35;


if ($IPS_SENDER == "Variable")
{
	//Flanke: Helligkeit unterschreitet untere Grenze
	if (($IPS_VALUE <= $thresh_do) && ($IPS_OLDVALUE > $thresh_do))
	{
		//Szenario: Evening
		IPS_RunScript(11657 /*[Szenarien\Scenario_Evening]*/);
	}
	
	//Flanke: Helligkeit überschreitet obere Grenze
	if (($IPS_VALUE >= $thresh_up) && ($IPS_OLDVALUE < $thresh_up))
	{
		//Lichter aus
		IPS_RunScript (55070 /*[Steuerung\Couch\Couch Turn_Off ]*/);
	}

}

Hi Blopp,

vielen Dank für den Denkanstoss, hat mich auf den richtigen Weg gebracht :slight_smile:

so funktionierts nun einwandfrei:

 if (($WZ >= $guete_ein) || ($SZ >= $guete_ein))
    {
        
        HM_WriteValueBoolean(34301 /*[Visualization\WebFront\Homematic\Nilan KWL]*/, "STATE", true); //Gerät einschalten
        echo 'KWL eingeschaltet';
        echo "
";
        
    }

    
    if (($WZ <= $guete_aus) && ($SZ <= $guete_aus))
    {
       
        HM_WriteValueBoolean(34301 /*[Visualization\WebFront\Homematic\Nilan KWL]*/, "STATE", false); //Gerät ausschalten
        echo 'KWL ausgeschaltet';
        echo "
";
    }