Tips: Att visa sensordata grafiskt

Moderators: hekj, Telldus

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

magnusp wrote:Nu har jag också fått rätt på temp-graf och fukt-graf.
Har dock en undran, nu får man bara upp gårdagen samt dagens datum, går det att få upp t ex för hela året eller kan man iaf ställa hur många dagar grafen skall gälla?.
Variabel "back" styr hur många dagar som syns i grafen.

mypage.bsh

Code: Select all

   int back = 1;
Du kan också modifiera följande variabler.

Code: Select all

   int length = 900;
   int height = 600;
Ändra inte för mycket till en början, grafen kan bli ihoptryckt och ta väldigt lång tid att generera...

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Visa labels

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

Hej igen!

Har en fundering om deklarationerna:

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

är till för att visa en förklaring bredvid diagrammbilden t.ex. att den röda linjen är för "Värmepump".
Annars finns det ett enkelt sätt att få till detta på?

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

Re: Visa labels

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

Mullemeck wrote: Har en fundering om deklarationerna:

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

är till för att visa en förklaring bredvid diagrammbilden t.ex. att den röda linjen är för "Värmepump".
Annars finns det ett enkelt sätt att få till detta på?
Nu är det länge sedan jag kollade på jfree, SensorChart koden finns på min hemsida.
http://nexahome.se/SensorChart.java

Här kan du hitta mer info.
http://www.jfree.org/forum/viewforum.php?f=3

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Ok får kika på detta och återkomma med tips vad jag hittar på!

En annan fundering är om det inte går att visa egna bilder från hemsidorna som man lägger i samma mapp som html-filerna?
Anledningen är att jag vill snabba upp visningen istället för att använda mypage.bsh. Har modifierat din kod lite till att den
istället varje timme skapar mySensorChart.png och lägger den i "Web"-mappen där mina html-filer ligger.
Undrar även om det går att länka .txt - filer från NexaHome-servern? Snyggt hade kunnat vara t.ex. ovanför sin egna graf att
visa aktuell ute-temp i digitalt format.
Använder Raspberry Pi för övrigt så jag får koda HTML-filen manuellt.

Tackar på förhand!

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

Mullemeck wrote:En annan fundering är om det inte går att visa egna bilder från hemsidorna som man lägger i samma mapp som html-filerna?
Anledningen är att jag vill snabba upp visningen istället för att använda mypage.bsh. Har modifierat din kod lite till att den
istället varje timme skapar mySensorChart.png och lägger den i "Web"-mappen där mina html-filer ligger.
Undrar även om det går att länka .txt - filer från NexaHome-servern? Snyggt hade kunnat vara t.ex. ovanför sin egna graf att
visa aktuell ute-temp i digitalt format.
Nedanstående kod läser upp innehållet från en textfil, värdet hålls i minnet 30 sekunder (läses på nytt från disk om en förfrågan sker efter 30 s).

Code: Select all

<!-- dynamic="last" url="file:///c:/apps/nexahome/temperatur.txt" keep="30" -->

<div style="position: absolute; top: 117px; left: 50px">
Temp: #DYNAMIC#last#ºC
</div>
Om du har en enhet definierad som SENSOR så kan du få upp dess värde på websidan genom att ange dess namn.

Code: Select all

<div style="position: absolute; top: 135px; left: 420px">
Ute: #SENSOR#Temp Sth#
</div>
SensorChart

Code: Select all

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

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

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Tackar för snabbt svar!

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Hej!

Jag får inte denna kodsnutten att fungera:

Code: Select all

<div style="position: absolute; top: 135px; left: 420px">
Ute: #SENSOR#Temp Sth#
</div>
Kan du ge ett exempel på hur man får in sin definierade sensor?

Tack på förhand

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

Mullemeck wrote:Jag får inte denna kodsnutten att fungera:

Code: Select all

<div style="position: absolute; top: 135px; left: 420px">
Ute: #SENSOR#Temp Sth#
</div>
Felsökning:
1) är din device definierad som en sensor i NexaHome, "Members/Type = SENSOR"
2) har sensorn "rätt" namn, "Name = Temp Sth"

Skrivs det ut något på websidan efter texten "Ute: " ?

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

hekj wrote:
Mullemeck wrote:Jag får inte denna kodsnutten att fungera:

Code: Select all

<div style="position: absolute; top: 135px; left: 420px">
Ute: #SENSOR#Temp Sth#
</div>
Felsökning:
1) är din device definierad som en sensor i NexaHome, "Members/Type = SENSOR"
2) har sensorn "rätt" namn, "Name = Temp Sth"

