Ich lade die Windgeschwindigkeit von meiner eigenen PWS via Wunderground einmal pro Minute herunter. Leider konnte ich es nicht so machen, dass ich die Daten direkt von meiner Wetterstation einlese…
Ich habe daneben eine Variable „WindToggle“ erstellt. Diese soll als Windwächter dienen. Wenn nun die Windgeschwindigkeit über 16km/h liegt, dann müsste das WindToggle auf „true“ geschaltet werden. Soweit so gut. Mit einem Ereignis habe ich das hinbekommen. Allerdings kommt es in der Praxis oft vor, dass die Grenzgeschwindikeit nur einmal für eine Minute erreicht wird. Das Resultat ist, dass die Markisen dann sofort einfahren.
Ich möchte eigentlich lieber, dass der WindToggle erst dann aktiviert wird, wenn über 3-5 Minuten der Grenzwert konstant überschritten wird. Wie kann ich das PHP-technisch lösen?
Wenn du die Variable loggst, dann kannst du via AC_GetAggregatedValues die Durchschnittswerte der letzten x Minuten abfragen. Darüber kannst dann ja nochmal den Durchschnittswert berechnen (aufsummieren und durch x teilen). Wenn dieser dann über 16 liegt, dann führst du deine gewünschte Aktion durch.
Solltest du die Variable nicht loggen und das auch nicht vorhaben, dann müsstest du dir die letzten Werte in Hilfsvariablen merken, kannst aber vom Prinzip her das Problem genauso lösen.
§status ist deine WindToggle Variable.
Wird die WindToggle auf true gesetzt, wird dieses Script Gestartet (Ereigniss Erstellen!) und es läuft ein Timer (hier z.b 30 sek)
Sind die 30 sek Fertig, wird nochmal geprüft ob status auf true.
Wenn false, nichts machen.
Wenn true, irgendwas schalten.
<?
$status = GetValue(12345); WindToggle Variable
$time = 30; //Sekunden
If ($_IPS['SENDER'] == "Variable")
{
If ($status == true)
{
IPS_SetScriptTimer($_IPS['SELF'],$time);
}
else
{
//mach nix
}
}
else
{
echo "Dieses Sript kann nur entweder durch eine Variable oder ein Timerevent gestartet werden";
}
If ($_IPS['SENDER'] == "TimerEvent") // Wenn das Script durch den Timer gestartet wird
{
If ($status == true)
{
//was soll gemacht werden?
IPS_SetScriptTimer($_IPS['SELF'],$time);
}
else
{
IPS_SetScriptTimer($_IPS['SELF'],0); // Timer ausschalten
}
}
else
{
}
?>
Ich habe das so auf meine Bedürfnisse angepasst. Stimmt das in etwa?
WindToggle$ = Temporärer Schalter, der bei WS>26 angeht
WindToggle=Definiver Schalter, der erst angeht, wenn 3 Minuten lang die WS>26 war. Diesen Parameter möchte ich dann verwenden, um den Schaltbefehl zu erstellen.
<?
$status = GetValue(50744); //WindToggle$
$time = 60*3; //Sekunden
If ($_IPS['SENDER'] == "Variable")
{
If ($status == true)
{
IPS_SetScriptTimer($_IPS['SELF'],$time);
}
else
{
//mach nix
}
}
else
{
echo "Dieses Sript kann nur entweder durch eine Variable oder ein Timerevent gestartet werden";
}
If ($_IPS['SENDER'] == "TimerEvent") // Wenn das Script durch den Timer gestartet wird
{
If ($status == true)
{
SetValue($_IPS[22620], $_IPS['VALUE']); //was soll gemacht werden? //WindToggle
IPS_SetScriptTimer($_IPS['SELF'],$time);
}
else
{
IPS_SetScriptTimer($_IPS['SELF'],0); // Timer ausschalten
}
}
else
{
}
?>
Dr. Niels: Ich habe mich da versucht einzulesen, aber irgendwie reicht mein Niveau noch nicht. Ich wollte mal trivial die Tagesdurchschnitttemperatur berechnen:
Variable 35540 = Download Temperatur Wunderground (float), archiviert
Variable 55227 = geplante Variable für den Tagesdurchschnitt (float)
$werte = AC_GetAggregatedValues(35540, 55227, 1 /* Täglich */, strtotime("today 00:00"), time(), 0); //55554 ist die ID der Variable, 12345 vom Archiv
foreach($werte as $wert) {
echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL;
}
Deine Funktion sieht soweit richtig aus. Die sollte die Durchschnittstemperatur des aktuellen Tages seit 00:00 Uhr ausgeben. Klappt das nicht? Oder wolltest du etwas anderes erreichen?