Efter lite labbande kom jag fram till följande.Micke-Falo wrote:Är det någon som gjort något så man enkelt kan ställa tiden från appen i mobiltelefonen?
Fröken fräken som inte jobbar fasta tider tycker det är lite krångligt att måsta peta i datorn varje gång hon ska iväg.
Skulle kanske kunna se ut så att man har en ruta med tidsinställning för avresetid och en snabbknapp med 30min gångtid?
Är det möjligt?
bild 1: inställning av starttid samt gångtid
bild 2: efter ett klick på START-knappen
bild 3: motorvärmaren har varit på i 16 minuter (44 kvar)
bild 4: exempel på hur en logg kan se ut
car.html
Code: Select all
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head><title>NexaHome - Life Made Easy With Home Automation</title>
<link rel="Shortcut Icon" href="http://nexahome.se/favicon32x32.ico">
<meta http-equiv="refresh" content="60;#URL#?mypage=car&psw=#PSW#">
</head>
<!-- device="Motorvärmare" on="car_on.png" off="car_off.png" onoff="car_onoff.png" -->
<!-- device="Motorvärmare (timer)" on="time_glass_arrow_on.png" off="time_glass_arrow_off.png" onoff="time_glass_arrow_onoff.png" -->
<!-- dynamic="car_heater_log" url="file:///C:/apps/nexahome/mywebserver/car_heater.log" keep="15" -->
<!-- Images found at the following sites: -->
<!-- http://toons.artie.com/kennedy/arg-graphic-car-go-url.gif -->
<!-- http://www.iconfinder.com/search/?q=hourglass -->
<!-- http://momentumdesignlab.com/resources/downloads/ -->
<body bgcolor="#ffffff" background="/nexahome/nexahome_bg.jpg">
<div style="position: absolute; top: 13px; left: 11px">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="car">
<input type=hidden name="device" value="Motorvärmare">
<input type=hidden name="cmd" value="#CMD#Motorvärmare#">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=image title="Motorvärmare" alt="?" src="#IMAGE#Motorvärmare#">
</form>
</div>
<div style="position: absolute; top: 210px; left: 20px;">
<form action="nexahome" method="get">
<select name="on">
<option value="" selected></option>
<option value="00:00">00:00</option>
<option value="00:30">00:30</option>
<option value="01:00">01:00</option>
<option value="01:30">01:30</option>
<option value="02:00">02:00</option>
<option value="02:30">02:30</option>
<option value="03:00">03:00</option>
<option value="03:30">03:30</option>
<option value="04:00">04:00</option>
<option value="04:30">04:30</option>
<option value="05:00">05:00</option>
<option value="05:30">05:30</option>
<option value="06:00">06:00</option>
<option value="06:30">06:30</option>
<option value="07:00">07:00</option>
<option value="07:30">07:30</option>
<option value="08:00">08:00</option>
<option value="08:30">08:30</option>
<option value="09:00">09:00</option>
<option value="09:30">09:30</option>
<option value="10:00">10:00</option>
<option value="10:30">10:30</option>
<option value="11:00">11:00</option>
<option value="11:30">11:30</option>
<option value="12:00">12:00</option>
<option value="12:30">12:30</option>
<option value="13:00">13:00</option>
<option value="13:30">13:30</option>
<option value="14:00">14:00</option>
<option value="14:30">14:30</option>
<option value="15:00">15:00</option>
<option value="15:30">15:30</option>
<option value="16:00">16:00</option>
<option value="16:30">16:30</option>
<option value="17:00">17:00</option>
<option value="17:30">17:30</option>
<option value="18:00">18:00</option>
<option value="18:30">18:30</option>
<option value="19:00">19:00</option>
<option value="19:30">19:30</option>
<option value="20:00">20:00</option>
<option value="20:30">20:30</option>
<option value="21:00">21:00</option>
<option value="21:30">21:30</option>
<option value="22:00">22:00</option>
<option value="22:30">22:30</option>
<option value="23:00">23:00</option>
<option value="23:30">23:30</option>
</select>
<select name="minutes">
<option value="60" selected>60</option>
<option value="90">90</option>
<option value="120">120</option>
<option value="150">150</option>
<option value="180">180</option>
</select>
<input type=hidden name="mypage" value="car">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=submit value="START">
</form>
</div>
<div style="position: absolute; top: 162px; left: 20px">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="car">
<input type=hidden name="device" value="Motorvärmare (timer)">
<input type=hidden name="cmd" value="#CMD#Motorvärmare (timer)#">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=image title="Motorvärmare (timer)" alt= "?" src="#IMAGE#Motorvärmare (timer)#">
</form>
</div>
<div style="position: absolute; top: 170px; left: 60px">
#DATA#car_text#
</div>
<div style="position: absolute; top: 170px; left: 155px">
Ute: #SENSOR_VALUE#Temp Ute#ºC
</div>
<div style="position: absolute; top: 250px; left: 20px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="car">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=hidden name="on" value="+01:00">
<input type=hidden name="minutes" value="60">
<input type=submit value="Start om 1 h">
</form>
</div>
<div style="position: absolute; top: 250px; left: 140px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="car">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=hidden name="on" value="+02:00">
<input type=hidden name="minutes" value="60">
<input type=submit value="2 h">
</form>
</div>
<div style="position: absolute; top: 250px; left: 190px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="car">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=hidden name="on" value="+03:00">
<input type=hidden name="minutes" value="60">
<input type=submit value="3 h">
</form>
</div>
<div style="position: absolute; top: 290px; left: 20px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="car">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=submit value="#TIMESTAMP#">
</form>
</div>
<div style="position: absolute; top: 330px; left: 20px;">
<table border="1">
<tr><th>Log</th></tr>#DYNAMIC#car_heater_log#
</table>
</div>
</body>
</html>
Code: Select all
car = false;
car_on = null;
car_minutes = null;
car_check_device = "30";
params = getData("mypage.params_");
//echo(params);
var len = Integer.parseInt(params);
for (int ndx = 1; ndx <= len; ndx++) {
param = getData("mypage.param" + ndx + "_");
// echo(param);
if (param.equals("mypage=car")) {
car = true;
} else if (param.startsWith("on=")) {
car_on = param.substring("on=".length());
} else if (param.startsWith("minutes=")) {
car_minutes = param.substring("minutes=".length());
}
}
if (car && car_on != null) {
setData("car_on", car_on);
setData("car_minutes", (car_minutes != null ? car_minutes : ""));
deviceOn(car_check_device);
}
Code: Select all
device = "3";
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 = "C:/apps/nexahome/mywebserver/car_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();
}
Code: Select all
car_check_device = "30";
car_heater_device = "3";
timer = "car";
import java.text.SimpleDateFormat;
import java.text.ParsePosition;
if (deviceIsOn(car_check_device)) {
car_on = getData("car_on");
car_minutes = getData("car_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("car_power_on", "" + power_on);
setData("car_power_off", "" + power_off);
setData("#DATA#car_text#", sdf.format(cal.getTime()) + " (" + car_minutes + ")");
}
}
if (!timerIsRunning(timer)) {
startTimer(timer, 60);
}
} else {
setData("car_power_on", "");
setData("car_power_off", "");
setData("#DATA#car_text#", "");
if (timerIsRunning(timer)) {
stopTimer(timer);
}
if (deviceIsOn(car_heater_device)) {
deviceOff(car_heater_device);
}
}
Code: Select all
car_check_device = "30";
car_heater_device = "3";
timer = "car";
if (deviceIsOn(car_check_device)) {
car_power_on = getData("car_power_on");
car_power_off = getData("car_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(car_heater_device)) {
deviceOn(car_heater_device);
setData("#DATA#car_text#", "(" + Math.round((power_off - now) / 60000) + ")");
startTimer(timer, 60);
} else if (now >= power_off && deviceIsOn(car_heater_device)) {
deviceOff(car_check_device);
} else if (deviceIsOn(car_heater_device)) {
long left = Math.round((power_on - now) / 60000);
long right = Math.round((power_off - now) / 60000) + 1;
setData("#DATA#car_text#", "(" + left + "/" + right + ")");
startTimer(timer, 60);
hideOutput();
} else {
startTimer(timer, 60);
hideOutput();
}
}
}
http://nexahome.se/car_images.zip
Definiera device "Motorvärmare" i TelldusCenter.
Definiera device "Motorvärmare (timer)" i TelldusCenter (Self Learning on/off, slumpa fjärrkontrollskoden) samt skriv i NexaHome in texten "dummy:yes" i Parameters fältet.
Device Id i ovanstående filer är endast ett exempel.
3 = "Motorvärmare"
30 = "Motorvärmare (timer)"
Kontrollera i NexaHome vilka device id som du fick för dina nya enheter.
Ändra device id 3 till ditt eget, dvs döp om 3.bsh till ditt eget device id för enheten med namnet "Motorvärmare".
Ändra device id 30 till ditt eget, dvs döp om 30.bsh till ditt eget id för dummy device "Motorvärmare (timer)".
Ändra på följande variabler i ovanstående bsh filer så att dom överensstämmer med dina egna...
Code: Select all
car_check_device = "30";
car_heater_device = "3";
http://nexahome.se/NexaHome_2.9.0.jar
Edit 2012-11-13: Har lagt till bild 4. Uppdaterat car.html samt lagt till 3.bsh.
Edit 2012-11-14: Uppdaterade car.html samt 3.bsh (bytte namn på car_heater_log.html till car_heater.log).
Edit 2012-12-02: Uppdaterade 3.bsh för att slippa "dubbletter" i loggen.
För att slippa se ett tillfälligt felmeddelande på webbsidan så kan man skapa en tom fil
C:\apps\nexahome\mywebserver\car_heater.log
Felmeddelandet ska försvinna av sig själv då motorvärmaren sätts på för första gången efter att man har uppdaterat car.html samt lagt till 3.bsh.
För att få NexaHome att upptäcka att man har skapat/uppdaterat html och bildfiler i mywebserver biblioteket så måste man starta om NexaHome eller klicka på 'Reload' knappen som finns under 'Web' fliken.
Fyller på med mer info senare...