Behövs inte Timern (dummy) och bsh-scripten?
Det har iaf jag på mina två motorvärmare... MV2 har snarlika värden som du har, MV2 (timer) har allt blankt förutom Parameter enligt nedan
MV2
Id=9
MV2 (timer)
Id=10
All:true
Parameter: dummy:yes
9.bsh
Code: Select all
device = "9";
import java.text.SimpleDateFormat;
error = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
timestamp = sdf.format(Calendar.getInstance().getTime());
this_status = (deviceIsOn(device) ? ":ON:" : ":OFF:");
this_event = "<tr><td>" + timestamp + " " + this_status + "</tr></td>";
previous_event = getData("car_heater_event");
if (previous_event == null) {
previous_event = "";
}
if (!this_event.equals(previous_event) && previous_event.indexOf(this_status) == -1) {
car_heater_events = getData("car_heater_events");
if (car_heater_events == null) {
car_heater_events = "";
}
String[] events = car_heater_events.split("\t");
if (events.length >= 6) {
pos = car_heater_events.lastIndexOf("\t");
car_heater_events = car_heater_events.substring(0, pos);
}
if (car_heater_events.length() != 0) {
car_heater_events = "\t" + car_heater_events;
}
car_heater_events = this_event + car_heater_events;
setData("car_heater_events", car_heater_events);
//echo(car_heater_events);
try {
file = "/home/pi/nexahome/car2_heater.log";
FileWriter fw = new FileWriter(file, false);
BufferedWriter out = new BufferedWriter(fw);
out.write(car_heater_events.replace('\t', ' '));
out.close();
} catch (Exception e) {
error = true;
echo("Error: " + e.getMessage());
}
setData("car_heater_event", this_event);
}
if (!error) {
hideOutput();
}
10.bsh
Code: Select all
car_check_device = "10";
car_heater_device = "9";
timer = "car2";
import java.text.SimpleDateFormat;
import java.text.ParsePosition;
if (deviceIsOn(car_check_device)) {
car_on = getData("car2_on");
car_minutes = getData("car2_minutes");
if (car_on != null) {
boolean add = car_on.startsWith("+");
if (add) {
car_on = car_on.substring(1);
}
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = sdf.parse(car_on, new ParsePosition(0));
if (date != null) {
if (add) {
cal.add(Calendar.HOUR_OF_DAY, date.getHours());
cal.add(Calendar.MINUTE, date.getMinutes());
} else {
if (date.getHours() < cal.get(Calendar.HOUR_OF_DAY)
|| (date.getHours() == cal.get(Calendar.HOUR_OF_DAY)
&& date.getMinutes() < cal.get(Calendar.MINUTE))) {
cal.add(Calendar.DAY_OF_YEAR, 1);
}
cal.set(Calendar.HOUR_OF_DAY, date.getHours());
cal.set(Calendar.MINUTE, date.getMinutes());
}
long power_on = cal.getTime().getTime();
if (car_minutes == null || car_minutes.length() == 0) {
car_minutes = "60";
}
long power_off = power_on + (Integer.parseInt(car_minutes) * 60 * 1000);
setData("car2_power_on", "" + power_on);
setData("car2_power_off", "" + power_off);
setData("#DATA#car2_text#", sdf.format(cal.getTime()) + " (" + car_minutes + ")");
}
}
if (!timerIsRunning(timer)) {
startTimer(timer, 60);
}
} else {
setData("car2_power_on", "");
setData("car2_power_off", "");
setData("#DATA#car2_text#", "");
if (timerIsRunning(timer)) {
stopTimer(timer);
}
if (deviceIsOn(car_heater_device)) {
deviceOff(car_heater_device);
}
}
car2.bsh
Code: Select all
car2_check_device = "10";
car2_heater_device = "9";
timer = "car2";
if (deviceIsOn(car2_check_device)) {
car_power_on = getData("car2_power_on");
car_power_off = getData("car2_power_off");
if (car_power_on != null && car_power_on.length() != 0
&& car_power_off != null && car_power_off.length() != 0) {
long power_on = Long.parseLong(car_power_on);
long power_off = Long.parseLong(car_power_off);
Calendar cal = Calendar.getInstance();
long now = cal.getTime().getTime();
if (now >= power_on && deviceIsOff(car2_heater_device)) {
deviceOn(car2_heater_device);
setData("#DATA#car2_text#", "(" + Math.round((power_off - now) / 60000) + ")");
startTimer(timer, 60);
} else if (now >= power_off && deviceIsOn(car2_heater_device)) {
deviceOff(car2_check_device);
} else if (deviceIsOn(car2_heater_device)) {
long left = Math.round((power_on - now) / 60000);
long right = Math.round((power_off - now) / 60000) + 1;
setData("#DATA#car2_text#", "(" + left + "/" + right + ")");
startTimer(timer, 60);
hideOutput();
} else {
startTimer(timer, 60);
hideOutput();
}
}
}