Tips: Att visa sensordata grafiskt

Moderators: hekj, Telldus

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

Tips: Att visa sensordata grafiskt

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

Den som loggar sensordata till disk kan visa den grafiskt på en websida.

("Tips: Att logga sensordata", http://www.telldus.com/forum/viewtopic.php?f=23&t=1528)

Gör så här:

1) Hämta nedanstående filer och lägg dom där NexaHome är installerad (C:\apps\nexhome).
http://nexahome.se/SensorChart.class
http://nexahome.se/SensorChart.java

2) Skapa filen mypage.bsh

Code: Select all

path = "C:/apps/nexahome/";
temp = false;
params = getData("mypage.params_");
if (params != null) {
//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=temp")) {
			temp = true;
		}
	}
} else {
	echo("mypage.params_ == null");
}
if (temp) {
	import java.awt.Color;
	import java.io.BufferedReader;
	import java.io.File;
	import java.io.FileReader;
	import java.io.IOException;
	import java.text.ParsePosition;
	import java.text.SimpleDateFormat;
	import java.util.Calendar;
	import java.util.Date;
	import java.util.StringTokenizer;

	addClassPath("C:/apps/nexahome/jcommon-1.0.17.jar");
	addClassPath("C:/apps/nexahome/jfreechart-1.0.14.jar");
	addClassPath("C:/apps/nexahome/.");

	String[] labels = { "Värmepump", "Inne", "Ute" };
	SensorChart.initGraph(labels.length, 1);
	SensorChart.initSeries(0, labels[0], Color.red);
	SensorChart.initSeries(1, labels[1], Color.black);
	SensorChart.initSeries(2, labels[2], Color.blue);

	Calendar cal = Calendar.getInstance();
	int back = 1;
	cal.add(Calendar.DAY_OF_YEAR, -back);
	for (int ndx = 0; ndx <= back; ndx++) {
		StringBuffer buf = new StringBuffer();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		File f = new File(path + "temp_" + sdf.format(cal.getTime()) + ".txt");
		if (f.exists()) {
			BufferedReader br = null;
			try {
				br = new BufferedReader(new FileReader(f));
				String line = null;
				do {
					line = br.readLine();
					if (line != null) {
						buf.append(line);
						buf.append("\t");
					}
				} while(line != null);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if (br != null) {
						br.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
			StringTokenizer st = new StringTokenizer(buf.toString().replaceAll("\t\t", "\t?\t"), "\t");
			while (st.hasMoreTokens()) {
				String timestamp = st.nextToken();
				String  s1 = st.nextToken().replace(',', '.');
				String  s2 = st.nextToken().replace(',', '.');
				String  s3 = st.nextToken().replace(',', '.');
				Date date = sdf.parse(timestamp, new ParsePosition(0));
				if (date != null) {
					cal.setTime(date);
					int year = cal.get(Calendar.YEAR);
					int month = cal.get(Calendar.MONTH) + 1;
					int day = cal.get(Calendar.DAY_OF_MONTH);
					int hour = cal.get(Calendar.HOUR_OF_DAY);
					int minute = cal.get(Calendar.MINUTE);
					try {
						if (!s1.equals("?")) {
							double d1 = Double.parseDouble(s1);
							SensorChart.addValue(0, year, month, day, hour, minute, d1);
						}
						if (!s2.equals("?")) {
							double d2 = Double.parseDouble(s2);
							SensorChart.addValue(1, year, month, day, hour, minute, d2);
						}
						if (!s3.equals("?")) {
							double d3 = Double.parseDouble(s3);
							SensorChart.addValue(2, year, month, day, hour, minute, d3);
						}
					} catch(NumberFormatException nfe) {
						// ignore
					}
				}
			}
		}
		cal.add(Calendar.DAY_OF_YEAR, 1);
	}

	SensorChart.process("", "Temperatur", 640, 480, "C:/apps/nexahome/mySensorChart.png");
}
Modifiera följande kodavsnitt om du har fler/färre sensorer som loggas till fil.
String[] labels = { "Värmepump", "Inne", "Ute" };
SensorChart.initGraph(labels.length, 1);
SensorChart.initSeries(0, labels[0], Color.red);
SensorChart.initSeries(1, labels[1], Color.black);
SensorChart.initSeries(2, labels[2], Color.blue);
String s1 = st.nextToken().replace(',', '.');
String s2 = st.nextToken().replace(',', '.');
String s3 = st.nextToken().replace(',', '.');
if (!s1.equals("?")) {
double d1 = Double.parseDouble(s1);
SensorChart.addValue(0, year, month, day, hour, minute, d1);
}
if (!s2.equals("?")) {
double d2 = Double.parseDouble(s2);
SensorChart.addValue(1, year, month, day, hour, minute, d2);
}
if (!s3.equals("?")) {
double d3 = Double.parseDouble(s3);
SensorChart.addValue(2, year, month, day, hour, minute, d3);
}
3) Hämta zip arkiv med JFreeChart filer (jfreechart-1.0.14.zip):
http://sourceforge.net/projects/jfreechart/files/

4) Packa upp jfreechart-1.0.14.zip och kopiera filerna jfreechart-1.0.14.jar samt jcommon-1.0.17.jar (från lib biblioteket) till c:\apps\nexahome

