Sida 1 av 1

Alarm script

Postat: 18 feb 2010, 13:52
av niiranen
Hejsan.
Skulle behöva hjälp med ett script som tex skickar ett mail till mig när en temepratur sensor går under ett givet värde.
Har en server (ubuntu) med OWFS, RRDtool som ritar lite grafer över värmesystemt.

//Ville

Re: Alarm script

Postat: 18 feb 2010, 16:17
av Plutonium
Hej och välkommen!


Här har du ett bash skript som jag har gjort till dig.

Kod: Markera allt

#!/bin/sh

ALERT=18

TEMP=`cat /mnt/1wire/10.2A7A7C010800/temperature | sed -e s/" "//g`
TEMP_INT=${TEMP/.*}

if [ $TEMP_INT -lt  $ALERT]; then

#echo "Larm låg temperatur!";

echo -e "subject: Status\n\n  $(date +%Y:%m:%d:%k:%M:%S) Temperatur LARM!" $TEMP | sendmail -f Larm@Home.nu din_epost_som_ska_larmas@larmmail.nu

else

#echo "Allt lugnt.";

fi
Väldigt simpelt script.

Kod: Markera allt

ALERT=18
Här anger du din gräns, under 18 grader skickas ett mail till din_epost_som_ska_larmas@larmmail.nu från Larm@Home.nu.
Larm@Home.nu kan du nyttja, det är inget du behöver ändra.

Kod: Markera allt

TEMP=`cat /mnt/1wire/10.2A7A7C010800/temperature | sed -e s/" "//g`
Här hämtas temperaturen och lägger in värdet i variabeln TEMP. För din del är det bara att ändra id nr till din sensors id.

Kod: Markera allt

TEMP_INT=${TEMP/.*}]
Här tar vi bort alla decimaler och nu heter vår nu variabel $TEMP_INT, då bash har lite svårt att hantera dom. Det går att lösa med ett kommando som heter bc. Men det struntar vi i nu.

Kod: Markera allt

if [ $TEMP_INT -lt  $ALERT]; then
Denna rad betyder "om (vår temp) är mindre än (larm värdet) så.

om så är fallet så körs detta.

Kod: Markera allt

#echo "Larm låg temperatur!";

echo -e "subject: Status\n\n  $(date +%Y:%m:%d:%k:%M:%S) Temperatur LARM!" $TEMP | sendmail -f Larm@Home.nu din_epost_som_ska_larmas@larmmail.nu

Kod: Markera allt

else
Om så inte är fallet så kommer det att bara skriva ut detta

Kod: Markera allt

#echo "Allt lugnt.";
Och här avslutar vi våran if sats.

Det finns en nackdel med skriptet. Det är att om tempen blir så låg så att den börjar larma och om du kör skriptet i cron så kommer datorn att skicka ett larm mail till dig varje gång cron kör skriptet tills temperaturen är över ditt angivna värde.
Det går att lösa så att bara ett mail skickas. Det blir dock lite mer kod och den tiden har jag inte just nu, så jag kan fixa det till dig.
En sak till, du måste ha sendmail igång och konfat.

Re: Alarm script

Postat: 19 feb 2010, 12:33
av niiranen
Tackar.
Och tack för snabbt svar.
Hur i h-vetet får confar man sendmail. Har surfat runt och försökt hitta något vettigt.
Har du några tips på vart man hittar en guide eller likande.

//Ville

Re: Alarm script

Postat: 19 feb 2010, 14:32
av Plutonium
Jag misstänker att du måste gå igenom din ISP's smtp server för att kunna skicka mail hemifrån?
Nu var det länge sedan jag gjorde detta själv på ubuntu, men denna korta guide kan nog vara något för dig
http://www.dnsexit.com/support/mailrelay/sendmail.html

Men du kan ju alltid testa först med denna enkla rad och se om det är nödvändigt för dig eller inte:

Kod: Markera allt

echo -e "subject: Hejsan" | sendmail -f Larm@Home.nu din@mail.nu

Re: Alarm script

Postat: 19 feb 2010, 14:45
av MikaelB
Ett alternativ till att läsa av termometern och i scriptet kolla mot ett värde är att sätta en larmtemeratur på sensorn (temphigh och templow i sensorns directory) och sedan läsa av alarm-katalogen (/mnt/1wire/alarm/).
Befinner sig temperaturen utanför spannet mellan templow och temphigh dyker sensorn upp där!

Jag gör på detta viset sedan jag upptäckte att jag läckte ut minnet på min pytteserver (NSLU2) genom att loopa och läsa av sensorn, detta läcker inte minne på samma vis.
Detta skiljer sig dock åt mellan owfs-versioner (NSLU2:an har en armprocessor), så det är inte säkert att det läcker minne för dig bara för att det gjorde det för mig...

Re: Alarm script

Postat: 19 feb 2010, 15:46
av minigranis
MikaelB:
Har har två så NSLU2:or påväg till mig som skall köra OWFS och som måste kunna larma, kan jag få ta del av ditt script ?
Är noob på Linux men har god datorvana innan så tolka bash script bör inte vara några större problem..

Re: Alarm script

Postat: 19 feb 2010, 16:32
av MikaelB

Kod: Markera allt

#!/bin/sh
keeprunning=true
echo true > keeprunning
owfsdir=/mnt/1wire
termometre=10.ACA792010800
email_interval_seconds=1800
plats=kylen
latest_alarm=0
from=fran@mejl.nu
to=to@mejl.nu

while [ "$keeprunning" = "true" ]
do
 alarms="$(ls $owfsdir/alarm/)"
 if [[ "$alarms" =~ .*$termometre.* ]] ; then
   now=$(date +%s)
   diff=$(( $now - $latest_alarm ))
   if [ "$diff" -ge "$email_interval_seconds" ] ; then
    temp="$(cat $owfsdir/$termometre/temperature)"
    echo -e "subject: Temperaturlarm, $temp grader i $plats" | sendmail -f $from $to
    latest_alarm=$(date +%s)
   fi
 fi
 keeprunning="$(cat keeprunning)"
done
Nu är detta ett loopande script som är tänkt att startas från /etc/init.d/ med ett lämpligt startscript.

Detta till skillnad från Plutoniums eminenta script som istället är menat att köras som ett cron-jobb.
Gör du det så får du kanske inte samma problem med minnet - jag vågar inte säga.

email_interval_seconds ställer in hur ofta du vill ha mejl när det larmar - du vill ju inte bli bombarderad men samtidigt kanske du vill veta ifall temperaturen fortfarande är för hög/låg efter en tid.

Lånade mejlraden från Plutonium (tack), du kan ju testa och se vad som passar dig bäst!

Re: Alarm script

Postat: 19 feb 2010, 20:38
av minigranis
Tackar !!

Re: Alarm script

Postat: 19 feb 2010, 23:22
av niiranen
Hej igen.
Nu har jag fått fart på sendmail instalerade postfix och tog hjälp av http://postfix.state-of-mind.de/patrick ... rvers.html

Plutonium : Får fel på rad 6 Bad substitution
if [ $TEMP_INT -lt $ALERT]; then

//Ville

Re: Alarm script

Postat: 20 feb 2010, 03:42
av Plutonium
hmm, det skulle kunna vara att det inte finns något mellanslag vid $ALERT], testa $ALERT ] istället.