+ Antworten
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Feb 2012
    Beiträge
    262

    Standard Daten aus Datenbank-Logging zur Berechnung nutzen

    Hallo zusammen,

    ich möchte mit den Daten aus dem Datenbank-Logging
    Berechnungen machen.
    Z.B. Speichere ich jeden Tag um 24:00 Uhr den Tagesverbrauch meiner
    Pelletsheizung in eine Variable. Die bekomme ich über die serielle Anbindung
    meines Heizkessel als Zählerstände geliefert.

    Diese möchte ich dann als Wochen oder Monatswerte berechnen und als Zahlenwert
    darstellen.

    Ich stehe aber noch ein wenig auf dem Schlauch.
    Wie kann ich z.B. alle Werte für einen bestimmten Zeitraum aus der
    Datenbank auslesen und addieren?
    Also nicht über einen Graphen sondern als Variable fürs Webfront.

    Vielleicht ist jemand so nett und kann mir einen Denkanstoß geben.

    Vielen Dank im Voraus

    Udo
    Ip-Symcon 3.4 auf Intel I3 8GB Win 7 Pro 64bit gleichzeitig Dateiserver
    2 X HM-LAN - Adapter , 1* FHZ 1300 , 12* FHT 8b, 2x HM-CC -TC , Diverse HM Schaltaktoren, Diverse FS20 Fernbedienungen , 3 FS20 Rolladenschalter, Diverse FS 20 Schaltaktoren und Dimmer, 3x HMS Temperatursensor ,FS 20 Bewegungsmelder und Helligkeitssensor.

  2. #2
    Registriert seit
    Jun 2011
    Ort
    56332 Wolken b.Koblenz
    Beiträge
    328

    Moin Udo,

    IPS liefert dazu ein paar pfiffige Befehle mit. Du kannst Dir für einen gewünschten Zeitraum die Daten schon entspr. verdichtet aus der Datenbank ausgeben lassen. Hier ein Beispiel, in dem ich mir aus der Variable ID 24010 die Werte pro Monat ausgeben lasse. Diese landen dann in dem Array $temp, das ist dann wiederum weiter in einer Schleife auswerte.
    Denkbar wäre natürlich auch, nur eine Variable mit einem verdichteten Wert zu füllen und die dann mittels SetValue zur weiteren Anzeige im Webfront in eine Variable zu schreiben.


    PHP-Code:
    $liste=array();
    $beginn=strtotime("01.01.2012");
    $count=0;
    $temp AC_GetAggregatedValues(19907 /*[Archive Handler]*/240103,$beginntime(), 0); // 1 = day, 2 = Week, 3 = month,4 =year, 0 = Hour

    for ($count=0$count <count($temp); $count++)
    {

        
    $verbrauch=round($temp[$count]['Avg'],2); // Durchschnittswert
        
    $zahl_s=(string) $verbrauch;
        
    $zahl_neu=str_replace(".",",",$zahl_s); // Punkt durch Komma ersetzen 
        
    $dat=date("d.m.Y"$temp[$count]['TimeStamp']);
        
    $liste[$count]=$dat.";".$zahl_neu;
        echo 
    $liste[$count]."\n";


    Schau mal hier in der Doku.

    Des weiteren gibt es diesen Befehl, der nur die geloggten Daten über einen Zeitraum in ein Array schreibt.

    Ich hoffe, ich konnte Dir ein bisschen weiterhelfen.

    Gruß
    Walter

  3. #3
    Registriert seit
    Feb 2012
    Beiträge
    262

    Hallo Walter,

    vielen Dank für den Denkanstoß.

    Ich kannte die Befehle AC_Getxxxxxxvalues noch nicht.

    Da ich den Tagesverbrauch immer um 24h in eine Variable schreibe,
    kann ich es damit noch einfacher lösen.

    Ich brauche dann nur AC_Getloggedvalues mit dem entsprechenden Start und Enddatum
    und diese wenigen Variablen zu addieren.

    Ich wollte zuerst einfach den Zählerwert vom Start und Enddatum nehmen und damit den Verbrauch ausrechnen.
    Aber zum einen kann der Zähler resetet werden und zum anderen ist der Verbrauch pro Zähleinheit vom ermittelten
    Durchfluß und damit von der Pelletsqualität abhängig die ich bei neuen Lieferungen in einer Variable hinterlege und
    auch gelegentlich schon mal zwischendurch neu justiere.

    Daher ist die Addition der Tagesverbrauchswerte die genaueste Verbrauchsmessung.

    Da werde ich mir jetzt mal ein paar Scripte schreiben für Verbrauch ab Heizbeginn, Verbrauch pro Woche , pro Monat etc.
    Dann kann ich im Sommer auch mal ausrechnen was das Warmwasser wirklich kostet, da ich am Warmwasser eine Wasseruhr dran habe.

    Gruß Udo
    Ip-Symcon 3.4 auf Intel I3 8GB Win 7 Pro 64bit gleichzeitig Dateiserver
    2 X HM-LAN - Adapter , 1* FHZ 1300 , 12* FHT 8b, 2x HM-CC -TC , Diverse HM Schaltaktoren, Diverse FS20 Fernbedienungen , 3 FS20 Rolladenschalter, Diverse FS 20 Schaltaktoren und Dimmer, 3x HMS Temperatursensor ,FS 20 Bewegungsmelder und Helligkeitssensor.

  4. #4
    Registriert seit
    Feb 2013
    Ort
    Oberösterreich
    Beiträge
    942

    Zitat Zitat von walter1304 Beitrag anzeigen
    Moin Udo,

    IPS liefert dazu ein paar pfiffige Befehle mit. Du kannst Dir für einen gewünschten Zeitraum die Daten schon entspr. verdichtet aus der Datenbank ausgeben lassen. Hier ein Beispiel, in dem ich mir aus der Variable ID 24010 die Werte pro Monat ausgeben lasse. Diese landen dann in dem Array $temp, das ist dann wiederum weiter in einer Schleife auswerte.
    Denkbar wäre natürlich auch, nur eine Variable mit einem verdichteten Wert zu füllen und die dann mittels SetValue zur weiteren Anzeige im Webfront in eine Variable zu schreiben.


    PHP-Code:
    $liste=array();
    $beginn=strtotime("01.01.2012");
    $count=0;
    $temp AC_GetAggregatedValues(19907 /*[Archive Handler]*/240103,$beginntime(), 0); // 1 = day, 2 = Week, 3 = month,4 =year, 0 = Hour

    for ($count=0$count <count($temp); $count++)
    {

        
    $verbrauch=round($temp[$count]['Avg'],2); // Durchschnittswert
        
    $zahl_s=(string) $verbrauch;
        
    $zahl_neu=str_replace(".",",",$zahl_s); // Punkt durch Komma ersetzen 
        
    $dat=date("d.m.Y"$temp[$count]['TimeStamp']);
        
    $liste[$count]=$dat.";".$zahl_neu;
        echo 
    $liste[$count]."\n";


    Schau mal hier in der Doku.

    Des weiteren gibt es diesen Befehl, der nur die geloggten Daten über einen Zeitraum in ein Array schreibt.

    Ich hoffe, ich konnte Dir ein bisschen weiterhelfen.

    Gruß
    Walter
    Hallo zusammen.

    Ich logge auch eine Variable und zwar die des Wasserverbrauches. Die Daten bekomme ich vom ekm868.
    Habe dann eine Grafik angelegt wo ich den Monatsverbrauch sehe!
    Funktioniert bestens :-) Aber ich möchte ja gerne:

    Die Monatswerte in eine Variable schreiben lassen!

    Die Daten werden ja im Archiv Handler gespeichert?!
    Ich kann ja auch mit dem Befehl AC_GetAggregatedValues die Daten aus dem Archiv Handler heraus hohlen?

    Aber wie kann ich wenn ich 12 Variablen Anlege mit Jan bis Dez diese Variablen immer zum Monatsletzten befüllen?
    Z.b.: Ende September um 0:00 wird in die Variable September der Monatsverbrauch geschrieben.

    Danke
    Liebe Grüße,
    Michl

    IPS Symbox

  5. #5
    Registriert seit
    Jun 2011
    Ort
    56332 Wolken b.Koblenz
    Beiträge
    328

    Hallo,

    bei mir läuft jede Nacht um 0.00 Uhr ein Skript, in dem solche Sachen abgehandelt werden.

    So in etwa könnte man den Monats / Jahreswechsel feststellen :
    PHP-Code:
    $jahreswechsel FALSE;
    $mon_jetzt   = (int) date("m",time());
    $mon_gestern = (int) date("m",time()-3600);
    $mon         $mon_jetzt;

    IF ( 
    $mon_jetzt <> $mon_gestern )
         {
              
    $mon $mon_gestern;
              IF (  
    $mon_gestern == 12 and $mon_jetzt == )
                 {
                    
    $jahreswechsel=TRUE;
              }
         } 
    In einem Array speichere ich die 12 IDs der Monatsvariablen :

    PHP-Code:
    $varis=array(52637,36519,16936,17966,26522,45216,16092,15329,20385,58838,52253,32999); 
    Dann wird in Abhängigkeit des aktuellen Monats, der aktuelle Tageswert in diese Variable addiert:

    PHP-Code:
    $altwert=GetValue($varis[$mon-1]);
    SetValue($varis[$mon-1],$altwert+$heute); 
    Wenn $jahreswechsel == TRUE, dann können z.B. Jahresüberträge gebildet werden oder Monatsvariablen z.B. in einer Schleife wieder "genullt" werden.

    Eine weitere Möglichkeit wäre, wenn Du keine Tageswerte hast, die addiert werden sollen, einfach nur den Monatswechsel zu prüfen und sollte dieser positiv sein, mit AC_GetAgg.... die Summe in die entsprechende Variable schreibst.

    Gruß
    Walter

  6. #6
    Registriert seit
    Feb 2013
    Ort
    Oberösterreich
    Beiträge
    942

    Zitat Zitat von walter1304 Beitrag anzeigen
    Hallo,

    bei mir läuft jede Nacht um 0.00 Uhr ein Skript, in dem solche Sachen abgehandelt werden.

    So in etwa könnte man den Monats / Jahreswechsel feststellen :
    PHP-Code:
    $jahreswechsel FALSE;
    $mon_jetzt   = (int) date("m",time());
    $mon_gestern = (int) date("m",time()-3600);
    $mon         $mon_jetzt;

    IF ( 
    $mon_jetzt <> $mon_gestern )
         {
              
    $mon $mon_gestern;
              IF (  
    $mon_gestern == 12 and $mon_jetzt == )
                 {
                    
    $jahreswechsel=TRUE;
              }
         } 
    In einem Array speichere ich die 12 IDs der Monatsvariablen :

    PHP-Code:
    $varis=array(52637,36519,16936,17966,26522,45216,16092,15329,20385,58838,52253,32999); 
    Dann wird in Abhängigkeit des aktuellen Monats, der aktuelle Tageswert in diese Variable addiert:

    PHP-Code:
    $altwert=GetValue($varis[$mon-1]);
    SetValue($varis[$mon-1],$altwert+$heute); 
    Wenn $jahreswechsel == TRUE, dann können z.B. Jahresüberträge gebildet werden oder Monatsvariablen z.B. in einer Schleife wieder "genullt" werden.

    Eine weitere Möglichkeit wäre, wenn Du keine Tageswerte hast, die addiert werden sollen, einfach nur den Monatswechsel zu prüfen und sollte dieser positiv sein, mit AC_GetAgg.... die Summe in die entsprechende Variable schreibst.

    Gruß
    Walter
    Hallo Walter,
    danke für deine Hilfe!

    Ich habe jetzt 12 Integer Variablen Angelegt (Jän-Dez)

    Benutze dein Script wie oben:

    [PHP]

    PHP-Code:
    <?

    $jahreswechsel 
    FALSE;
    $mon_jetzt   = (int) date("m",time());
    $mon_gestern = (int) date("m",time()-3600);
    $mon         $mon_jetzt;

    IF ( 
    $mon_jetzt <> $mon_gestern )
         {
              
    $mon $mon_gestern;
              IF (  
    $mon_gestern == 12 and $mon_jetzt == )
                 {
                    
    $jahreswechsel=TRUE;
              }
         }
    $varis=array(44073 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\Jänner]*/,22628,21618 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\März]*/,41805,51877 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\Mai]*/,23932,37248 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\Juli]*/,53683,19757 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\September]*/,56953,25174 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\November]*/,30508);

    $altwert=GetValue($varis[$mon-1]);
    SetValue($varis[$mon-1],$altwert+$heute);

    ?>
    Leider bekomm ich immer diese Fehlermeldung:

    Notice: Undefined variable: heute in C:\IP-Symcon\scripts\56072.ips.php on line 18

    Wie weis das Script auf Welche geloggte Variable es zugreifen muss?
    Liebe Grüße,
    Michl

    IPS Symbox

  7. #7
    Registriert seit
    Feb 2009
    Ort
    Hamburg
    Beiträge
    2,096

    Auf die Schnelle würde ich sagen, das Du die Variable "heute" nirgends definierst!

    PHP-Code:

    SetValue
    ($varis[$mon-1],$altwert+$heute); 
    Was ist denn $heute? Die ist in deinem Skript nicht zu finden....
    Du mußt der Variablen etwas zuweisen bzw. diese füllen oder definieren!
    Das sagt auch die Fehlermeldung! --> "Undefined variable: heute .... on line 18"

    Gruß,
    Peter
    Geändert von PeterChrisben (26.09.13 um 19:31 Uhr)
    -MacMini(2011) =>Parallels 11=>Win7, FB7390, EIB-KNX, DMX-ArtNet, 2x EM24 DIN, SONOS ZP100/120/Play:1/Play:5/Sub, 1Wire=>Wiregate, xbee=>ROOMBA, Dreambox, DENON 2313, 8x Philips HUE -

  8. #8
    Registriert seit
    Feb 2013
    Ort
    Oberösterreich
    Beiträge
    942

    Zitat Zitat von PeterChrisben Beitrag anzeigen
    Auf die Schnelle würde ich sagen, das Du die Variable "heute" nirgends definierst!

    PHP-Code:

    SetValue
    ($varis[$mon-1],$altwert+$heute); 
    Was ist denn $heute? Die ist in deinem Skript nicht zu finden....
    Du mußt der Variablen etwas zuweisen bzw. diese füllen oder definieren!
    Das sagt auch die Fehlermeldung! --> "Undefined variable: heute .... on line 18"

    Gruß,
    Peter
    Hallo Peter,
    danke!
    Ich hab mal eine Variable mit $Heute angelegt.
    Trotzdem kommt die gleiche Fehlermeldung nochmal :-(

    Aber fehlt bei dem Script nicht das Archiv des Loggings?
    Bzw. woher weis das Script wo es sich den Wert holen muss?

    Lg
    Liebe Grüße,
    Michl

    IPS Symbox

  9. #9
    Registriert seit
    Dec 2006
    Ort
    Friedberg (Hessen)
    Beiträge
    1,705

    $Heute != $heute
    Viele Grüße Rainer
    Windows 10,IPS V 5.2 + Testsysteme -- FHZ -- PiVCCU3 -- Phillips Hue --1-Wire, Anwesendheits-Tracker, ESP-Easy und viele, viele Spielereien , I-View, Raspberry 2, 3, Zero, Tinkerboard, Nello, Nuki

  10. #10
    Registriert seit
    Jun 2011
    Ort
    56332 Wolken b.Koblenz
    Beiträge
    328

    Zitat Zitat von michl Beitrag anzeigen
    Hallo Peter,

    Aber fehlt bei dem Script nicht das Archiv des Loggings?
    Bzw. woher weis das Script wo es sich den Wert holen muss?

    Lg
    Das habe ich in meinem Eingangs Thread -zumindest versucht- zu erklären. Ich addiere um 0.00 Uhr Tageswerte ($heute), die den Tag über aufaddiert wurden, z.B. den Strombezug, KWh oder was auch immer in in die Monatsvariablen. Man kann das auch zum Monatsende per AC_GetAggregatedValues machen. Hab ich aber auch geschrieben... Mein Skript sollte Anregungen liefern. Es läuft alleine so nicht, kann also nicht einfach mit Cut&Paste irgendwo einkopiert werden. Es muss an Deine Variablen/Umgebung angepasst werden. Sorry.

    Gruß
    Walter
    Geändert von walter1304 (27.09.13 um 19:50 Uhr)

Ähnliche Themen

  1. Logging-Datenbank Daten ausdünnen
    Von mischo22 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 20
    Letzter Beitrag: 31.03.13, 20:32
  2. Abruf und Berechnung von geloggten Daten aus der Datenbank
    Von bastelfrosch im Forum Skripte, PHP, SQL
    Antworten: 5
    Letzter Beitrag: 24.01.13, 18:54
  3. Rechnen mit Daten aus der Logging Datenbank
    Von Joggi im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 26.10.12, 11:43
  4. DATENBANK (logging.db) ältere Daten nachträglich hinzufügen
    Von honk0504 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 14
    Letzter Beitrag: 28.05.12, 16:01
  5. Editieren von Daten aus der Datenbank
    Von bziegenhagen im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 6
    Letzter Beitrag: 06.01.12, 13:37