5) Skriv in följande på "My Web Server Directory" raden i NexaHome ("Config" fliken):
C:\apps\nexahome\mywebserver
6) Skapa filen temp.html i C:\apps\nexahome\mywebserver biblioteket.

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">
</head>

<!-- dynamic="temp" url="file:///c:/apps/nexahome/mySensorChart.png" -->

<body bgcolor="#ffffff" background="/nexahome/nexahome_bg.jpg">

<div style="position: absolute; top: 5px; left: 15x">
<img src="#DYNAMIC#temp#" border="1" />
</div>

<div style="position: absolute; top: 507px; left: 25px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="temp">
<input type=hidden name="return" value="fasad">
<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: 547px; left: 25px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="#RETURN#">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=submit value="Gå tillbaka">
</form>
</div>

</body>
</html>
7) Starta om NexaHome

8) Surfa in på NexaHome web servern
http://<ip adress>:<port nummer>/nexahome?mypage=temp
Image

Edit: 2013-03-23 Bugfix... SensorChart.java, SensorChart.class
Edit: 2012-11-24 mypage.bsh uppdaterad

eijo
Posts: 26
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Hej,

Kul! Verkar vara precis vad jag vill ha!

Har försökt med detta... har bara en sensor och har modifierat enl. instruktion.

Får felmeddelandet (i NexaHome consolen...):

2012-09-29 20:30:01 The script threw an exception (mypage.bsh): Sourced file: mypage.bsh : Method Invocation SensorChart.process : at Line: 92 : in file: mypage.bsh : SensorChart .process ( "" , "Temperatur" , 640 , 480 , "C:/nexahome/mySensorChart.png" )

Target exception: java.lang.IllegalArgumentException: Null 'chart' argument.

png filen är helt tom (0 byte)...

Vad kan felet vara?

eijo
Posts: 26
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Hittade felet själv... Jag hade loggat med den första varianten av save_temp.bsh i tråden "Att logga sensordata" men eftersom data fält formatet på log filen skiljer så funkade det inte!

