Nexahome / Raspberry PI

Moderators: hekj, Telldus

hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

Jag har gjort en NexaHome version enbart för Raspberry Pi:
1) Ladda hem http://nexahome.se/NexaHome_RPi_2.9.6.jar
2) Tag bort allt i Executable fältet i din nuvarande NexaHome och avsluta därefter programmet
3) Starta den nya versionen (2.9.6)

Själv har jag endast konstaterat att JNA kopplingen startar, har inte hunnit testa något mer så tala gärna om för mig om den fungerar och vad som står i Executable fältet.
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Telldus-Core, Telldus Center och Nexa Home på R-Pi

Post by hekj »

kornflakez wrote: NexaHome

Code: Select all

sudo apt-get install openjdk-6-jdk
wget http://nexahome.se/NexaHome_2.8.4.jar
(ersätt med senaste versionen om det finns en nyare)
Starta grafiska gränssnittet (startx) och dubbelklicka på .jar filen
Detta startar upp NexaHome. Jag har inte hunnit testa av detta så mycket än, men ett problem som jag verkar få är när jag går in under "web"-fliken.
Väljer jag en sida där så får jag upp ett 20-tal "loading" fönster som går att flytta men inte stänga ner. Men detta har jag inte hunnit felsöka på.
Om det är något ni har upplevt och hittat en lösning på så får ni gärna berätta hur.
Om du använder openjdk-7 instället för sexan så fungerar Web-fliken.

Code: Select all

sudo apt-get install openjdk-7-jdk
mkdir -p ~/nexahome
cd ~/nexahome
wget http://nexahome.se/NexaHome_RPi_2.9.6.jar
anderssan
Posts: 8
Joined: Fri Mar 17, 2023 9:45 am

Re: Nexahome / Raspberry PI

Post by anderssan »

Hej,

Jag lyckas inte få igång JNA kopplingen med 2.9.6 heller.. Testar att ta bort allt i executable och sen med 2.9.6 står det /usr/bin/tdtool som vanligt?

//Anders
Micke-Falo
Posts: 112
Joined: Fri Mar 17, 2023 9:45 am
Location: Sweden
Contact:

Re: Nexahome / Raspberry PI

Post by Micke-Falo »

Hur funkar det med att lägga till enheter/mottagare? Kan man göra det direkt i Nexahome?
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

Micke-Falo wrote:Hur funkar det med att lägga till enheter/mottagare? Kan man göra det direkt i Nexahome?
Nej, du ska använda TelldusCenter, hämta en bugfixad release.
http://nexahome.se/NexaHome_RPi_2.9.7.jar

Det är bara NexaHome device grupper du lägger till direkt i NexaHome.
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

anderssan wrote:Jag lyckas inte få igång JNA kopplingen med 2.9.6 heller.. Testar att ta bort allt i executable och sen med 2.9.6 står det /usr/bin/tdtool som vanligt?
Konstigt... det funkar ju för mig, vad kan det vara för skillnad?

Testa först med den senaste NH versionen.

Code: Select all

mkdir -p ~/nexahome
cd ~/nexahome
wget http://nexahome.se/NexaHome_RPi_2.9.7.jar
Om inte ovanstående fungerar kan du testa följande (som jag inte tycker borde behövas).

Code: Select all

sudo apt-get install libjna-java
anderssan
Posts: 8
Joined: Fri Mar 17, 2023 9:45 am

Re: Nexahome / Raspberry PI

Post by anderssan »

Med 2.9.7 så funkar det som det är tänkt!
Perfekt, tack för hjälpen!

//Anders
Mnemonic
Posts: 38
Joined: Fri Mar 17, 2023 9:45 am

Re: Nexahome / Raspberry PI

Post by Mnemonic »

hekj wrote: Testa först med den senaste NH versionen.

Code: Select all

mkdir -p ~/nexahome
cd ~/nexahome
wget http://nexahome.se/NexaHome_RPi_2.9.7.jar
Om inte ovanstående fungerar kan du testa följande (som jag inte tycker borde behövas).

Code: Select all

sudo apt-get install libjna-java
Jag håller på med Raspberry PI och JNA också med egna projekt men kan inte få JNA att fungera varken med openjdk7 eller nya java8 beta med hard float stöd. Har även installerat libjna-java på PIn men det lirar iaf inte och har nog bankat huvudet tillräckligt i väggen :banghead: Såg att du i ditt projekt har byggt in JNA direkt i JARen. Kanske skulle prova det också..

