Behöver lite hjälp att komma igång med "flot"

Generella Linux-frågor och frågor gällande Linuxmjukvara som saknar egen forumkategori skall postas i detta forum
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

En grej till; jag yxade till en statistikvy som kan hämta ut datat från alla tabellerna o ge en mer läsbar bild av dygnsvärdena som jag räknar fram varje midnatt:

Kod: Markera allt

create view statistik as select a.time, b.name "Sensor", c.name "Egenskap", d.name "Typ", a.value, c.enhet from data a, sensors b, properties c, aggregates d where a.aggregate > 2 and a.sensorid = b.sensorid and a.property = c.propertyid and b.sensorid = c.sensorid and a.aggregate = d.aggregate;

Kod: Markera allt

mysql> desc aggregates;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| aggregate | smallint(6) | NO   |     | NULL    |       |
| name      | varchar(10) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> select * from aggregates;
+-----------+----------+
| aggregate | name     |
+-----------+----------+
|         1 | Råvärde  |
|         2 | Medel 1h |
|         3 | Medel 1d |
|         4 | Min 1d   |
|         5 | Max 1d   |
+-----------+----------+

Kod: Markera allt

mysql> select * from statistik where time > '2013-09-04';
+---------------------+----------------------+---------------+----------+---------+-------+
| time                | Sensor               | Egenskap      | Typ      | value   | enhet |
+---------------------+----------------------+---------------+----------+---------+-------+
| 2013-09-05 00:00:00 | EDS0068 - korridor   | Temperatur    | Medel 1d | 23.1037 | degC  |
| 2013-09-04 06:30:03 | EDS0068 - korridor   | Temperatur    | Min 1d   | 22.3125 | degC  |
| 2013-09-04 18:08:03 | EDS0068 - korridor   | Temperatur    | Max 1d   |  24.375 | degC  |
| 2013-09-05 00:00:00 | EDS0068 - korridor   | Luftfuktighet | Medel 1d | 45.4384 | %     |
| 2013-09-04 18:57:03 | EDS0068 - korridor   | Luftfuktighet | Min 1d   |      42 | %     |
| 2013-09-04 06:48:04 | EDS0068 - korridor   | Luftfuktighet | Max 1d   |      49 | %     |
| 2013-09-05 00:00:00 | EDS0068 - korridor   | Ljusstyrka    | Medel 1d | 28.8639 | LUX   |
| 2013-09-04 01:43:04 | EDS0068 - korridor   | Ljusstyrka    | Min 1d   |       0 | LUX   |
| 2013-09-04 16:08:03 | EDS0068 - korridor   | Ljusstyrka    | Max 1d   |     114 | LUX   |
| 2013-09-05 00:00:00 | EDS0068 - korridor   | Lufttryck     | Medel 1d | 1015.64 | hPa   |
| 2013-09-04 00:00:03 | EDS0068 - korridor   | Lufttryck     | Min 1d   | 1014.66 | hPa   |
| 2013-09-04 10:02:04 | EDS0068 - korridor   | Lufttryck     | Max 1d   | 1016.69 | hPa   |
| 2013-09-05 00:00:00 | Radiatortemp - ut    | Temp          | Medel 1d | 23.4916 | degC  |
| 2013-09-04 23:24:03 | Radiatortemp - ut    | Temp          | Min 1d   |  20.125 | degC  |
| 2013-09-04 06:58:03 | Radiatortemp - ut    | Temp          | Max 1d   |   28.75 | degC  |
| 2013-09-05 00:00:00 | Fjärrrvärmetemp - in | Temp          | Medel 1d | 46.5553 | degC  |
| 2013-09-04 21:31:04 | Fjärrrvärmetemp - in | Temp          | Min 1d   |    29.5 | degC  |
| 2013-09-04 06:20:03 | Fjärrrvärmetemp - in | Temp          | Max 1d   | 56.6875 | degC  |
+---------------------+----------------------+---------------+----------+---------+-------+
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

Testade att dra ut minutvärden (c:a 5 dygn) - grafen tar då c:a 10 sekunder att få upp och varje kurvas data blir c:a 180 kb jämför med c:a 3 kb för timvärden.

Visst, man får ju en mer äkta signal med hysteres - men det blir ingen rolig sida att ladda i sin browser.
Bilagor
Med minutvärden
Med minutvärden
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

Här gick jag tillbaka till timmedelvärden, men jag har även petat in dygnsmin/dygnsmax.