Alltså: Använd den nya varianten ("Edit (2012-09-14)" längre ned i inlägget!

Nu funkar det fint!

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

Re: Tips: Att visa sensordata grafiskt

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

eijo wrote:Hittade felet själv... Jag hade loggat med den första varianten av save_temp.bsh i tråden "Att logga sensordata" men eftersom data fält formatet på log filen skiljer så funkade det inte!

Alltså: Använd den nya varianten ("Edit (2012-09-14)" längre ned i inlägget!

Nu funkar det fint!
Bra att du fick igång grafiken själv, jag har nu tagit bort den första varianten och har endast kvar den slutgiltiga. :wave:

eijo
Posts: 26
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Ska försöka mig på att få in data från ett par givare till som jag har i min väderstation. Dom finns i en logg fil från väderstationen. Borde ju gå att skriva om save_temp.bsh ganska enkelt att ta in även dessa... Jag gör ett försök och återkommer om jag behöver goda råd...! :D

eijo
Posts: 26
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Hej!

Min templogging funkar fint, men då och då får jag in skräpvärden som är helt felaktiga. Bit-flippar i kommunikationen gissar jag. Jag har försökt lägga till rimlighetskoll (är värdet inom 3 grader från förra värdet), men jag får det inte att fungera. Fattar att det beror på att det är en sträng jag jämför ett värde med. På något sätt behöver jag gra en variable konvertering gissar jag? Hur kodar man det?

Felmeddelande i loggfönstret i Nexahome:
There was an error in evaluating the script (save_temp.bsh): Sourced file: save_temp.bsh : Operator: '"<"' inappropriate for objects : at Line: 16 : in file: save_temp.bsh : ) && ( values [ ndx ] > ( previous_value - 3 ) ) ) || ! date .equals ( previous_date ) ) {

Tack för tålamod med en nybörjare... :oops:

Code: Select all

import java.text.SimpleDateFormat;
String[] sensors = { "51","52","53" };  // device id
String[] values = new String[sensors.length];  // sensor values
String[] timestamps = new String[sensors.length];  // sensor timestamps
date = "";
error = false;
changed = false;
for (int ndx = 0; ndx < sensors.length; ndx++) {
    sensor = sensors[ndx];
    values[ndx] = getSensorValue(sensor);
    if (values[ndx] != null) {
        previous_value = getData("previous_value" + sensor);
        previous_date = getData("previous_date" + sensor);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        date = sdf.format(Calendar.getInstance().getTime());
		if (((values[ndx]<(previous_value+3)) && (values[ndx]>(previous_value-3)) ) || !date.equals(previous_date)) {
			if (!values[ndx].equals(previous_value) || !date.equals(previous_date)) {
				changed = true;
				setData("previous_value" + sensor, values[ndx]);
				setData("previous_date" + sensor, date);
				timestamps[ndx] = getSensorTimestamp(sensor);
			}
        }
    }
}
if (changed) {
    try {
        file = "temp_" + date + ".txt";
        FileWriter fw = new FileWriter(file, true);
        BufferedWriter out = new BufferedWriter(fw);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        date = sdf.format(Calendar.getInstance().getTime());
        out.write(date);
        for (int ndx = 0; ndx < sensors.length; ndx++) {
            out.write("\t" + (values[ndx] != null ? values[ndx] : "").replace('.', ','));
        }
        out.write("\r\n");
        out.close();
    } catch (Exception e) {
        error = true;
        echo("Error: " + e.getMessage());
    }
}
if (!error) {
    hideOutput();
}
startTimer("save_temp", 60);



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

Re: Tips: Att visa sensordata grafiskt

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

eijo wrote:Min templogging funkar fint, men då och då får jag in skräpvärden som är helt felaktiga. Bit-flippar i kommunikationen gissar jag. Jag har försökt lägga till rimlighetskoll (är värdet inom 3 grader från förra värdet), men jag får det inte att fungera. Fattar att det beror på att det är en sträng jag jämför ett värde med. På något sätt behöver jag gra en variable konvertering gissar jag? Hur kodar man det?
Har inte provat koden själv, du får testa om den fungerar.

Code: Select all

import java.text.SimpleDateFormat;
String[] sensors = { "51","52","53" };  // device id
String[] values = new String[sensors.length];  // sensor values
String[] timestamps = new String[sensors.length];  // sensor timestamps
date = "";
error = false;
changed = false;
for (int ndx = 0; ndx < sensors.length; ndx++) {
    sensor = sensors[ndx];
    values[ndx] = getSensorValue(sensor);
    if (values[ndx] != null) {
        previous_value = getData("previous_value" + sensor);
        previous_date = getData("previous_date" + sensor);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        date = sdf.format(Calendar.getInstance().getTime());
        float dif = (previous_value != null && !previous_value.equals("?") && !values[ndx].equals("?")
                && previous_value.length() != 0 && values[ndx].length() != 0
            ? Float.parseFloat(previous_value) - Float.parseFloat(values[ndx])
            : 0);
        if ((!values[ndx].equals(previous_value) && Math.abs(dif) < 3.0) || !date.equals(previous_date)) {
            changed = true;
            setData("previous_value" + sensor, values[ndx]);
            setData("previous_date" + sensor, date);
            timestamps[ndx] = getSensorTimestamp(sensor);
        }
    }
}
if (changed) {
    try {
        file = "temp_" + date + ".txt";
        FileWriter fw = new FileWriter(file, true);
        BufferedWriter out = new BufferedWriter(fw);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        date = sdf.format(Calendar.getInstance().getTime());
        out.write(date);
        for (int ndx = 0; ndx < sensors.length; ndx++) {
            out.write("\t" + (values[ndx] != null ? values[ndx] : "").replace('.', ','));
        }
        out.write("\r\n");
        out.close();
    } catch (Exception e) {
        error = true;
        echo("Error: " + e.getMessage());
    }
}
if (!error) {
    hideOutput();
}
startTimer("save_temp", 60);
Edit: 2012-11-05 Koden uppdaterad.

eijo
Posts: 26
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Det funkar perfekt!
Inga loggade bitfel på senaste dygnet.

liverpoolarn
Posts: 65
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Jag får inte till det här och jag vet inte vad jag gjort fel. :(

Snälla kan någon hjälpa mig?
edit: jag kör min tellstick duo på en win2008r2 sp1.

Jag kör med NexaHome_2.8.4.jar och har kopierat in SensorChart.class, SensorChart.java, jcommon-1.0.17.jar och jfreechart-1.0.14.jar i mappen där jag har nexahome (F:\Programs\Tellstick\NexaHome)

Jag har reggat sensorerna i Nexahome och lagt till följande parameter "id:71;model:temperaturehumidity;value:temp" som jag döpt till "Temp_framsida" med id 71 och de övriga med motsvarande värden för 72-74 då. Den reggar korrekt temp i Nexahome så dit verkar allt vara ok och den sparar ner tempen i txt-filer. Men sen får jag följande fel i consolen när jag försöker köra mypage:

The script threw an exception (mypage.bsh): Sourced file: mypage.bsh : Typed variable declaration : Method Invocation Integer.parseInt : at Line: 5 : in file: mypage.bsh : Integer .parseInt ( params )

Target exception: java.lang.NumberFormatException: null

Här är mina filer:
temp_2012-11-22.71.txt

Code: Select all

5.8	18:41
5.7	18:43
5.8	18:45
5.7	18:46
5.6	18:54
5.5	18:55
5.6	18:58
5.7	18:59
5.8	19:02
del av nexahome.xml

Code: Select all

      <device name="Temp_Framsida" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:71;model:temperaturehumidity;value:temp">71</device>
      <device name="Temp_Baksida_K" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:72;model:temperaturehumidity;value:temp">72</device>
      <device name="Temp_Baksida_G" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:73;model:temperaturehumidity;value:temp">73</device>
      <device name="Temp_Gillestuga" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:74;model:temperaturehumidity;value:temp">74</device>
      <device name="Fukt_Williams" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:71;model:temperaturehumidity;value:humidity">75</device>
      <device name="Fukt_Kitchen" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:72;model:temperaturehumidity;value:humidity">76</device>
      <device name="Fukt_Guestroom" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:73;model:temperaturehumidity;value:humidity">77</device>
      <device name="Fukt_Gillestuga" group="SENSOR" previous="" repeat="1" partOfAll="yes" specificParameters="id:74;model:temperaturehumidity;value:humidity">78</device>
    </devices>
mypage.bsh

Code: Select all

path = "F:/Programs/Tellstick/NexaHome/";
temp = false;
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=temp")) {
      temp = true;
   }
}
if (temp) {
   import java.awt.Color;
   import java.io.BufferedReader;
   import java.io.File;
   import java.io.FileReader;
   import java.io.IOException;
   import java.text.ParsePosition;
   import java.text.SimpleDateFormat;
   import java.util.Calendar;
   import java.util.Date;
   import java.util.StringTokenizer;

   addClassPath("F:/Programs/Tellstick/NexaHome/jcommon-1.0.17.jar");
   addClassPath("F:/Programs/Tellstick/NexaHome/jfreechart-1.0.14.jar");
   addClassPath("F:/Programs/Tellstick/NexaHome/.");

   String[] labels = { "Temp_Framsida", "Temp_Baksida_K", "Temp_Baksida_G", "Temp_Gillestuga" };
   SensorChart.initGraph(labels.length, 1);
   SensorChart.initSeries(0, labels[0], Color.red);
   SensorChart.initSeries(1, labels[1], Color.green);
   SensorChart.initSeries(2, labels[2], Color.blue);
   SensorChart.initSeries(3, labels[3], Color.black);

   Calendar cal = Calendar.getInstance();
   int back = 1;
   cal.add(Calendar.DAY_OF_YEAR, -back);
   for (int ndx = 0; ndx <= back; ndx++) {
      StringBuffer buf = new StringBuffer();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      File f = new File(path + "temp_" + sdf.format(cal.getTime()) + ".txt");
      if (f.exists()) {
         BufferedReader br = null;
         try {
            br = new BufferedReader(new FileReader(f));
            String line = null;
            do {
               line = br.readLine();
               if (line != null) {
                  buf.append(line);
                  buf.append("\t");
               }
            } while(line != null);
         } catch (IOException e) {
            e.printStackTrace();
         } finally {
            try {
               if (br != null) {
                  br.close();
               }
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
         sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
         StringTokenizer st = new StringTokenizer(buf.toString().replaceAll("\t\t", "\t?\t"), "\t");
         while (st.hasMoreTokens()) {
            String timestamp = st.nextToken();
            String  s1 = st.nextToken().replace(',', '.');
            String  s2 = st.nextToken().replace(',', '.');
            String  s3 = st.nextToken().replace(',', '.');
			String  s4 = st.nextToken().replace(',', '.');
            Date date = sdf.parse(timestamp, new ParsePosition(0));
            if (date != null) {
               cal.setTime(date);
               int year = cal.get(Calendar.YEAR);
               int month = cal.get(Calendar.MONTH) + 1;
               int day = cal.get(Calendar.DAY_OF_MONTH);
               int hour = cal.get(Calendar.HOUR_OF_DAY);
               int minute = cal.get(Calendar.MINUTE);
               try {
                  if (!s1.equals("?")) {
                     double d1 = Double.parseDouble(s1);
                     SensorChart.addValue(0, year, month, day, hour, minute, d1);
                  }
                  if (!s2.equals("?")) {
                     double d2 = Double.parseDouble(s2);
                     SensorChart.addValue(1, year, month, day, hour, minute, d2);
                  }
                  if (!s3.equals("?")) {
                     double d3 = Double.parseDouble(s3);
                     SensorChart.addValue(2, year, month, day, hour, minute, d3);
                  }
				  if (!s4.equals("?")) {
                     double d4 = Double.parseDouble(s4);
                     SensorChart.addValue(3, year, month, day, hour, minute, d4);
                  }
               } catch(NumberFormatException nfe) {
                  // ignore
               }
            }
         }
      }
      cal.add(Calendar.DAY_OF_YEAR, 1);
   }

   SensorChart.process("", "Temperatur", 640, 480, "F:/Programs/Tellstick/NexaHome/mySensorChart.png");
}
start.bsh

Code: Select all

startTimer("save_temp", 30);
startTimer("save_humidity", 30);
save_temp.bsh

Code: Select all

import java.text.SimpleDateFormat;
String[] sensors = { "71", "72", "73", "74" };  // device id
error = false;
for (int ndx = 0; ndx < sensors.length; ndx++) {
   sensor = sensors[ndx];
   value = getSensorValue(sensor);
   if (value != null) {
      previous_value = getData("previous_value" + sensor);
      previous_date = getData("previous_date" + sensor);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      date = sdf.format(Calendar.getInstance().getTime());
      if (!value.equals(previous_value) || !date.equals(previous_date)) {
         setData("previous_value" + sensor, value);
         setData("previous_date" + sensor, date);
         timestamp = getSensorTimestamp(sensor);
         echo(value);
         echo(timestamp);
         try {
            file = "temp_" + date + "." + sensor + ".txt";
            FileWriter fw = new FileWriter(file, true);
            BufferedWriter out = new BufferedWriter(fw);
            out.write(value + "\t" + timestamp + "\r\n");
            out.close();
         } catch (Exception e) {
             error = true;
             echo("Error: " + e.getMessage());
         }
      }
   }
}
if (!error) {
   hideOutput();
}
startTimer("save_temp", 30);
temp.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">
</head>

<!-- dynamic="temp" url="file:///F:/Programs/Tellstick/NexaHome/mySensorChart.png" -->

<body bgcolor="#ffffff" background="/nexahome/nexahome_bg.jpg">

<div style="position: absolute; top: 5px; left: 15x">
<img src="#DYNAMIC#temp#" border="1" />
</div>

<div style="position: absolute; top: 507px; left: 25px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="temp">
<input type=hidden name="return" value="fasad">
<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: 547px; left: 25px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="#RETURN#">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=submit value="Gå tillbaka">
</form>
</div>

</body>
</html>

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

Re: Tips: Att visa sensordata grafiskt

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

liverpoolarn wrote:Jag får inte till det här och jag vet inte vad jag gjort fel. :(

Snälla kan någon hjälpa mig?
edit: jag kör min tellstick duo på en win2008r2 sp1.

Jag kör med NexaHome_2.8.4.jar och har kopierat in SensorChart.class, SensorChart.java, jcommon-1.0.17.jar och jfreechart-1.0.14.jar i mappen där jag har nexahome (F:\Programs\Tellstick\NexaHome)

Jag har reggat sensorerna i Nexahome och lagt till följande parameter "id:71;model:temperaturehumidity;value:temp" som jag döpt till "Temp_framsida" med id 71 och de övriga med motsvarande värden för 72-74 då. Den reggar korrekt temp i Nexahome så dit verkar allt vara ok och den sparar ner tempen i txt-filer. Men sen får jag följande fel i consolen när jag försöker köra mypage:

The script threw an exception (mypage.bsh): Sourced file: mypage.bsh : Typed variable declaration : Method Invocation Integer.parseInt : at Line: 5 : in file: mypage.bsh : Integer .parseInt ( params )

Target exception: java.lang.NumberFormatException: null
Hur kör du "mypage", hur ser din url ut?

Du ska anropa NexaHome servern med parametern mypage satt till "temp", dvs
http://<ip adress>:<port nummer>/nexahome?mypage=temp

liverpoolarn
Posts: 65
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Ja jag skrev in det precis sådär, men eftersom jag får fel på bsh-scriptet i Nexahome när jag försöker köra det där redan OCH jag får inte ut någon bild i min nexahome-mapp heller. Så jag antar att det är något knas med mina script.

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

Re: Tips: Att visa sensordata grafiskt

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

liverpoolarn wrote:Ja jag skrev in det precis sådär, men eftersom jag får fel på bsh-scriptet i Nexahome när jag försöker köra det där redan OCH jag får inte ut någon bild i min nexahome-mapp heller. Så jag antar att det är något knas med mina script.
Hämta den uppdaterade mypage.bsh samt ändra på de två raderna som skriver ut debug info (tag bort "//"):

Code: Select all

//echo(params);
-->

Code: Select all

echo(params);

Code: Select all

//echo(param);
-->

Code: Select all

echo(param);
Det är raderna fram till "if (temp) {" som är modifierade.

Försök därefter igen och kolla vad som skrivs ut i NexaHome Console fönster.

liverpoolarn
Posts: 65
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Hmm, vetefasen vad skillnaden var med nya mypage.bsh men nu funkar det. :)

Många tack för hjälpen.

/Henke

liverpoolarn
Posts: 65
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Jaha... skit!
Nu har jag tydligen lyckats krångla till det på något vis... det funkade fint tidigare när jag bara körde med en sensor. När jag sedan lade till de övriga id:na så slutade det att fungera. Och nu får jag inte ens det att fungera med en sensor igen. :-S

Nu får jag felet att param o params är null i mypage.bsh.

Skulle någon som har fått tre sensorer att fungera på kunna lägga upp både mypage.bsh o save_temp.bsh så jag kan se vad som är galet med mina script?

Tack på förhand.

liverpoolarn
Posts: 65
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Har upptäckt vart felet är och det uppkommer när jag försöker lägga till flera sensorer.

Min temp-fil ser ut så här:

Code: Select all

2012-11-28 20:26	21,2	  1,4
2012-11-28 20:29	21,2	  1,3
2012-11-28 20:30	21,2	  1,3
2012-11-28 20:35	21,2	  1,4
2012-11-28 20:36	21,3	  1,3
Det är tabbar mellan temp-värdena.

Det som blir fel verkar vara i toknizern och ger felmeddelande:
The script threw an exception (mypage.bsh): Sourced file: mypage.bsh : Typed variable declaration : Method Invocation st.nextToken : at Line: 72 : in file: mypage.bsh : st .nextToken ( )

Target exception: java.util.NoSuchElementException

Så med denna kod begriper jag inte hur någon annan kan ha fått igång detta, för det går ju definitivt inte använda samma mypage.bsh och save_temp.bsh som ligger i det här ärendet. Så snälla kan någon hjälpa en icke programmerings-kunnig nisse på traven här?

Post Reply