// HomeAutomation software to accompany the book
// 'Practical Arduino + Android Projects for the Evil Genius'
// Copyright (C) 2011. Simon Monk
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package com.simonmonk.home;
import java.util.Date;
import android.content.SharedPreferences;
class TimerMonitor extends Thread
{
private HomeActivity mActivity;
public TimerMonitor(HomeActivity activity)
{
super();
mActivity = activity;
}
public void run()
{
while (true)
{
for (int i = 1; i <= 5; i++)
{
handleTimerNumber(i);
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
try
{
Thread.sleep(10000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
private void handleTimerNumber(int i)
{
String itemStr = getSetting("TIMER_OP" + i);
if ("null".equals(itemStr))
{
return; // timer not in use
}
String startTimeStr = getSetting("TIMER_ON"+ i);
String endTimeStr = getSetting("TIMER_OFF" + i);
int start = Integer.parseInt(startTimeStr);
int end = Integer.parseInt(endTimeStr);
int op = Integer.parseInt(itemStr);
// compare with time now and if it should be on, but isn't, turn it on.
// the times can just be compared as 4 digit numbers
Date d = new Date();
int t = d.getHours() * 100 + d.getMinutes();
boolean shouldBeOn = false;
// if the off time appears to be before the on time, then it refers to the next day
if (end < start)
{
end = end + 2400;
}
shouldBeOn = (t >= start && t < end);
DigitalOutputs outputs = mActivity.outputs;
if (shouldBeOn && ! outputs.isOn(op))
{
outputs.turnOn(op);
}
if (! shouldBeOn && outputs.isOn(op))
{
outputs.turnOff(op);
}
}
String getSetting(String name)
{
SharedPreferences settings = mActivity.getSharedPreferences(PrefsActivity.PREFS_NAME, 0);
return settings.getString(name, "null");
}
}