PHP skript som larmar vid Max och Min temp mysql databas

Hur gör man för att ... ? Hur fungerar ... ? Steg för steg-guider och förklarande artiklar finns i detta forum.
Många guider finner också på vår blogg: https://blog.m.nu/
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Användarvisningsbild
Plutonium
Moderator
Inlägg: 1246
Blev medlem: 04 jan 2008, 02:34
Ort: Nossebro
Kontakt:

PHP skript som larmar vid Max och Min temp mysql databas

Inlägg av Plutonium »

Tänkte dela med mig av ett väldigt enkelt php-skript som larmar och temperaturen över- eller understiger en fast temperaturangivelse. Tror inte skriptet behöver någon djupare förklaring. Annars får ni fråga.

Jag skrev ihop detta igår kväll och har inte kört nått med det än. Men funkar gör det. Tanken är att jag ska köra skriptet i cron en gång i timmen och om någon temperatur gör avvikelser så mailar linux server mig.. Finns ju mer att utveckla i skriptet men grunden är satt ialf. Nu är det upp till er att labba med det efter behov..

Kod: Markera allt

<?PHP
$hostname = "localhost";
$username = "***";
$password = "***";

mysql_connect($hostname, $username, $password); 
mysql_select_db('1wire');



$array = array(
	"Kylskap" => array(
				"MIN" => "3.00",
				"MAX" => "10.00"),
	"Varmvatten" => array(
				"MIN" => "60.00",
				"MAX" => "85.00")
);

foreach($array as $x=>$x_value)
{

switch($x)
{
    case 'Kylskap';
        $sensor = 'Kylskap';
    break;
    case 'Varmvatten';
        $sensor = 'Varmvatten';
    break;
}

	
$result = mysql_query("SELECT * FROM temperature WHERE sensor='$sensor' ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
  {

  if($row["now"] < $x_value["MIN"] || $row["now"] > $x_value["MAX"]){

	echo "<hr />";
	echo $sensor . ": Min: ".$x_value["MIN"]." Max: ".$x_value["MAX"]." Nu: ";
	echo $row["now"];
	echo "<br />Value out of bounds!<br /><hr />";

# test med mail
exec ('echo -e "subject: Temperatur\n\n  $(date +%Y:%m:%d:%k:%M:%S)" '.$sensor.'| sendmail -f från@mail.se till@mail.se');

	}
	else
	{
		echo "<hr />";
		echo $sensor . ": Min: ".$x_value["MIN"]." Max: ".$x_value["MAX"]." Nu: ";
		echo $row["now"];
		echo "<br />Value OK!<br /><hr />";
	}

  }
}
?>
Har ni fler mätpunkter så är det bara att lägga till dom i arrayen och i switch satsen.

Hoppas det ska komma till nytta för någon. Om inte annat så har jag det som en backup här fall kåken brinner ner....
http://essunga.org
Moderator - Temperatur.nu
shuu
Wannabe
Inlägg: 7
Blev medlem: 27 dec 2013, 23:00
Ort: sjöbo

Re: PHP skript som larmar vid Max och Min temp mysql databas

Inlägg av shuu »

Jag va lite uttråkad och kikade igenom ditt script, har gjort lite ändringar, helt otestat! Det jag har gjort är:

1. Lagt till DISPLAYNAME i array, då kan man ha ett namn i databasen och ett som visas utåt.
2. Tagit bort switch-satsen, tyckte inte den gjorde någon nytta efter ändring i punkt 1 (men jag kan ha fel..)
3. Flyttat ut databasanslutningen i en egen fil.

Kod: Markera allt

<?php

	include 'conn.php'; // Lägg hela databasanslutningen i en egen fil, lättare att återanvända i andra script och mindre duplicering av kod.
	
	$array = array(
	   "Kylskap" => array(
				"MIN" => "3.00",
				"MAX" => "10.00",
				"DISPLAYNAME" => "Kylskåp"),
	   "Varmvatten" => array(
				"MIN" => "60.00",
				"MAX" => "85.00",
				"DISPLAYNAME" => "Varmvatten"),
	);
	
	foreach($array as $sensor=>$x_value)
	{	
		$result = mysql_query("SELECT * FROM temperature WHERE sensor='$sensor' ORDER BY id DESC LIMIT 1");
		while($row = mysql_fetch_assoc($result))
		{
			if($row["now"] < $x_value["MIN"] || $row["now"] > $x_value["MAX"])
			{
				echo "<hr />";
				echo $x_value["DISPLAYNAME"].": Min: ".$x_value["MIN"]." Max: ".$x_value["MAX"]." Now: ".$row["now"];
				echo "<br />Value out of bounds!<br /><hr />";
				
				# test med mail
				exec ('echo -e "subject: Temperatur\n\n  $(date +%Y:%m:%d:%k:%M:%S)" '.$x_value["DISPLAYNAME"].'| sendmail -f från@mail.se till@mail.se');
			}
			else
			{
				echo "<hr />";
				echo $x_value["DISPLAYNAME"].": Min: ".$x_value["MIN"]." Max: ".$x_value["MAX"]." Now: ".$row["now"];
				echo "<br />Value OK!<br /><hr />";
			}
		}
	}
?>
Hoppas någon har nytta av det eller kanske bara vill se så att det fungerar!
Skriv svar