Tips: Tidsinställning motorvärmare

Moderators: hekj, Telldus

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

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?
Efter lite labbande kom jag fram till följande.

Image Image Image
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)

Image
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>
mypage.bsh

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);
}
3.bsh

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();
}
30.bsh

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);
   }
}
car.bsh

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();
      }
   }
}
Hämta samt packa upp filen car_images.zip i mywebserver biblioteket:
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";
Höll på att glömma... man måste hämta version 2.9.0
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...

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

Du är bäst!! :-) blir lite avis på ditt kunnande!

Tack!!
/Micke

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

Hmm, efter uppdatering till 2.90 så går inte "tidkanalen" motorvärmaren funkade inte i morse inte heller hade ljusen slocknat sen i går? Missar jag något?

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Micke-Falo wrote:Hmm, efter uppdatering till 2.90 så går inte "tidkanalen" motorvärmaren funkade inte i morse inte heller hade ljusen slocknat sen i går? Missar jag något?
Den fungerar hos mig, kvarstår problemet efter omstart av datorn?

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

Fått till tidkanalerna, men inte webservern? Den funkar inte alls..

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Micke-Falo wrote:Fått till tidkanalerna, men inte webservern? Den funkar inte alls..
Testa med annat portnummer.

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

Nja den finns inte ens i Nexahome att titta på? Finns ingen under fliken "web"?

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Micke-Falo wrote:Nja den finns inte ens i Nexahome att titta på? Finns ingen under fliken "web"?
Jag tänkte att du skulle gå in på Config-fliken och ändra portnummer där.

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

Har nu bytt port i config fliken, startar om dator och Router. Men den vill inte starta, i fliken web finns inget alls helt tomt?

/Micke

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Micke-Falo wrote:Har nu bytt port i config fliken, startar om dator och Router. Men den vill inte starta, i fliken web finns inget alls helt tomt?
När du säger att det är helt tomt i Web fliken, menar du att det inte syns något då du klickar på dropdown knappen Page ?

Skrivs det ut något i NexaHome Console fönster?

Om du skickar mig din NexaHome.xml så kan jag se efter om den ser ut som den ska.

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

Nope, helt tomt i den fliken? Och console fönster finns.

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Micke-Falo och jag kom fram till att filen car_images.zip inte var uppackad i mywebserver biblioteket, nu fungerar det som det ska.

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Har lagt till en logg på html sidan (kolla på första inlägget i denna tråd), kan någon testa om det fungerar?

Micke-Falo
Posts: 112
Joined: Thu Jan 18, 2018 11:08 am
Location: Sweden
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by Micke-Falo » Thu Jan 18, 2018 11:08 am

http://dl.dropbox.com/u/26999072/Motorv%C3%A4rmare.bmp

Får ett litet fel.. Jag lyckas inte starta vid ett klockslag heller? Klickar man på timglaset eller bilen så kan man slå av och på.
Men det är allt?

hekj
Posts: 990
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Tips: Tidsinställning motorvärmare

Post by hekj » Thu Jan 18, 2018 11:08 am

Micke-Falo wrote:http://dl.dropbox.com/u/26999072/Motorv%C3%A4rmare.bmp

Får ett litet fel.. Jag lyckas inte starta vid ett klockslag heller? Klickar man på timglaset eller bilen så kan man slå av och på.
Men det är allt?
Nu har jag uppdaterat anvisningarna:
Edit 2012-11-14: Uppdaterade car.html samt 3.bsh (bytte namn på car_heater_log.html till car_heater.log).

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 ovanstående html filer så måste man starta om NexaHome eller klicka på 'Reload' knappen som finns under 'Web' fliken.
Du ska bara klicka på timglaset om du vill ta bort en "programering" du gjort tidigare (då du klickade på "START", ''Start om 1 h", "2 h" eller "3 h").

Post Reply