Edit: Kan konstatera att jag bankat huvudet i väggen ännu mer men får verkligen inte JNA att fungera i överhuvudtaget... Notera att detta gäller JNA överlag MEN detta är den enda forum post jag hittat som påvisar att JNA på RPI fungerar och skulle hemskt gärna få lite hjälp :D
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

Mnemonic wrote:Jag håller på med Raspberry PI och JNA också med egna projekt men kan inte få JNA att fungera varken med openjdk7 eller nya java8 beta med hard float stöd. Har även installerat libjna-java på PIn men det lirar iaf inte och har nog bankat huvudet tillräckligt i väggen :banghead: Såg att du i ditt projekt har byggt in JNA direkt i JARen. Kanske skulle prova det också..

Edit: Kan konstatera att jag bankat huvudet i väggen ännu mer men får verkligen inte JNA att fungera i överhuvudtaget... Notera att detta gäller JNA överlag MEN detta är den enda forum post jag hittat som påvisar att JNA på RPI fungerar och skulle hemskt gärna få lite hjälp :D
Vad är det för projekt och vad får du för slags felmeddelande?
erse
Posts: 8
Joined: Fri Mar 17, 2023 9:45 am

Re: Nexahome / Raspberry PI

Post by erse »

Jag lyckas inte få växling mellan Home/Away att köra Mode.bsh. Det går utmärkt att köra scriptet från Action, men vid växling av Mode sker inget. Det fungerade utmärkt innan jag flytta över till Pi och uppgraderade till 3.0.2. Tacksam för tips.
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

erse wrote:Jag lyckas inte få växling mellan Home/Away att köra Mode.bsh. Det går utmärkt att köra scriptet från Action, men vid växling av Mode sker inget. Det fungerade utmärkt innan jag flytta över till Pi och uppgraderade till 3.0.2. Tacksam för tips.
Testa att döpa om bsh filen så att namnet bara innehåller små bokstäver.

Mode.bsh --> mode.bsh
erse
Posts: 8
Joined: Fri Mar 17, 2023 9:45 am

Re: Nexahome / Raspberry PI

Post by erse »

Visst, en lite men nog så betydelsefull detaj. Tackar!
erse
Posts: 8
Joined: Fri Mar 17, 2023 9:45 am

Re: Nexahome / Raspberry PI

Post by erse »

Har problem med att få igång temp-grafen i Pi:n. Filen mySensorChart.png skapas inte/uppdateras inte vilket innebär att tempgrafen inte heller gör det.
I Consolen står det:
2013-03-17 21:06:08 The script threw an exception (mypage.bsh): Sourced file: mypage.bsh : Method Invocation SensorChart.addValue : at Line: 159 : in file: mypage.bsh : SensorChart .addValue ( gNdx , year , month , day , hour , minute , d )
Target exception: org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period Sat Mar 16 15:33:00 CET 2013 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method.

Urdrag ur: temp_2013-03-17.txt

Code: Select all

2013-03-17 00:00	-9,625	19,875
2013-03-17 00:00	-9,625	19,875
2013-03-17 00:01	-9,625	20
2013-03-17 00:02	-9,625	19,9375
2013-03-17 00:08	-9,5625	20
2013-03-17 00:13	-9,3125	20
2013-03-17 00:14	-9,375	20,0625
mypage.bsh

Code: Select all

