[Script] Blitze melden und Tendenz berechnen mit Froggit Blitzmelder

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

Habe gerade auch den DP60 und Zubehör bestellt, Blitzwarner liegen hier einige rum aber keiner hat bislang so richtig funktioniert. Hatte mal früher mit einer Feldmühle geliebäugelt aber kein IPS-Anschluss

Hi,
ich warte auch noch auf Blitze um zu sehen ob/wie er funktioniert.

edit: Er hat einmal funktioniert. „Leider“ hatte ich noch kein Gewitter mit vielen, „schönen“ Blitzen:-(

Ralf

1 „Gefällt mir“

Moin,
jetzt hatte ich ein schönes Gewitter mit > 30 Blitzen :grinning:

Ich habe mein Script damit ein wenig optimiert:

<?php
//Betreff der email
$mailBetreff =  "IPS Blitz"; //Betreff der E-Mail
$mailInhalt =   "Blitz in " . GetValue(50841) . "km Entfernung" . PHP_EOL;  
// 32968 = ID Archive
// 50841 ID Entfernung Blitze
// letzten 50 Einträge holen
$Blitze = AC_GetLoggedValues(32968, 50841, 0, 0, 50);
//var_dump($Blitze);
// 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'];
//    var_dump($Blitze[0]);
//    echo count($Blitze).PHP_EOL;
// Alle max. 50 Einträge prüfen
    for ($loop = 1; $loop < count($Blitze); $loop++){
// Zeit und Entfernung vom Eintrag
//        var_dump($Blitze[$loop]);
        $EndZeit = $Blitze[$loop]['TimeStamp'];
        $EndPunkt = $Blitze[$loop]['Value'];
// Wenn Zeit >1min und <5min auseinanderliegen Entfernung vergleichen
        if (($StartZeit - $EndZeit > 60) && ($StartZeit - $EndZeit < 3600)){
// Änderung der Entfernung
            $diff = ($EndPunkt - $StartPunkt);
// Wenn Entfernung kleiner kommt Gewitter näher
            if ($diff > 0) $mailInhalt .= 'Gewitter kommt näher';
// Wenn Entfernung größer entfernt sich Gewitter
            else $mailInhalt .= 'Gewitter entfernt sich';
            break;
        }
    }
}
// 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
//echo $mailInhalt.PHP_EOL;
IPS_RunScriptEx(59691 , Array("SENDER" => "RBsoft", "Betreff" => $mailBetreff, "Text" => $mailInhalt, "Sprache" => 1, "Mail" => 1, "Enigma2" => 1, "LogFile" => 1));
?>

Ralf