Skrivs det ut något på websidan efter texten "Ute: " ?

Hej igen!

Har haft lite sommaruppehall. Ja det funkar bra nu - det var ju bara att skriva exakt som sensorn ar dopt i nexahome!!
Har en ny delikat fundering: Jag lyckas inte ladda in tre olika grafer i webblasaren utan det blir den sista grafen som visas i alla tre bilderna?
Min html-kod:

<!-- dynamic="chart" url="file:///home/pi/Telldus/Logging/1.png" keep="10" -->
<div style="position: absolute; top: 185px; left: 15x">
<img src="#DYNAMIC#chart#" border="1" />
</div>

<!-- dynamic="chart" url="file:///home/pi/Telldus/Logging/2.png" keep="20" -->
<div style="position: absolute; top: 670px; left: 15x">
<img src="#DYNAMIC#chart#" border="1" />
</div>

<!-- dynamic="chart" url="file:///home/pi/Telldus/Logging/3.png" keep="30" -->
<div style="position: absolute; top: 1155px; left: 15x">
<img src="#DYNAMIC#chart#" border="1" />
</div>

Finns det nagon losning pa detta?

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

Mullemeck wrote:Har en ny delikat fundering: Jag lyckas inte ladda in tre olika grafer i webblasaren utan det blir den sista grafen som visas i alla tre bilderna?
Min html-kod:

Code: Select all

<!-- dynamic="chart" url="file:///home/pi/Telldus/Logging/1.png" keep="10" -->
<div style="position: absolute; top: 185px; left: 15x">
<img src="#DYNAMIC#chart#" border="1" />
</div>

<!-- dynamic="chart" url="file:///home/pi/Telldus/Logging/2.png" keep="20" -->
<div style="position: absolute; top: 670px; left: 15x">
<img src="#DYNAMIC#chart#" border="1" />
</div>

<!-- dynamic="chart" url="file:///home/pi/Telldus/Logging/3.png" keep="30" -->
<div style="position: absolute; top: 1155px; left: 15x">
<img src="#DYNAMIC#chart#" border="1" />
</div>
Finns det någon lösning på detta?
Variabeln dynamic används enbart som ett handtag, skriv ett unikt namn för varje specifikation.

Code: Select all

<!-- dynamic="chart1" url="file:///home/pi/Telldus/Logging/1.png" keep="10" -->
<div style="position: absolute; top: 185px; left: 15x">
<img src="#DYNAMIC#chart1#" border="1" />
</div>

<!-- dynamic="chart2" url="file:///home/pi/Telldus/Logging/2.png" keep="20" -->
<div style="position: absolute; top: 670px; left: 15x">
<img src="#DYNAMIC#chart2#" border="1" />
</div>

<!-- dynamic="chart3" url="file:///home/pi/Telldus/Logging/3.png" keep="30" -->
<div style="position: absolute; top: 1155px; left: 15x">
<img src="#DYNAMIC#chart3#" border="1" />
</div>

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Tack som vanligt för snabbt och fungerade svar!

Pee
Posts: 41
Joined: Thu Jan 18, 2018 11:08 am

Re: Visa labels

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

hekj wrote:
Mullemeck wrote: Har en fundering om deklarationerna:

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

är till för att visa en förklaring bredvid diagrammbilden t.ex. att den röda linjen är för "Värmepump".
Annars finns det ett enkelt sätt att få till detta på?
Nu är det länge sedan jag kollade på jfree, SensorChart koden finns på min hemsida.
http://nexahome.se/SensorChart.java

Här kan du hitta mer info.
http://www.jfree.org/forum/viewforum.php?f=3
Har lagt in flera sensorer i samma diagram så det skulle vara snyggt att få till "legends".
Jag har kollat lite på jfree.org/forum mm. För mig verkar det som det behövs en ändring i SensorChart.java. Det är på ungefär rad 85 där det står
JFreeChart jfreechart = ChartFactory.createXYLineChart(title, "X", yAxisLabel, dataset,
PlotOrientation.VERTICAL, false, false, false);
bör ändras till
......true, false, false);
för att visa förklaringarna men jag förstår inte hur man får in "String[] labels = { "Värmepump", "Inne", "Ute" };" .

Är det någon som fixat det eller vill hjälpa till?

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Visa labels

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

Pee wrote:
hekj wrote:
Mullemeck wrote: Har en fundering om deklarationerna:

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