car_check_device = "30";
car = false;
car_on = null;
car_minutes = null;
path = "/home/pi/nexahome/";
temp = false;
temp2 = 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;
   } else if (param.equals("mypage=temp2")) {
      temp2 = true;
   } else 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);
}
if (temp || temp2) {

   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(path + "jcommon-1.0.17.jar");
   addClassPath(path + "jfreechart-1.0.14.jar");
   addClassPath(path + ".");

   String[] temp_labels = { "In", "Out" };
   String[] temp_colors = { "black", "blue" };

   String[] temp2_labels = { "Sensor1", "Sensor2", "Sensor3" };
   String[] temp2_colors = { "black", "blue", "yellow" };

   int length = 640;
   int height = 480;
   String title = null;
   String output= null;
   String[] labels = null;
   String[] colors = null;
   special_name = null;

   if (temp) {
      title = "Temperature";
      labels = temp_labels;
      colors = temp_colors;
      special_name = "temp";
   } else if (temp2) {
      title = "Temperature 2";
      labels = temp2_labels;
      colors = temp2_colors;
      special_name = "temp2";
   }

   output = path + "mySensorChart_" + special_name + ".png";

   SensorChart.initGraph(labels.length, 1);
   for (int gNdx = 0; gNdx < labels.length; gNdx++) {
      txt = colors[gNdx].toLowerCase();
      if ("white".equals(txt)) {
         color = Color.white;
      } else if ("lightgray".equals(txt)) {
         color = Color.lightGray;
      } else if ("gray".equals(txt)) {
         color = Color.gray;
      } else if ("darkgray".equals(txt)) {
         color = Color.darkGray;
      } else if ("black".equals(txt)) {
         color = Color.black;
      } else if ("red".equals(txt)) {
         color = Color.red;
      } else if ("pink".equals(txt)) {
         color = Color.pink;
      } else if ("orange".equals(txt)) {
         color = Color.orange;
      } else if ("yellow".equals(txt)) {
         color = Color.yellow;
      } else if ("green".equals(txt)) {
         color = Color.green;
      } else if ("magenta".equals(txt)) {
         color = Color.magenta;
      } else if ("cyan".equals(txt)) {
         color = Color.cyan;
      } else{
         color = Color.blue;
      }
      SensorChart.initSeries(gNdx, labels[gNdx], color);
   }

   Calendar cal = Calendar.getInstance();
   int back = 1;
   cal.add(Calendar.DAY_OF_YEAR, -back);
   for (int dNdx = 0; dNdx <= back; dNdx++) {
      StringBuffer buf = new StringBuffer();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      File f = new File(path + special_name + "_" + 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("\n");
               }
            } 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 st1 = new StringTokenizer(buf.toString(), "\n");
         while (st1.hasMoreTokens()) {
            StringTokenizer st2 = new StringTokenizer(st1.nextToken().replaceAll("\t\t", "\t?\t"), "\t");
            if (st2.hasMoreTokens()) {
               String timestamp = st2.nextToken();
               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);
                  int gNdx = 0;
                  while (st2.hasMoreTokens() && gNdx < labels.length) {
                     String value = st2.nextToken().replace(',', '.');
                     if (!value.equals("?")) {
                        try {
                           double d = Double.parseDouble(value);
                           SensorChart.addValue(gNdx, year, month, day, hour, minute, d);
                           dataAdded = true;
                        } catch(NumberFormatException nfe) {
                           // ignore
                        }
                     }
                     gNdx = gNdx + 1;
                  }
               }
            }
         }
      }
      cal.add(Calendar.DAY_OF_YEAR, 1);
   }

   if (dataAdded) {
      SensorChart.process("", title, length, height, output);
   } else {
      echo("No data added to graph!");
   }
}
Tar tacksamt emot hjälp.
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

erse wrote:Har problem med att få igång temp-grafen i Pi:n. Filen mySensorChart.png skapas inte/uppdateras inte vilket innebär att tempgrafen inte heller gör det.
I Consolen står det:
2013-03-17 21:06:08 The script threw an exception (mypage.bsh): Sourced file: mypage.bsh : Method Invocation SensorChart.addValue : at Line: 159 : in file: mypage.bsh : SensorChart .addValue ( gNdx , year , month , day , hour , minute , d )
Target exception: org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period Sat Mar 16 15:33:00 CET 2013 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method.

Urdrag ur: temp_2013-03-17.txt

Code: Select all

2013-03-17 00:00	-9,625	19,875
2013-03-17 00:00	-9,625	19,875
2013-03-17 00:01	-9,625	20
2013-03-17 00:02	-9,625	19,9375
2013-03-17 00:08	-9,5625	20
2013-03-17 00:13	-9,3125	20
2013-03-17 00:14	-9,375	20,0625
mypage.bsh

Code: Select all

