Überarbeitung meines "Windwächterskripts" - If Zeitabfrage korrekt?

Hallo,

als absolute Altlast läuft in meiner IPS Umgebung mein aller erstes IPS Skript… Das Teil ist eine KAtastrophe… funktioniert aber soweit…

Ich hab eine Logik drin, die die Jalousien nachdem Sie nach oben gefahren sind, bei zu starkem Wind… wieder in die Ausgangsposition zurückfahren… Das ganze soll in der Zeit von 24:00 - 06.00 nicht erfolgen…
Da ich die Funktion immer nur bei Wind testen kann… wollte ich wissen ob diese Erweiterung funktioniert???

Funktioniert diese Abfrage?:


$today = date("H");// gibt Uhrzeit in Hours an... z.B.: 11:23 in 11, oder 23.15 in 23, oder 06:00 in 06;
// Zeit zwischen 00.00 und 06.00Uhr
if ( ($today < 07) || ($today >= 00) )
	  {
	  goto sprungmarke_exitfalse;
	  }
	  else
	  {
	  goto sprungmarke_windauslesen;
	  }


Und hier mal das Katastrophenskript :slight_smile:

<?
// Zurückfahrskript
$today = date("H");// gibt UHrzeit in Hours an... z.B.: 11:23 in 11, oder 23.15 in 23
// Zeit zwischen 00.00 und 06.00Uhr
if ( ($today < 07) || ($today >= 00) )
	  {
	  goto sprungmarke_exitfalse;
	  }
	  else
	  {
	  goto sprungmarke_windauslesen;
	  }
sleep(2000);
sprungmarke_windauslesen:
$windauslesen=GetValueInteger(57196 /*[Haus\Wind\1-wire DS2423 Windzaehler\Zähler Wind \Wind m/s]*/);
if ($windauslesen > 13)//Prüfung ob Wind immer noch über 12m/s ist, falls ja goto Sprungmarke_exit:
     {
	  goto sprungmarke_exitfalse;
     }
     else
     {
	  $zurueckkueche=GetValueInteger(43159 /*[Haus\Raffstoren\1.Küche Raffstore\Alter Stand]*/);
     $zurueckessen=GetValueInteger(29601 /*[Haus\Raffstoren\2.Essen Raffstore\Alter Stand]*/);
     $zurueckwohnen=GetValueInteger(20320 /*[Haus\Raffstoren\3.Wohnen Raffstore\Alter Stand]*/);
	  ZW_DimSet(31642 /*[Haus\Raffstoren\1.Küche Raffstore]*/, $zurueckkueche); // zurückfahren der Jalousien auf ausgangsposition
	  sleep(6);
	  ZW_DimSet(48945 /*[Haus\Raffstoren\2.Essen Raffstore]*/, $zurueckessen); // zurückfahren der Jalousien auf ausgangsposition
	  sleep(6);
	  ZW_DimSet(15030 /*[Haus\Raffstoren\3.Wohnen Raffstore]*/, $zurueckwohnen); // zurückfahren der Jalousien auf ausgangsposition
     SetValueInteger(41711 /*[Haus\Raffstoren\hochgefahren (2=ja, 1= nein)]*/, 1); //Rücksetzung auf nicht ausgeführt
	  goto sprungmarke_exittrue;
	  }
sprungmarke_exitfalse:
setValueBoolean(17469 /*[Haus\Raffstoren\Zurueckfahrskript durchlaufen]*/, FALSE);
goto sprungmarke_exit;

sprungmarke_exittrue:
SetValueBoolean(17469 /*[Haus\Raffstoren\Zurueckfahrskript durchlaufen]*/, TRUE);
$uhrzeit = date("H:i.s");
$mailcontent = "Der Wind ist zurueckgegangen. Deshalb fahren die Jalousien zurueck um: $uhrzeit . 
Windstarke nur noch: $windauslesen m/s .
Die Jalousien fahren zurueck auf:
 Kueche: $zurueckkueche %, Essen: $zurueckessen %, Wohnen: $zurueckwohnen % 
