Strahlungsmessung überschritten

Dieses Script ließt die aktuelle Strahlung in uSv/h an dem angegeben Ort aus
und sendet bei Überschreitung des Grenzwertes eine Mail an den Empfänger.

Auf der Seite https://strahlenschutz.api.bund.dev/ werden die aktuellen Strahlungswerte von Deutschland angezeigt.
Dieses Script kann man als CRON Job alle 1 Stunde mal laufen lassen. Sollte der Grenzwert überschritten sein,
sendet es eine Mail.

strahlung.php
<?
/** Ließt die Daten für die Nukleare Strahlung ein und 
  * sendet bei überschreiten eines Grenzwertes eine Warnemail
  *
  * Karte von ganz Deutschland: https://odlinfo.bfs.de/ODL/DE/themen/wo-stehen-die-sonden/karte/karte_node.html
  * Doku https://strahlenschutz.api.bund.dev/
  * (C) by Conny Henn 2022
  */
 
$grenzwert = "0.40";    			// Grenzwert in µSv
$kennung   = "064350291";  			// Kennung für die Messstelle - Info der ID aus der Karte oben
$empfaenger = "max@mustermann.de, sabine@mustermann.de";  // Mailadresse (mehrere durch Komma getrennt)
$absender   = "System@mustermann.de";  // Absende Email
$antwortan  = "conny@mustermann.de";   // Antwort Mail Adresse
 
$debug = false;						// true = Übergabewerte anzeigen, false = normaler Modus (keine Anzeige)
 
// -------- AB HIER SOLLTE NICHTS MEHR GEÄNDERT WERDEN -------------
$err = "";
$url = "https://www.imis.bfs.de/ogc/opendata/ows/?service=WFS&request=GetFeature&typeName=opendata%3Aodlinfo_timeseries_odl_1h&outputFormat=application%2Fjson&viewparams=kenn%3A$kennung&sortBy=end_measure+D&maxFeatures=1";
 
$json = file_get_contents($url);
if (!$json) {
	$err = "Fehler im Strahlung.php Script - URL konnte nicht gelesen werden.<br>";
}
$obj = json_decode($json);
 
// éingelesene Werte anzeigen
if ($debug) {
	echo "<h1>DEBUG-MODUS strahlung.php</H1>";
	echo "<pre>";
	print_r($obj->features);
	echo "</pre>";
}
 
$zeit = $obj->features[0]->properties->end_measure;		// Mess Zeit
$ort  = $obj->features[0]->properties->name;			// Mess Ort
$erg  = $obj->features[0]->properties->value;			// Mess Wert
$unit = $obj->features[0]->properties->unit;			// Mess Einheit
$info = "";
 
 
$info  = "<h1>Nucleare-Strahlungs-Messung</h1>";
$info .= "<b>ACHTUNG</b> - Strahlungsgrenzwert von $grenzwert $unit überschritten !!!<br><br>";
$info .= "<table>";
$info .= "<tr><td><b>Messort:</b></td><td>$ort</td></tr>";
$info .= "<tr><td><b>Zeit:</b></td><td>$zeit</td></tr>";
$info .= "<tr><td><b>Messwert:</b></td><td>$erg $unit</td></tr>";
$info .= "<tr><td><b>Grenzwert:</b></td><td>$grenzwert $unit</td></tr>";
$info .= "</table><br><br>";
$info .= "<hr><b>Legende:</b><br>";
 
$info .= "<table>
			<tr><td></td><td><b>NOTFALL</b></td></tr>
			<tr><td>".(($erg > 100) ?  '►' : '')."</td>               <td><span style='color:#F00;'>⬤ </span> &gt; 100,000 µSv/h</td></tr>
			<tr><td>".(($erg > 50 AND $erg <= 100)    ?  $erg.' ►' : '')."</td><td><span style='color:#D8033E;'>⬤ </span> &gt; 50,000 µSv/h</td></tr>
			<tr><td>".(($erg > 10 AND $erg <= 50)     ?  $erg.' ►' : '')."</td><td><span style='color:#B70563;'>⬤ </span> &gt; 10,000 µSv/h</td></tr>
			<tr><td>".(($erg >  1 AND $erg <= 50 )    ?  $erg.' ►' : '')."</td><td><span style='color:#980056;'>⬤ </span> &gt; 1,000 µSv/h</td></tr>
			<tr><td>".(($erg > 0.6 AND $erg <= 1)     ?  $erg.' ►' : '')."</td><td><span style='color:#8B008B;'>⬤ </span> &gt; 0,600 µSv/h</td></tr>
			<tr><td></td><td><hr></td></tr>
			<tr><td></td><td><b>NORMAL BEREICH</b></td></tr>
			<tr><td>".(($erg > 0.4 AND $erg <= 0.6)   ?  $erg.' ►' : '')."</td><td><span style='color:#0C2C84;'>⬤ </span> &gt; 0,400 µSv/h</td></tr>
			<tr><td>".(($erg > 0.2 AND $erg <= 0.4)   ?  $erg.' ►' : '')."</td><td><span style='color:#225EA8;'>⬤ </span> &gt; 0,200 µSv/h</td></tr>
			<tr><td>".(($erg > 0.17 AND $erg <= 0.2)  ?  $erg.' ►' : '')."</td><td><span style='color:#1D91C0;'>⬤ </span> &gt; 0,170 µSv/h</td></tr>
			<tr><td>".(($erg > 0.14 AND $erg <= 0.17) ?  $erg.' ►' : '')."</td><td><span style='color:#41B6C4;'>⬤ </span> &gt; 0,140 µSv/h</td></tr>
			<tr><td>".(($erg > 0.08 AND $erg <= 0.14) ?  $erg.' ►' : '')."</td><td><span style='color:#C7E9B4;'>⬤ </span> &gt; 0,080 µSv/h</td></tr>
			<tr><td>".(($erg <= 0.08 )                ?  $erg.' ►' : '')."</td><td><span style='color:#EDF8B1;'>⬤ </span> &lt; 0,080 µSv/h</td></tr>				
		</table><hr>
		<b>Grenzwerte:</b> <small>Werte bis zu 0,600 µSv/h sind noch tollerant</small><br>
		"; 
 
$info .= "<b>Übersichtskarte: </b><a href='https://odlinfo.bfs.de/ODL/DE/themen/wo-stehen-die-sonden/karte/karte_node.html'>Link</a>";				
 
if ($debug){
	echo "<hr><h1>Inhalt Mail:</h1>".$info;
}
 
if ($erg >= $grenzwert OR $err <> "") {
	// ----------------- EMAILS VERSENDEN ------------------
 
	// Betreff
	$betreff = 'ACHTUNG - Nuclearer-Strahlungsgrenzwert überschritten !!!';
 
	// Nachricht
	$nachricht = '
	<html>
	<body>'.((!empty($err)) ? $err : $info).'
	</body>
	</html>
	';
 
	// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
	$header[] = 'MIME-Version: 1.0';
	$header[] = 'Content-type: text/html; charset=utf-8';
	$header[] = "From: $absender";
	$header[] = "Reply-To: $antwortan";
	$header[] = "X-Mailer: PHP ". phpversion();
 
	// verschicke die E-Mail
	mail($empfaenger, $betreff, $nachricht, implode("\r\n", $header));
 
}
?>