Observera att Min-Max punkterna är loggade med "äkta" tid, dvs när på dygnet dom inföll medan timvärdet är lagrat på hel timme. Men det kan ju se lite lustigt ut när två maxvärden följer på varandra utan ett mellanliggande minvärde (t.ex. luftfuktigheten den 1 september)

Kod: Markera allt

mysql> select time, value, aggregate from data where sensorid=1 and property=2 and aggregate>3;
+---------------------+---------+-----------+
| time                | value   | aggregate |
+---------------------+---------+-----------+
| 2013-08-31 17:36:04 | 54.3125 |         4 |
| 2013-08-31 20:04:04 |   62.25 |         5 |
| 2013-09-01 16:59:03 |   38.25 |         4 |
| 2013-09-01 00:00:03 |      60 |         5 |
| 2013-09-02 18:36:03 |  40.875 |         4 |
| 2013-09-02 07:01:04 | 49.0625 |         5 |
| 2013-09-03 18:12:03 | 40.9375 |         4 |
| 2013-09-03 19:54:03 | 54.6875 |         5 |
| 2013-09-04 18:57:03 |      42 |         4 |
| 2013-09-04 06:48:04 |      49 |         5 |
| 2013-09-05 19:08:03 | 43.8125 |         4 |
| 2013-09-05 19:48:03 | 51.3125 |         5 |
+---------------------+---------+-----------+
Bilagor
Hourly values with min max.PNG
Om traktorn stjälper; håll i ratten, hoppa ej!
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av ekdahl »

Kul att du fått till det så bra. Du har ju blivit en fena på det där :)
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

Tog Flot till nya höjder idag - ångrar inte en sekund att jag föll för Flot och att jag valde att stoppa datat i MySQL vilket gör att man kan ta sig många friheter när man manipulerar och analyserar sitt data! :D

Dock tjänar man nog igen på att läsa igenom Flot-API specen en gång extra så att man kan undvika nybörjarmisstagen - spenderade en inte ignorerbar mängd tid på att försöka få in labels på mina bargraphs via "input data" - men när jag läste igenom specen en gång till inser jag att alla X o Y värden måste vara siffror och att man får ordna med rubriker med "tickformatters"... :?

Dom talar om att införa tidstariff på elen där jag bor och med lite statistik från elmätaren kan man få en fingervisning om hur många kilowattimmar man gör av på ett visst dygn eller timme och kan därmed räkna lite på vad man skulle ev. tjäna på att tvätta o diska på natten. I mitt fall verkar det inte spela så stor roll då förbrukningen mest påverkas av "vaken & hemma" vs "sover alt. inte hemma".

Nedan lite exempel. Med aggregate styr jag om jag vill ha momentanvärden eller statistiska (min, max, medel) värden. Period är intervallet datapunkterna ligger lagrade på. Med s.k. stored procedures räknar jag fram min/max/medel på timme, dygn, vecko o månadsbasis utifrån rådatat - det gör det snabbt att hämta ut t.ex. medelvärden. Dessutom kan man radera rådata ifall man tycker att databasen blir för stor eller långsam.

T.ex. verkar det rätt värdelöst att spara minutupplösning på temperaturer då signalen på minutnivå har rätt mycket hysteres och blir inte så snyggt som kurvor om man inte först lågpassfiltrerar signalen något.

Kod: Markera allt

mysql> select dayofweek(time), sum(value) from data where sensorid=4 and property=1 and aggregate=11 and period=2 group by dayofweek(time);

+-----------------+---------------+--------------------+
| dayofweek(time) | dayname(time) | sum(value)         |
+-----------------+---------------+--------------------+
|               1 | Sunday        |  65.66099986433983 |
|               2 | Monday        |   65.8529999256134 |
|               3 | Tuesday       |  55.07700003683567 |
|               4 | Wednesday     |  50.57499997317791 |
|               5 | Thursday      |  54.25999981164932 |
|               6 | Friday        | 50.214000165462494 |
|               7 | Saturday      |  53.69500009715557 |
+-----------------+---------------+--------------------+


