Ich habe gestern den Froggit Blitzmelder als neues Spielzeug bekommen und warte jetzt auf Blitze. Um mir die Zeit zu vertreiben habe ich schon mal ein Script geschrieben das mir sagen soll wenn es blitzt aber auch berechnen soll ob es sich entfernt oder näher kommt. Vielleicht hat ja jemand von euch auch einen Blitzmelder und es blitzt bei euch schon. Getriggert werden muss das Script mit der Entfernung der Blitze. Die Entfernungen der Blitze müssen archiviert werden.
Hier das Script:
<?php
//Betreff der email
$mailBetreff = "IPS Blitz"; //Betreff der E-Mail
$mailInhalt = "Blitz in " . GetValue(50841) . "km Entfernung";
// Warteschleife
if($_IPS['SENDER'] == "TimerEvent"){
if (IPS_GetName($_IPS['EVENT']) == 'ScriptTimer'){
IPS_SetScriptTimer($_IPS['SELF'], 0);
return;
}
}
if (IPS_GetScriptTimer($_IPS['SELF']) != 0) return;
// Meldung über Blitz ausgeben
// 59691 ist ein Universalscript das diverse Ausgaben macht
// Sprache => 1 Ausgabe Echo
// Mail => 1 Mail senden wenn ich nicht zu Hause bin
// Enigma2 = 1 Ausgabe auf Enigma2, FireTV, Android TV
// LogFile = 1 ins LogFile schreiben
IPS_RunScriptEx(59691 , Array("SENDER" => "RBsoft", "Betreff" => $mailBetreff, "Text" => $mailInhalt, "Sprache" => 1, "Mail" => 1, "Enigma2" => 1, "LogFile" => 1));
// 32968 = ID Archive
// 50841 ID Entfernung Blitze
// letzten 50 Einträge holen
$Blitze = AC_GetLoggedValues(32968, 50841, 0, 0, 50);
// Um Tendenz berechnen zu können müssen mindestens 2 Blitze erkannt worden sein
if (count($Blitze) > 1){
// Zeit und Entfernung letzter Blitz
$StartZeit = $Blitze[0]['TimeStamp'];
$StartPunkt = $Blitze[0]['Value'];
// Alle max. 50 Einträge prüfen
for ($loop = 1; $loop < count($Blitze); $loop++){
// Zeit und Entfernung vom Eintrag
$EndZeit = $Blitze[$loop]['TimeStamp'];
$EndPunkt = $Blitze[$loop]['Value'];
// Wenn Zeit >1min und <5min auseinander liegen Entfernung vergleichen
if (($StartZeit - $EndZeit > 60) && ($StartZeit - $EndZeit < 300)){
// Änderung der Entfernung
$diff = ($EndPunkt - $StartPunkt);
// Wenn Entfernung kleiner kommt Gewitter näher
if ($diff > 0) $Text = 'Gewitter kommt näher';
// Wenn Entfernung größer entfernt sich Gewitter
else $Text = 'Gewitter entfern sich';
IPS_RunScriptEx(59691 , Array("SENDER" => "RBsoft", "Betreff" => "Gewitter", "Text" => $Text, "Sprache" => 1, "Mail" => 0, "Enigma2" => 1, "LogFile" => 0));
return;
}
}
}
// 60 Sekunden nicht prüfen weil Blitze oft gehäuft vorkommen
IPS_SetScriptTimer($_IPS['SELF'], 60);
?>
IPS_RunScriptEx(59691 müsst ihr durch eine eigene Ausgabe ersetzen. Bin mal gespannt ob es nicht nur in der Theorie klappt.
Edit: Nachdem ich jetzt Blitz hatte und testen konnte habei ich einen Fehler beim Text ob Gewitter näher kommt oder sich entfernt. War bloß diff < 0 statt diff > 0.
Edit 2: Script muss auf „Entfernung der Blitze“ getriggert werden da die Anzahl zuerst gemeldet wird und dann die Entfernung. In der alten Version stimmte die Ausgabe der Entfernung nicht denn es kam die vorherige Entfernung.
Ralf