(100% oben, 0% unten)";
SMTP_SendMail(26464 /*[sonstiges\E-Mail senden (SMTP)]*/, "Wind hat abgenommen - Jalousien fahren zurueck", "$mailcontent");
goto sprungmarke_exit;
sprungmarke_exit:
return;
?>

Warum ersetzt Du nicht die Variablen-ID in …

$windauslesen=GetValueInteger(57196 /*[Haus\Wind\1-wire DS2423 Windzaehler\Zähler Wind \Wind m/s]*/);

… durch die einer schnell angelegte Test-Variable, die Du zu Fuß mit Werten versorgst. Macht die Windsimulation zum Kinderspiel :wink:

Cheers
/Jens

Danke dir… Manchmal hat man ein Brett vor’m Kopf…
Da bastle ich doch schnell mal ne test variable, samt Kontrollschalter obs durchläuft.

Ich TU mich mit PHP halt noch schwer… Das sieht man auch an dem Chaos in meinem Skript;-)… Aber es läuft… Von daher

Gesendet von meinem S208

Für solche Test- und Debugfunktionen nutze ich gern

switch( $_IPS['SENDER'] ){
	case "Execute":
...

d.h. aufgrund des STRG-E (manuelles Execute im Editor) setze ich mir Variablen oder erzeuge Ausgaben.

Also z.B.


$debug = true;

und irgendwo im Script


if ($debug)
  	echo "Variable: " . $variable . "
";

die Ausgaben siehst du dann unterhalb vom Editorfenster ;).

Zu diesem Windwächterskript habe ich nochmals ne Frage…

Ich möchte den alten Status der Jalousien Abfragen und nur dann hochfahren wenn diese unten sind…

Hier was ich meine:

Der Fibaro Zwave Rolladenaktor gibt mir den aktuelles Stand als ganze Zahl zurück.
100 -> Jalousien ganz oben
0 -> Jalousien ganz unten.

Ich möchte nun alle drei Jalousienaktoren abfragen ob diese einen Stand zwischen 0 - 99 haben.
Und dann bei Windalarm nach oben fahren auf „100“.

Der normale Fahrbefehl ist klar…

ZW_Dimset(31642,100); \\ Küche auf 100% nach oben
ZW_Dimset(48945,100); \\ Essen auf 100% nach oben
ZW_Dimset(15030,100); \\ Wohnen auf 100% nach oben

Aber wie frage ich den Stand individuell ab und verwende das in einer if schleife oder einem Array ?
So dass nur die Jalousie(n) nach oben fahren, die einen Stand zwischen 0 - 99 haben?

Abfrage klar:

$kueche=GetValueInteger(31642); \\ Küche auf 100% nach oben
$essen=GetValueInteger(48945); \\ Essen auf 100% nach oben
$wohnen=GetValueInteger(15030); \\ Wohnen auf 100% nach oben

Es kann durchaus sein, dass auch nur eine einzelne Jalousie nach oben gefahren werden muss…
Bisher lasse ich alle nach oben fahren. D.h. wenn die Jalousie bereits oben ist, dann hört man das schalten/klackern des Aktors… -> Das kann am Sonntag auf dem Sofa ein wenig nerven … Ist nicht WAF kompatibel…:smiley:

Vielleicht kann mir jemand auf die Sprünge helfen…

Das zählt definitiv zu Grundwissen :wink:

Beispiel:

if ($kueche < 100) {
    ZW_Dimset(31642,100); \\ Küche auf 100% nach oben 
}

Grüße,
Chris

D.h. das else kann ich weglassen… Und die if Abfrage mache einfach dreimal…Da ich diese Abfrage ja für drei Jalousien machen muss

Gesendet von meinem S208

Jupp :slight_smile: Das „else“ hab ich schon entfernt, hatte ich falsch gelesen :slight_smile:

Grüße,
Chris

Vielen Dank…

Eigentlich hätte ich da selbst auf die Lösung kommen können…
Aber meist denkt man da zu kompliziert :wink:

In diesem Fall zählt die Ausrede mit „zu kompliziert gedacht nicht“ :smiley: :stuck_out_tongue: Das sind absolute Grundkenntnisse, die du haben solltest :wink: :slight_smile:

Aber freut mich, dass ich deinen WAF erhöhen konnte :cool: :smiley:

Grüße,
Chris