mysql> SELECT date_format(time,'%H'), sum(value) from data where sensorid=4 and property=1 and aggregate=11 and period=2 group by date_format(time,'%H');
+------------------------+--------------------+
| date_format(time,'%H') | sum(value)         |
+------------------------+--------------------+
| 00                     | 19.279000103473663 |
| 01                     | 13.234999984502792 |
| 02                     | 10.871999979019165 |
| 03                     | 10.376000046730042 |
| 04                     | 10.310999989509583 |
| 05                     | 10.334999978542328 |
| 06                     | 10.570000022649765 |
| 07                     | 11.921000003814697 |
| 08                     | 12.269000053405762 |
| 09                     | 12.854000061750412 |
| 10                     | 12.668000012636185 |
| 11                     |  14.44200000166893 |
| 12                     | 16.497999891638756 |
| 13                     |  14.73999997973442 |
| 14                     | 14.042999938130379 |
| 15                     | 13.645999938249588 |
| 16                     | 12.102000027894974 |
| 17                     | 14.099999964237213 |
| 18                     | 27.964999973773956 |
| 19                     |  24.58100026845932 |
| 20                     | 24.966000199317932 |
| 21                     |  28.26899990439415 |
| 22                     | 27.795999720692635 |
| 23                     | 27.496999830007553 |
+------------------------+--------------------+
Bilagor
Total elförbrukning, per veckodag
Total elförbrukning, per veckodag
Total elförbrukning, per timme
Total elförbrukning, per timme
Om traktorn stjälper; håll i ratten, hoppa ej!
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av ekdahl »

Snyggt!
Jag får inte ihop värdena riktigt.. Du har ca 50-65 kWh/dygn i ena grafen, sen har du 10-30 kWh/h i den andra. Känns som att totalen borde bli större :)
Edit: Eller egentligen så tror jag att det är fel en faktor tio på timvärdena.
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

ekdahl skrev:Snyggt!
Jag får inte ihop värdena riktigt.. Du har ca 50-65 kWh/dygn i ena grafen, sen har du 10-30 kWh/h i den andra. Känns som att totalen borde bli större :)
Edit: Eller egentligen så tror jag att det är fel en faktor tio på timvärdena.
Första grafen är total förbrukning, utslagen per veckodag.
Grovt överslagssnitt ger c:a 55 kWh/dag = 385 kWh om man summerar alla måndagars, tisdagars, osv. förbrukning.

Andra grafen är total förbrukning, utslagen per timme på dygnet.
Grovt överslagssnitt c:a 17 kHw/timme = 408 kwH om man summerar alla timmars förbrukning.

Men t.ex. så tror jag att det som visas som "måndag" egentligen är värden från söndan före. Jag tidsstämplar nämligen de aggregerade (min/max/medel/summa) värdena på hel timme, dag, vecka o månad efter att de räknats fram. Lätt att justera i arrayen av data jag stoppar in i Flot.

Har oxo funderat på om man vill presentera "grand total" eller bara "senaste månad, vecka, etc" när man tittar på dags resp timförbrukning.

Nästa pryl att rota med är att göra graferna mer interaktiva, dvs så man kan ändra tidsomfattning och signalinnehåll från menyer inuti graferna. Har heller inte lyckats panorera/zooma från iPhone/iPad - något som fungerar från Internet Explorer.

/f
Om traktorn stjälper; håll i ratten, hoppa ej!
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av ekdahl »

flyvert skrev:Första grafen är total förbrukning, utslagen per veckodag.
Grovt överslagssnitt ger c:a 55 kWh/dag = 385 kWh om man summerar alla måndagars, tisdagars, osv. förbrukning.

Andra grafen är total förbrukning, utslagen per timme på dygnet.
Grovt överslagssnitt c:a 17 kHw/timme = 408 kwH om man summerar alla timmars förbrukning.
Aha, jag trodde det var senaste vecka och dygn.
Användarvisningsbild
Plutonium
Moderator
Inlägg: 1245
Blev medlem: 04 jan 2008, 02:34
Ort: Nossebro
Kontakt:

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av Plutonium »

Föredömligt Flyvert!
Sitter och kopierar ditt arbete rakt av för att ha en grund att labba på och slippa uppfinna hjulet igen.
Men det är vid databas procedure jag nu har kört fast lite. Hur lägger jag in detta?

Kod: Markera allt

USE onewire
DROP PROCEDURE IF EXISTS updatehourdata;
DELIMITER //

