Die lokale Datenbank ist der zentrale Speicher der Messwerte und Konfigurationsparameter. Ab Webinterface – Version 8.45 können über die Weboberfläche SQL-Befehle oder -scripte ablaufen.

! Vorsicht: Bei unsachgemäßer Handhabung kann es zu Datenverlust kommen.

Auf diese Art und Weise ist es möglich, die Datenbank im Notfall zusätzlich zu berselect table_schema,round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables group by table_schema;einigen, Speicherplatz freizugeben oder aber spezielle Auswertungen mit dem Datenbestand durchzuführen.

Per Formular können einzelne SQL-Befehle oder auch mehrzeilige Scripts ausgeführt werden:

URL: exec_sql.php

Energiemonitor: SQL Befehl

 

 

 

 

 

 

 

Weitere Beispiele folgen an dieser Stelle.

Leistungsstundenwerte des Tages

SELECT DATE_FORMAT(DATE_ADD(FROM_UNIXTIME((`power`.`timestamp` / 1000)), Interval 1 hour), ‚%H:00:00‘) AS `Time`, channel, avg( value ) as value FROM volkszaehler.power
GROUP BY DATE_FORMAT(FROM_UNIXTIME((`power`.`timestamp` / 1000)),
‚%d-%m-%Y %H‘), channel order by channel, Time

Speicherplatz der Tabellen:

SELECT table_schema as `DB`, table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Size MB` FROM information_schema.TABLES ORDER BY (data_length + index_length) DESC limit 10;

oder auch:

SELECT TABLE_NAME, TABLE_ROWS as rows,(data_length+index_length)/power(1024,2) ’size [MB]‘, DATA_FREE/power(1024,2) as ‚free [MB]‘
FROM information_schema.tables
WHERE table_schema=’volkszaehler‘ and TABLE_TYPE=’BASE TABLE‘ and TABLE_NAME like ‚%data%‘;

oder:

SELECT 

NAME,
CONCAT(FORMAT(DAT/POWER(1024,pw1),2),‘ ‚,SUBSTR(units,pw1*2+1,2)) DATSIZE,
CONCAT(FORMAT(NDX/POWER(1024,pw2),2),‘ ‚,SUBSTR(units,pw2*2+1,2)) NDXSIZE,
CONCAT(FORMAT(TBL/POWER(1024,pw3),2),‘ ‚,SUBSTR(units,pw3*2+1,2)) TBLSIZE

FROM

(SELECT NAME, DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(

SELECT TABLE_NAME NAME, data_length DAT,index_length NDX,data_length+index_length TBL,

FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz

FROM information_schema.tables
WHERE table_schema=’volkszaehler‘

) AA

) A,(SELECT ‚B KBMBGBTB‘ units) B;

 

Monatsdaten ausgeben lassen

Select month, title, type, Sensor, value as ‚energy [kWh]‘ from channels join volkszaehler.`energy month`   on channel = id order by month desc, title desc;        

Rohdaten im lesbaren Zeitformat (Tabelle data)

select *, date_format(from_unixtime((`data`.`timestamp` / 1000)),’%d-%m-%Y %H:%i:%s‘) from data where channel_id=172 order by timestamp desc limit 1000;

Verbrauch für Tagesabschnitte (z.B. Nachtverbrauch für Speicherdimensionierung)

select * from channels;       
SELECT from_unixtime(timestamp/1000) timewindow_start,
         (
             case
             when TIME(from_unixtime(timestamp/1000)) BETWEEN ’00:00:00′ AND ‚06:00:00‚ THEN DATE_ADD(FLOOR(DATE(from_unixtime(timestamp/1000))), INTERVAL 6 HOUR)
             when TIME(from_unixtime(timestamp/1000)) BETWEEN ‚06:00:00‚ AND ‚22:00:00‚ THEN DATE_ADD(FLOOR(DATE(from_unixtime(timestamp/1000))), INTERVAL 22 HOUR)
             else DATE_ADD(DATE_ADD(FLOOR(DATE(from_unixtime(timestamp/1000))), INTERVAL 6 HOUR), INTERVAL 1 DAY)
         end) as timewindow_end, max(value) as Counterstate_end,min(value) as Counterstate_start, max(value)-min(value) as consumption from data where channel_id=126 group by timewindow_end  order by timestamp desc limit 10000;

Dabei liefert die erste Abfrage alle angelegten Messkanäle, mit der id aus Spalte 1 ist in der eigentlichen 2. Abfrage in der vorletzten Zeile die channel_id zu benennen.

Es gibt 4 Modifikationsparameter:

1. channel_id (schwarz) ist aus Abfrage 1 zu entnehmen

2. Startzeitpunkt 6:00Uhr muss bei Bedarf an 4 Stellen angepaßt werden (grün)

3. Endzeitpunkt 22:00Uhr muss an 2 Stellen angepaßt werden (blau)

4. limit 10000 nach Bedarf vergrößern, falls irgendwann nicht mehr der gewünschte Zeitraum geliefert wird