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