CREATE PROCEDURE updatehourdata()
BEGIN
  DECLARE thissensor SMALLINT;
  DECLARE thisproperty SMALLINT;
  DECLARE thistime TIMESTAMP;
  DECLARE thisvalue FLOAT;

  DECLARE sensorcur   CURSOR FOR select sensorid from sensors order by sensorid;
  DECLARE propertycur CURSOR FOR select propertyid from properties where sensorid = thissensor order by propertyid;
  DECLARE EXIT HANDLER FOR NOT FOUND CLOSE sensorcur;

  OPEN sensorcur;
  REPEAT
    FETCH sensorcur INTO thissensor;
    BEGIN
      DECLARE EXIT HANDLER FOR NOT FOUND CLOSE propertycur;
      OPEN propertycur;
      REPEAT
        FETCH propertycur INTO thisproperty;
        -- Find most recent hourvalue
        SELECT MAX(time) + interval 1 hour  INTO thistime FROM data WHERE sensorid=thissensor AND property=thisproperty AND aggregate = 2;
        IF ISNULL(thistime) THEN
          -- No previous hourvalue found -> fallback on oldest minutevalue
          SELECT min(time) + interval 1 hour INTO thistime FROM data WHERE sensorid=thissensor AND property=thisproperty AND aggregate = 1;
        END IF;
        -- Check if still NULL -> there is no data available -> do not proceed with calculating any averages.
        IF NOT ISNULL(thistime) THEN
          -- Shave off any minutes or seconds
          SET thistime = DATE_SUB(thistime, interval minute(thistime) minute);
          SET thistime = DATE_SUB(thistime, interval second(thistime) second);
          -- Thistime does now point to next hourly average to compute
          WHILE thistime < NOW() DO
            -- Calculate an hourly average for this sensor, property and time frame.
            SELECT AVG(value) INTO thisvalue FROM data WHERE sensorid=thissensor AND property=thisproperty AND aggregate = 1
              AND time >= thistime - interval 1 hour AND time < thistime;
            -- Update data table
            INSERT INTO data ( time, sensorid, property, value, aggregate ) VALUES ( thistime, thissensor, thisproperty, thisvalue, 2 );
            -- Increment hour
            SET thistime = DATE_ADD(thistime, interval 1 hour);
          END WHILE;
        END IF;
      UNTIL false END REPEAT;
      CLOSE propertycur;
    END;
  UNTIL false END REPEAT;
  CLOSE sensorcur;
END //
http://essunga.org
Moderator - Temperatur.nu
Användarvisningsbild
Plutonium
Moderator
Inlägg: 1245
Blev medlem: 04 jan 2008, 02:34
Ort: Nossebro
Kontakt:

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av Plutonium »

Besvarar mig själv.

Lägg koden i en .sql fil och sen i terminalen kör man:

Kod: Markera allt

mysql -uanvändarnamn -plösenord -v onewire < function.sql 
Och i phpmyadmin så ploppar den upp under databaser ;)
http://essunga.org
Moderator - Temperatur.nu
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

Plutonium skrev: Men det är vid databas procedure jag nu har kört fast lite.
Kul att du provar på - jag blev "frälst" på MySQL efter bara några dagar!

Det har runnit lite vatten under broarna sedan jag la ut den koden - borde nog göra en ny postning nån dag med de senaste versionerna:

- Har upptäckt en del fel vid sk NULL insert o lagt in hantering av att inget värde lyckades räknas fram o gå vidare (idag bonkar proceduren ur vid första fel...)
- Sommar/vintertidsskiften har ingen hantering (borde lagra data i UTC o lägga på lokaltidsdiff vid utläsning)
- Har kommit på bättre indexdefinitioner som snabbar upp beräkningarna
- Har fixat lite med aggregate 10+ koden (som räknar perioddelta istf medelvärde, tex för elmätare, regnmätare, vindmätare som levererar ett räknarvärde istf råvärde)

Borde skriva en kortare beskrivning hur allt hänger ihop (tabeller, procedurer, Flot, etc) - men med lite klurande går det nog att först...

Allt data i en tabell för enkel access från JavaScript (o framtida korrelationer mellan sensordata)

Men det finns annat att lägga tid på... :-/
Om traktorn stjälper; håll i ratten, hoppa ej!
Användarvisningsbild
Plutonium
Moderator
Inlägg: 1245
Blev medlem: 04 jan 2008, 02:34
Ort: Nossebro
Kontakt:

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av Plutonium »

Måste ju lära mig något nytt, fast det går väldigt trögt nu.
Jag har suttit nu några kvällar för att förstå mig på procedurerna som du bidrar med här, men det är svårt. Jag förstår vad koden gör, men inte alla variablar och funktioner.

Jag har en två databaser som är väldigt enkla.
sensor_name, value, time (ungefär som din data databas)