car_check_device = "30";
car = false;
car_on = null;
car_minutes = null;
path = "/home/pi/nexahome/";
temp = false;
temp2 = 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;
   } else if (param.equals("mypage=temp2")) {
      temp2 = true;
   } else 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);
}
if (temp || temp2) {

   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(path + "jcommon-1.0.17.jar");
   addClassPath(path + "jfreechart-1.0.14.jar");
   addClassPath(path + ".");

   String[] temp_labels = { "In", "Out" };
   String[] temp_colors = { "black", "blue" };

   String[] temp2_labels = { "Sensor1", "Sensor2", "Sensor3" };
   String[] temp2_colors = { "black", "blue", "yellow" };

   int length = 640;
   int height = 480;
   String title = null;
   String output= null;
   String[] labels = null;
   String[] colors = null;
   special_name = null;

   if (temp) {
      title = "Temperature";
      labels = temp_labels;
      colors = temp_colors;
      special_name = "temp";
   } else if (temp2) {
      title = "Temperature 2";
      labels = temp2_labels;
      colors = temp2_colors;
      special_name = "temp2";
   }

   output = path + "mySensorChart_" + special_name + ".png";

   SensorChart.initGraph(labels.length, 1);
   for (int gNdx = 0; gNdx < labels.length; gNdx++) {
      txt = colors[gNdx].toLowerCase();
      if ("white".equals(txt)) {
         color = Color.white;
      } else if ("lightgray".equals(txt)) {
         color = Color.lightGray;
      } else if ("gray".equals(txt)) {
         color = Color.gray;
      } else if ("darkgray".equals(txt)) {
         color = Color.darkGray;
      } else if ("black".equals(txt)) {
         color = Color.black;
      } else if ("red".equals(txt)) {
         color = Color.red;
      } else if ("pink".equals(txt)) {
         color = Color.pink;
      } else if ("orange".equals(txt)) {
         color = Color.orange;
      } else if ("yellow".equals(txt)) {
         color = Color.yellow;
      } else if ("green".equals(txt)) {
         color = Color.green;
      } else if ("magenta".equals(txt)) {
         color = Color.magenta;
      } else if ("cyan".equals(txt)) {
         color = Color.cyan;
      } else{
         color = Color.blue;
      }
      SensorChart.initSeries(gNdx, labels[gNdx], color);
   }

   Calendar cal = Calendar.getInstance();
   int back = 1;
   cal.add(Calendar.DAY_OF_YEAR, -back);
   for (int dNdx = 0; dNdx <= back; dNdx++) {
      StringBuffer buf = new StringBuffer();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      File f = new File(path + special_name + "_" + 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("\n");
               }
            } 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 st1 = new StringTokenizer(buf.toString(), "\n");
         while (st1.hasMoreTokens()) {
            StringTokenizer st2 = new StringTokenizer(st1.nextToken().replaceAll("\t\t", "\t?\t"), "\t");
            if (st2.hasMoreTokens()) {
               String timestamp = st2.nextToken();
               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);
                  int gNdx = 0;
                  while (st2.hasMoreTokens() && gNdx < labels.length) {
                     String value = st2.nextToken().replace(',', '.');
                     if (!value.equals("?")) {
                        try {
                           double d = Double.parseDouble(value);
                           SensorChart.addValue(gNdx, year, month, day, hour, minute, d);
                           dataAdded = true;
                        } catch(NumberFormatException nfe) {
                           // ignore
                        }
                     }
                     gNdx = gNdx + 1;
                  }
               }
            }
         }
      }
      cal.add(Calendar.DAY_OF_YEAR, 1);
   }

   if (dataAdded) {
      SensorChart.process("", title, length, height, output);
   } else {
      echo("No data added to graph!");
   }
}
Tar tacksamt emot hjälp.
Det snabbaste sättet att få igång grafen är helt enkelt att radera dubletter, dvs tag bort en av följande rader:

Code: Select all

2013-03-17 00:00   -9,625   19,875
2013-03-17 00:00   -9,625   19,875
Jag kan kolla i programkoden om det går att ersätta befintlig add metod med den föreslagna addOrUpdate().
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Nexahome / Raspberry PI

Post by hekj »

Har ersatt befintlig add() metod med den föreslagna addOrUpdate() så att det inte gör något om man har dubletter i sina temp data filer.

Följande programkod är uppdaterad:
http://nexahome.se/SensorChart.class
http://nexahome.se/SensorChart.java
Post Reply