Sida 1 av 1

PHP skript som larmar vid Max och Min temp mysql databas

Postat: 01 apr 2013, 15:38
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....

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

Postat: 31 dec 2013, 19:07
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!