är till för att visa en förklaring bredvid diagrammbilden t.ex. att den röda linjen är för "Värmepump".
Annars finns det ett enkelt sätt att få till detta på?
Nu är det länge sedan jag kollade på jfree, SensorChart koden finns på min hemsida.
http://nexahome.se/SensorChart.java

Här kan du hitta mer info.
http://www.jfree.org/forum/viewforum.php?f=3
Har lagt in flera sensorer i samma diagram så det skulle vara snyggt att få till "legends".
Jag har kollat lite på jfree.org/forum mm. För mig verkar det som det behövs en ändring i SensorChart.java. Det är på ungefär rad 85 där det står
JFreeChart jfreechart = ChartFactory.createXYLineChart(title, "X", yAxisLabel, dataset,
PlotOrientation.VERTICAL, false, false, false);
bör ändras till
......true, false, false);
för att visa förklaringarna men jag förstår inte hur man får in "String[] labels = { "Värmepump", "Inne", "Ute" };" .

Är det någon som fixat det eller vill hjälpa till?
Jag loste det genom att gora en graf for varje kurva istallet, dels blir det enklare att folja trender sen blir upplosningen mycket battre da y-varderna blir battre skalade till aktuell trend.
Kollade dock lite pa jfreechart men fick aldrig till det, dock skulle en enklare losning vara att gora legends mha html-kod ovanfor grafen istallet.

Mullemeck
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Tips: Att visa sensordata grafiskt

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

Jag undrar om det finns nagon grans for hur manga "timers" man kan ha i start.bsh eller om det gar att optimera?

Min ser ut sahar:
startTimer("1", 180);
startTimer("2", 180);
startTimer("3", 180);
startTimer("4", 180);
startTimer("5", 180);
startTimer("6", 2000);
startTimer("7", 2000);
startTimer("1_graf", 600);
startTimer("2_graf", 600);
startTimer("3_graf", 600);
startTimer("4_graf", 600);
startTimer("5_graf", 600);
startTimer("6_graf", 600);
startTimer("7_graf", 600);
Jag har markt att graferna skapas bara ibland men temperaturloggingen fungerar fint hela tiden. Jag har tagit bort i slutet av varje bsh-fil att en ny timer skall starta for att inte fa bsh-busy.

En del av min html ser ut sa har:
<!-- dynamic="chart6" url="file:///home/pi/Telldus/Logging/6.png" keep="30" -->
<div style="position: absolute; top: 2610px; left: 15x">
<img src="#DYNAMIC#chart6#" border="1" />
</div>

<!-- dynamic="chart7" url="file:///home/pi/Telldus/Logging/7.png" keep="30" -->
<div style="position: absolute; top: 3095px; left: 15x">
<img src="#DYNAMIC#chart7#" border="1" />
</div>
Har funderar jag pa "keep=" - funktionen, ar det battre att ha en langre tid om man har manga grafer att ladda?


P.s ursakta tangentbordslayoten :D

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

Re: Visa labels

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

Pee wrote:
hekj wrote:
Mullemeck wrote: Har en fundering om deklarationerna:

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

är till för att visa en förklaring bredvid diagrammbilden t.ex. att den röda linjen är för "Värmepump".
Annars finns det ett enkelt sätt att få till detta på?
Nu är det länge sedan jag kollade på jfree, SensorChart koden finns på min hemsida.
http://nexahome.se/SensorChart.java

Här kan du hitta mer info.
http://www.jfree.org/forum/viewforum.php?f=3
Har lagt in flera sensorer i samma diagram så det skulle vara snyggt att få till "legends".
Jag har kollat lite på jfree.org/forum mm. För mig verkar det som det behövs en ändring i SensorChart.java. Det är på ungefär rad 85 där det står
JFreeChart jfreechart = ChartFactory.createXYLineChart(title, "X", yAxisLabel, dataset,
PlotOrientation.VERTICAL, false, false, false);
bör ändras till
......true, false, false);
för att visa förklaringarna men jag förstår inte hur man får in "String[] labels = { "Värmepump", "Inne", "Ute" };" .

Är det någon som fixat det eller vill hjälpa till?
Jag har uppdaterat SensorChart, har lagt till legend, hämta java och class filerna på nytt samt testa följande:

SensorChart.initGraph(labels.length, tickUnitSize);
-->
SensorChart.initGraph(labels.length, tickUnitSize, true);

Har själv inte testat, dvs om det inte funkar så vet du varför... :oops:

Post Reply