Efter en veckas knåpande och donande fungerar allt enligt planerat och tänkte dela med mig av hur jag har gjort.
overvakning.sh scriptet körs varje sekund och kollar om sensed filen har ändrats, allt för att slippa crond..
Fördel med detta..
Jo har du ett script som körs med crond med minimum 1 minut uppdatering och någon är väldigt snabb att låsa upp & låsa under denna 1 minut så kommer inte detta att registreras, men med detta skript får man vara jäkligt snabb för att komma obemärkt förbi dörren..
Databas strukturen:
Kod: Markera allt
-- phpMyAdmin SQL Dump
-- version 2.11.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 26, 2008 at 07:22 PM
-- Server version: 5.0.37
-- PHP Version: 5.2.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `1wire`
--
-- --------------------------------------------------------
--
-- Table structure for table `entredoor`
--
CREATE TABLE IF NOT EXISTS `entredoor` (
`id` int(20) NOT NULL auto_increment,
`status` varchar(20) NOT NULL,
`datum` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `entredoor`
--
INSERT INTO `entredoor` (`id`, `status`, `datum`) VALUES
(1, 'låst', '2008-07-26 18:55:39'),
(2, 'upplåst', '2008-07-26 18:56:09'),
(3, 'låst', '2008-07-26 19:16:09'),
(4, 'upplåst', '2008-07-26 19:16:30');
-- --------------------------------------------------------
--
-- Table structure for table `settings`
--
CREATE TABLE IF NOT EXISTS `settings` (
`id` int(14) NOT NULL auto_increment,
`setting` varchar(16) NOT NULL,
`value` tinyint(1) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `settings`
--
INSERT INTO `settings` (`id`, `setting`, `value`) VALUES
(1, 'smsalarm', 1);
overvakning.sh
Kod: Markera allt
##
## Made by Dukeman & Plutonium -08
##
#!/bin/bash
# Mysql
USER="1wire"
PASSWD="*******"
DB="1wire"
MYSQL="mysql -u $USER -p$PASSWD -D $DB -e"
# Första argumentet i funktionen är första ordet i filen (nytt värde)
function reagera {
if [ ${1} -eq 0 ]; then
SMSLARM="Entre dörren är nu upplåst."
#echo "Upplåst"
$MYSQL "INSERT INTO entredoor (status) VALUES ('upplåst')"
else
SMSLARM="Entre dörren är nu låst."
#echo "Låst!"
$MYSQL "INSERT INTO entredoor (status) VALUES ('låst')"
fi
}
function smslarm {
if [ $LARM_VALUE -eq 1 ]; then
echo -e "subject: Status$*\n\n $(date +%Y:%m:%d:%k:%M:%S)" $SMSLARM | sendmail -f Vakt@Home.nu 0730******@sms.comviq.se
fi
}
# Inte lämna skräfiler kvar
function cleanup {
rm "$TEMPFIL"
exit 0
}
# Första argumentet måste vara en fil
[ -z "$1" -o ! -f "$1" ] && echo "overvakning.sh <fil>" && exit 1
FIL=$1
TEMPFIL=$(tempfile)
# Hantera ^C och dylikt
trap cleanup SIGHUP SIGINT SIGTERM
cp "$FIL" "$TEMPFIL"
while /bin/true; do
# Kollar värdet sms alarm
ROWS=`$MYSQL "SELECT value FROM settings WHERE setting='smsalarm'"`
LARM_VALUE=$(echo $ROWS | cut -f2 -d' ')
if [ `cat $FIL` -eq `cat $TEMPFIL` ]; then
#echo "Value är lika med value"
sleep 1
elif [ `cat $FIL` -ne `cat $TEMPFIL` ]; then
#echo "Filen har ändrats, då sover vi 4 sek och kollar igen"
sleep 4
if [ `cat $FIL` -eq `cat $TEMPFIL` ]; then
echo "Avbryt eld upphör!" &>/dev/null
else
#echo "Allt stämde så skriv till databasen!"
diff -qs $FIL $TEMPFIL &>/dev/null
[ $? -ne 0 ] && reagera $(cat $FIL | cut -d " " -f 1) && smslarm
cp "$FIL" "$TEMPFIL"
fi
else
echo "Allt är åt helskotta nu skiter jag i detta" &>/dev/null
fi
done
Du måste göra filen körbar med chmod +x overvakning.sh
/path/overvakning.sh /mnt/1wire/uncached/05.*****/sensed &
Posta gärna lite feedback om vad är bra och dåligt..