gdfde
27. April 2012 um 22:17
1
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)
gdfde
27. April 2012 um 23:16
3
hat auch nicht funktioniert…
so funktionierts:
if (($WZ > $guete) || ($SZ > $guete))
Das wäre das nächste Angebot gewesen… hatte ich schon als Option;)
gdfde
28. April 2012 um 12:12
5
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
blopp
28. April 2012 um 13:03
6
Der Teil mit $guete_aus sollte wohl in den else Zweig,
gdfde
28. April 2012 um 13:11
7
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.
blopp
28. April 2012 um 15:27
8
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 ]*/);
}
}
gdfde
28. April 2012 um 20:42
9
Hi Blopp,
vielen Dank für den Denkanstoss, hat mich auf den richtigen Weg gebracht
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 "
";
}