Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:datenmengen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
howto:datenmengen [2018/11/30 09:58] – [Aggregieren mit mySQL] wf_bitplan.comhowto:datenmengen [2018/12/10 17:34] – alte Version wiederhergestellt (2018/04/03 13:23) jau
Zeile 134: Zeile 134:
 ^ "sum" | Summe | zu verwenden bei Impulsen (S0) | ^ "sum" | Summe | zu verwenden bei Impulsen (S0) |
 ^ "none"| | keine Aggreagtion vornehmen, alle Daten des //channel// gehen an die Middleware | ^ "none"| | keine Aggreagtion vornehmen, alle Daten des //channel// gehen an die Middleware |
- 
-===== Aggregieren mit mySQL ===== 
-**Function channelSum** 
-Die folgende mySQL Hilfsfunktion berechnet die "Summe" von Werten für ein electric Meter über einen gegebenen Zeitraum.Dazu wird 
-der höchste und der niedrigste Wert gesucht. Es gilt sum=max - min für solche Zähler. 
-<code> 
--- 
--- Volkszähler mySQL function to sum up channel data for a given time period 
--- 
--- params 
---    channel_id  int   - the id of the channel 
---    from_time   date  - the time from which to sum up 
---    to_time     date  - the time to which to sum up 
--- 
-CREATE FUNCTION channelSum(channel_id INT, from_time DATE, to_time DATE)  
-  RETURNS DOUBLE 
-  DETERMINISTIC 
-BEGIN 
- DECLARE d_min double; 
- DECLARE d_max double; 
- SELECT min(d.value), max(d.value) INTO d_min,d_max 
- FROM data d  
- WHERE d.timestamp between unix_timestamp(from_time)*1000 and unix_timestamp(to_time)*1000 and d.channel_id=channel_id; 
- RETURN d_max-d_min; 
-END 
-</code> 
- 
-**Daily Tabelle** 
-Das folgende mySQL Script erzeugt eine "daily" Tabelle mit Tagessummen für Messwerte vom Typ "electric meter". 
-Im Beispiel werden die Werte für den Zeitraum 2014-01-01 bis 2018-11-30 aufsummiert. Für die Erzeugung von 7450 Einträgen hat diese Abfrage ca. 2700 Sekunden Zeit gebraucht.  
- 
-Als Basis diente eine SQL-Abfrage zur Erzeugung einer Liste von Tagen siehe: https://stackoverflow.com/a/53541150/1497139 
- 
- 
- 
-<code> 
-create table daily as 
-select  
-  dates.from_date,e.id,format(channelSum(e.id,dates.from_date,dates.to_date),0) as diff,e.type, p.value 
-from ( 
-select  
-  date_add('2014-01-01',interval row day)   as from_date,  
-  date_add('2014-01-01',interval row+1 day) as to_date    
-from ( 
-    SELECT @row := @row + 1 as row FROM  
-    (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t, 
-    (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t2,  
-    (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t3,  
-    (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) t4,  
-    (SELECT @row:=-1) r 
-) sequence 
-where date_add('2014-01-01',interval row+1 day) <= '2018-01-30') dates 
-join entities    
-join properties p on e.id=p.entity_id 
-join properties r on e.id=r.entity_id 
-where p.pkey='title' and r.pkey='resolution' 
-and e.type='electric meter'; 
-</code> 
  
 ===== Aufrüstung: Hardware ===== ===== Aufrüstung: Hardware =====
howto/datenmengen.txt · Zuletzt geändert: 2021/08/11 13:31 von mr.gosh