Och en temperature databas som är likadan som ovan, fast där det sorterade temperaturen är tänkt att landa in, precis som du har det.

Jag vet inte riktigt hur jag ska börja riktigt. Nått du kanske kan lotsa mig till en lösning?
http://essunga.org
Moderator - Temperatur.nu
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

Plutonium skrev:Nått du kanske kan lotsa mig till en lösning?
Data-tabellens kolumner:
Sensorid: unikt id för varje sensor
Propertyid: id (löpnummer) för properties per sensor; tex en EDS0068 har fyra: temp, tryck, ljus och fuktighet
Aggregate: id för datapunkten (1=råvärde, 2=medelvärde,3=minvärde, ..., 10=räknarvärde, 11=delta (skillnad mellan två aggregate 10)
Period: tidsintervall (1=minut, 2=timme, 3=dag, 4=vecka, 5=månad,...)

Insert får man göra regelbundet mha nått script som läser sensorerna o gör insert i "data".
95% av mina sensorer läser jag varje minut o lagrar med aggregate=1 och period=1.

Att rita en månadstrend av en temperaturgivare och med minutdata är oftast inte praktiskt pga hysteresen och det stora antalet punkter.

Här kommer updatehourdata o de andra procedurerna in.
Dessa räknar fram medelvärden (aggregate=2) o lagrar dessa med period=2, osv.
Även min/max-värden räknas fram av dygn, vecko o månadscripten.

Tabellerna sensors och properties krävs för att procedurerna skall "veta vad dom skall göra"

Alla skript körs regelbundet med cron.

Så vad är vitsen med att använda id, aggregate & period då?

Att skapa egna tabeller för varje sensor är kanske enklare att förstå rent konceptuellt, men när du väl vill ha ut datat börjar man vinna på det sätt jag lagt upp det. Ett o samma PHP-script kan användas till de flesta trender - att byta sensor gör man genom att ändra bara en enda siffra i javascriptet, samma sak för intervallet man vill ha data på, mm.

Tror att det finns vinster när man så småningom vill börja korrelera datat; tex hur mycket mer drar jag ur värmeväxlaren beroende på vindhastighet o riktning om temperaturen anses vara konstant?

/f
Om traktorn stjälper; håll i ratten, hoppa ej!
Användarvisningsbild
Plutonium
Moderator
Inlägg: 1245
Blev medlem: 04 jan 2008, 02:34
Ort: Nossebro
Kontakt:

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av Plutonium »

Nu börjar det klarna en del för mig, låter inte alls dumt med behandlingen av data.. Tackar!
Det finns ingen möjlighet att åter igen lägga ut databasstrukturen igen, då det verkar skilja lite från det äldre inlägget. Samt låta några rader data vara kvar. Det vill säga, exportera en del av din onewire-databas?
http://essunga.org
Moderator - Temperatur.nu
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Behöver lite hjälp att komma igång med "flot"

Inlägg av flyvert »

Plutonium skrev:Nu börjar det klarna en del för mig, låter inte alls dumt med behandlingen av data.. Tackar!
Det finns ingen möjlighet att åter igen lägga ut databasstrukturen igen, då det verkar skilja lite från det äldre inlägget. Samt låta några rader data vara kvar. Det vill säga, exportera en del av din onewire-databas?
Inga problem - bara tiden... har bara några järn extra i elden just nu förutom barnen, villan, Volvon o allt det där...
Skall ta tag i detta någon eller några dagar framöver!

Har även fått några LCD + drivers levererat från m.nu som även de skall kopplas in på bussen - måste bara ta tag i och montera en klensäkring på USB-kabeln innan jag byter spänningsinjektionsmetod från "RPi onboard" till "extern" på busmastern (dvs dra JP1-bygeln). Har läst att en del haft problem med underspänning och störningar när de adderat LCD till ett tidigare fullt funktionellt 1-wire nät.

Sen håller jag på att förverkliga en 10-års dröm - hemmabio! Ljudabsorbtion, beräkning/kompensering av ljudreflexer, ramspänd duk, 6.1 ljud, full-HD projektor av rang, kylskåp, mm, allt skall på plats innan premiären hade jag tänkt.
Sen måste rätt rulle röstas fram;

1. Pulp Fiction
2. Das Boot Director's Cut + remastered
3. Master and Commander
4. Saving Private Ryan
Om traktorn stjälper; håll i ratten, hoppa ej!
Skriv svar