+ Antworten
Seite 1 von 8 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 76
  1. #1
    Registriert seit
    May 2014
    Ort
    Großraum Stuttgart
    Beiträge
    90

    Standard Energieberichte

    Hallo Forum,

    ich habe schon seit längerer Zeit vor, die Daten meiner Strom- und PV-Zähler (später vielleicht auch Wasser und Wärmepume) in Form von standardisierten Berichten und E-Mails auszuwerten und im WebFront zur Verfügung zu stellen.

    Ich habe nun schon einiges im Forum gesucht, aber nix gefunden. Entweder ich verwende die falschen Suchbegriffe, oder ich seh den Wald vor lauter Bäumen nicht.

    Folgendes stelle ich mir für jeden Zähler vor:
    • Tageswert (seit 0:00 Uhr)
    • Tageswert (letzte 24 Stunden)
    • Wochenwert (letzte 7 Tage)
    • Monatswert (letzte 30,44 Tage oder 730,5 Stunden) (einfach ein 12-tel-Jahr)
    • Jahreswert (seit 1.1.)
    • Jahreswert (letzte 365,25 Tage) (damit Schaltjahre keine Ausreißer machen, ein rollierender Jahreswert)

    Hat für so etwas schon jemand Skipte, so dass man nicht bei "Null" anfangen muss?

    Ein zweites Problem stellen meine geloggten Variablen dar. Im Moment logge ich jede Sekunde, was aber gar nicht nötig wäre und einen riesigen Datenberg erzeugt. Gibt es einen einfachen Weg, diese einlaufenden Daten z.B. auf Minuten- oder -Minutenwerte zu aggregieren, die dann geloggt werden? Und das ggf. auch mit dem Datenbestand zu machen, damit da mal etwas asgemistet werden kann. Je äler die Daten sind, umso größer könnte das Aggregationsinervall sein.

    Bin für jede Hilfe und Unterstützung dankbar!

    tango

    //Bearbeitung: Mailbenachrichtigung eingestellt
    Geändert von tango (25.01.18 um 16:30 Uhr)

  2. #2
    Registriert seit
    Feb 2009
    Ort
    Berlin / Melsungen
    Beiträge
    549

    Hallo Tango,

    was Dir weiterhilft ist ein Blick in die Doku. Die Werte, die Du ermitteln willst sind alle im Archiv zu finden, wenn Du das Logging beim Anlegen der Variable aktiviert hast.

    Schaue mal unter: Archive Control — IP-Symcon :: Automatisierungssoftware

    Siehe auch: Archiv Daten berechnen

    Ist gerade erst vor 4 Tagen besprochen worden.

    Ganze 5 Minuten Suche im Forum.

    Den Abstand der ankommenden Daten bestimmt, glaube ich deine Hardware, die die Werte sendet. Den mit AC_AggregateValue z.B. ermittelten Wert (z.B. Verbrauch gestern) schreibst Du dann einfach in eine neue Variable und kannst dann den Wert abrufen. Dort kannst Du auch die Häufigkeit mittels eines Ereignisses (Durchführung des Scriptes) einstellen.

    Viele Grüße,

    Burkhard
    Geändert von Burki24 (25.01.18 um 22:40 Uhr)
    OMV 4.1 (Arrakis - NAS auf Odroid C2), HM-HMIP über CCU3 mit piVCCU, Symcon 5.1 und IPSView auf Raspi3, Wandpanels (IPSView), Harmony Hub, Fritzbox, Phillips Hue, KODI Mediaserver

  3. #3
    Registriert seit
    May 2014
    Ort
    Großraum Stuttgart
    Beiträge
    90

    Danke Burkhard, dass Du mir trotzdem geantwortet hast. Ich habe sehr wohl gesucht und diesen Faden auch gefunden. Auch die Funktionen zum Archivhandling habe ich mir angeschaut. Nun bin ich, wie viele andere auch, mit der gestaltenden Programmierung noch etwas hölzern unterwegs.

    Deshalb habe ich halt mal versucht nach Vorlagen zu fragen, mit denen jemand etwas ähnliches schon gelöst hat, bevor ich das Rad neu erfinde. Vielleicht gibt es ja noch etwas Input?

    Dank und Gruß

    tango

  4. #4
    Registriert seit
    Feb 2009
    Ort
    Berlin / Melsungen
    Beiträge
    549

    Zitat Zitat von tango Beitrag anzeigen
    Deshalb habe ich halt mal versucht nach Vorlagen zu fragen, mit denen jemand etwas ähnliches schon gelöst hat, bevor ich das Rad neu erfinde. Vielleicht gibt es ja noch etwas Input?

    Dank und Gruß

    tango
    Also hier mal zwei Beispiele:

    monatliche Aggregation für Januar:
    PHP-Code:
    <?
    $werte 
    AC_GetAggregatedValues(30200 /*[Archive]*/59017 /*[Hardware\SDM 630\Total kWh]*//* monatliche Abbrebation*/
     
    */, mktime(000112018), mktime(23591312018), 0); 
    foreach(
    $werte as $wert) {
        echo 
    date("d.m.Y H:i:s"$wert['TimeStamp']) . " -> " $wert['Avg'] . PHP_EOL;
    }
    SetValue(40489 /*[Hardware\SDM 630\kWh Monat]*/$wert['Avg']);
    ?>
    Kontinuierliche Aggregation für den Vortag:
    PHP-Code:
    $werte AC_GetAggregatedValues(30200 /*[Archive]*/59017 /*[Hardware\SDM 630\Total kWh]*//* täglich */strtotime("yesterday 23:59"), time(), -1); 
    foreach(
    $werte as $wert) {
        echo 
    date("d.m.Y H:i:s"$wert['TimeStamp']) . " -> " $wert['Avg'] . PHP_EOL;
    }
    SetValue(16764 /*[Hardware\SDM 630\kWh Vortag]*/$wert['Avg']);
    ?> 
    Für dieses Script ein Ereignis erstellt, welches zyklisch das Script jeden Tag um 23:59:59 ausführt. Dabei wird der Vortages-Wert in die Variable kWh Vortag gespeichert und geloggt.

    Vielleicht hilft das um etwas Durchblick zu kriegen. Ich möchte mich aber an dieser Stelle selber noch bei sewo und den Anderen aus dem Threat: Archiv Daten berechnen bedanken, ohne deren Tipps würde ich auch noch im Dunkeln stehen.

    Viele Grüße,

    Burkhard
    Geändert von Burki24 (26.01.18 um 08:08 Uhr)
    OMV 4.1 (Arrakis - NAS auf Odroid C2), HM-HMIP über CCU3 mit piVCCU, Symcon 5.1 und IPSView auf Raspi3, Wandpanels (IPSView), Harmony Hub, Fritzbox, Phillips Hue, KODI Mediaserver

  5. #5
    Registriert seit
    May 2008
    Ort
    Forstern
    Beiträge
    932

    Hi,

    ich habe mir auch vor langer Zeit hier im Forum paar Sachen zusammengesucht und dann folgende Funktionen gebastelt.

    PHP-Code:
    function strom() {
        
    ////////////////////////////////////////////////////////////////////////////////
    echo '-------------------------- LETZTE WERTE --------------------------------------'.PHP_EOL;
    ////////////////////////////////////////////////////////////////////////////////
    // GESTERN
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Täglich */strtotime("yesterday"), strtotime("today")-10);  
    echo 
    'Verbrauch Gestern: '.verbrauch($data).PHP_EOL;
    // LEZTE WOCHE
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Wöchentlich */strtotime("monday last week"), strtotime("monday this week")-10);  
    echo 
    'Verbrauch Letzte Woche: '.verbrauch($data).PHP_EOL;
    // LETZTER MONAT
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Monatlich */strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0);  
    echo 
    'Verbrauch Letzter Monat: '.verbrauch($data).PHP_EOL;
    // LETZTES JAHR
    $ly date('Y'strtotime('-1 year'));
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Jährlich */mktime(00011$ly), mktime(2359591231$ly), 0);  
    echo 
    'Verbrauch Letztes Jahr: '.verbrauch($data).PHP_EOL;

    ////////////////////////////////////////////////////////////////////////////////
    echo '------------------------- AKTUELL WERTE -------------------------------------'.PHP_EOL;
    ////////////////////////////////////////////////////////////////////////////////
    // HEUTE
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Stündlich */strtotime("today"), strtotime("now"), 0);
    $wert_day verbrauch($data);
    echo 
    'Verbrauch Heute: '.$wert_day.PHP_EOL;
    // WOCHE
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Wöchentlich */strtotime("last monday"), strtotime("now"), 0);  
    $wert_week verbrauch($data);
    echo 
    'Verbrauch Woche: '.$wert_week.PHP_EOL;
    // MONAT
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Monatlich */strtotime("first day of this month 00:00"), strtotime("now"), 0);
    $wert_month verbrauch($data);
    echo 
    'Verbrauch Monat: '.$wert_month.PHP_EOL;
    // JAHR
    $data AC_GetAggregatedValues(38732 /*[Archive]*/13285 /*[Steuerung\Verbrauchsmonitor\Strom\Stromzähler]*//* Jährlich */strtotime("first day of January"), strtotime("now"), 0);  
    $wert_year verbrauch($data);
    echo 
    'Verbrauch Jahr: '.$wert_year.PHP_EOL;

    ////////////////////////////////////////////////////////////////////////////////
    echo '------------------------- HOCHRECHNUNG ------------------------------------'.PHP_EOL;
    ////////////////////////////////////////////////////////////////////////////////
    // TAG
    $diff strtotime('now') - strtotime('today');
    $full 60*60*24;
    $wert round($wert_day*$full/$diff2);
    echo 
    'Hochrechnung Heute: '.$wert.PHP_EOL;
    // WOCHE
    $diff strtotime('now') - strtotime('last monday');
    $full 60*60*24*7;
    $wert round($wert_week*$full/$diff2);
    echo 
    'Hochrechnung Woche: '.$wert.PHP_EOL;
    // MONAT
    $diff strtotime('now') - strtotime('first day of this month 00:00');
    $full 60*60*24*date('t');
    $wert round($wert_month*$full/$diff2);
    echo 
    'Hochrechnung Monat: '.$wert.PHP_EOL;
    // JAHR
    $diff strtotime('now') - strtotime('first day of January');
    $full 60*60*24*365;
    $wert round($wert_year*$full/$diff2);
    echo 
    'Hochrechnung Monat: '.$wert.PHP_EOL;
    }



    function 
    verbrauch($werte
    {
        
    //var_dump($werte);
        
    $verbrauch 0;
        foreach(
    $werte as $wert) {
            
    //echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL; 
            
    $verbrauch += $wert['Avg'];
        }
        return 
    round($verbrauch2);

    Aussehen tut das dann mit Timer, schreiben der Variablen usw. so aus:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Verbrauch Strom.PNG 
Hits:	762 
Größe:	187.0 KB 
ID:	42380

    Viel Erfolg
    Pitti
    SERVER: FritzBox 7490, Raspberry Pi 3, CCU2 und IP-Symcon V5.1 (Ninja) | SYSTEME: Amazon ECHOs, Apple TVs, Homematic/HmIP, LevelJet, Logitech Harmony, Pioneer AVR, Philips Hue, Samsung TV's, Somfy RFX, Apple & Android Handys & Tablets | MODULE: IPSymconAwido, IPSymconToolmatic, IPSymconAlmanac, SymconMHC | SKINS: WwxSkin

  6. #6
    Registriert seit
    May 2014
    Ort
    Großraum Stuttgart
    Beiträge
    90

    Danke Euch beiden für die Inputs! Damit ist das Blatt nicht mehr weiß und man kann mal loslegen mit Experimentieren.
    Soll ja hübsch regnen am Wochenende, da kann man da ja mal reinsteigen. Bin gespannt, was rauskommt!

    Dank und Gruß
    tango

  7. #7
    Registriert seit
    Feb 2009
    Ort
    Berlin / Melsungen
    Beiträge
    549

    Zitat Zitat von pitti Beitrag anzeigen
    Hi,

    ich habe mir auch vor langer Zeit hier im Forum paar Sachen zusammengesucht und dann folgende Funktionen gebastelt.

    Viel Erfolg
    Pitti
    HalloPitti,

    das ist der Hammer, damit haste mir ja auch wieder was fürs Wochenende bereitet. Vielen Dank für Deinen Input.

    Viele Grüße,

    Burkhard
    OMV 4.1 (Arrakis - NAS auf Odroid C2), HM-HMIP über CCU3 mit piVCCU, Symcon 5.1 und IPSView auf Raspi3, Wandpanels (IPSView), Harmony Hub, Fritzbox, Phillips Hue, KODI Mediaserver

  8. #8
    Registriert seit
    May 2008
    Ort
    Forstern
    Beiträge
    932

    Zitat Zitat von Burki24 Beitrag anzeigen
    HalloPitti,

    das ist der Hammer, damit haste mir ja auch wieder was fürs Wochenende bereitet. Vielen Dank für Deinen Input.

    Viele Grüße,

    Burkhard
    Danke, na wenn Euch das so gut gefällt dann gleich das komplette Script

    PHP-Code:
    <? 
    ################################################################################
    # Scriptbezeichnung: HM.Consumption.ips.php
    # Version:    1.0
    # Author:    Heiko Wilknitz
    #
    # Auswertung und Hochrechnung des Stromverbrauches
    #
    # ----------------------------- Konfigruration ---------------------------------
    #
    # Anzahl Nachkommastellen bei Ergebnissen
    $roundTo=2;                //Anzahl Nachkommastellen bei Ergebnissen 
    #
    # ----------------------------------- ID´s -------------------------------------
    #
    $parentID IPS_GetObject($_IPS['SELF']); 
    $parentID $parentID['ParentID']; 
    # ID des ArchiveHandler ermitteln 
    $instances IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}'); 
    $archiveID $instances[0]; 
    #
    ################################################################################

    // Verbrauchszähler
    $valueID IPS_GetObjectIDByIdent("Value"$parentID); 

    // Variablen anlegen bzw. auslesen
    $lastYearID        CreateVariableByName($parentID"Verbrauch letztes Jahr"); 
    $lastMonthID    CreateVariableByName($parentID'Verbrauch letzter Monat'); 
    $lastWeekID     CreateVariableByName($parentID'Verbrauch letzte Woche'); 
    $lastDayID      CreateVariableByName($parentID'Verbrauch letzter Tag'); 

    $currYearID        CreateVariableByName($parentID"Verbrauch aktuelles Jahr"); 
    $currMonthID    CreateVariableByName($parentID'Verbrauch aktueller Monat'); 
    $currWeekID     CreateVariableByName($parentID'Verbrauch aktuelle Woche'); 
    $currDayID      CreateVariableByName($parentID'Verbrauch aktueller Tag'); 

    $consYearID        CreateVariableByName($parentID"Hochrechnung Jahr"); 
    $consMonthID    CreateVariableByName($parentID'Hochrechnung Monat'); 
    $consWeekID     CreateVariableByName($parentID'Hochrechnung Woche'); 
    $consDayID      CreateVariableByName($parentID'Hochrechnung Tag'); 

    // -------------------------- LETZTE WERTE -------------------------------------
    // GESTERN
    $data AC_GetAggregatedValues($archiveID$valueID/* Täglich */strtotime("yesterday"), strtotime("today")-10);  
    SetValueFloat($lastDayIDCalcConsumption($data));
    // LEZTE WOCHE
    $data AC_GetAggregatedValues($archiveID$valueID/* Wöchentlich */strtotime("monday last week"), strtotime("monday this week")-10);  
    SetValueFloat($lastWeekIDCalcConsumption($data));
    // LETZTER MONAT
    $data AC_GetAggregatedValues($archiveID$valueID/* Monatlich */strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0);  
    SetValueFloat($lastMonthIDCalcConsumption($data));
    // LETZTES JAHR
    $ly date('Y'strtotime('-1 year'));
    $data AC_GetAggregatedValues($archiveID$valueID/* Jährlich */mktime(00011$ly), mktime(2359591231$ly), 0);  
    SetValueFloat($lastYearIDCalcConsumption($data));

    // ------------------------- AKTUELL WERTE -------------------------------------
    // HEUTE
    $data AC_GetAggregatedValues($archiveID$valueID/* Stündlich */strtotime("today"), strtotime("now"), 0);
    $dataDay CalcConsumption($data);
    SetValueFloat($currDayID$dataDay);
    // WOCHE
    $data AC_GetAggregatedValues($archiveID$valueID/* Wöchentlich */strtotime('last monday'strtotime('tomorrow')), strtotime("now"), 0);  
    $dataWeek CalcConsumption($data);
    SetValueFloat($currWeekID$dataWeek);
    // MONAT
    $data AC_GetAggregatedValues($archiveID$valueID/* Monatlich */strtotime("first day of this month 00:00"), strtotime("now"), 0);
    $dataMonth CalcConsumption($data);
    SetValueFloat($currMonthID$dataMonth);
    // JAHR
    $data AC_GetAggregatedValues($archiveID$valueID/* Jährlich */strtotime("first day of January"), strtotime("now"), 0);  
    $dataYear CalcConsumption($data);
    SetValueFloat($currYearID$dataYear);

    // ------------------------- HOCHRECHNUNG --------------------------------------
    // TAG
    $diff strtotime('now') - strtotime('today');
    $full 60*60*24// 24h
    $data round($dataDay*$full/$diff2);
    SetValueFloat($consDayID$data);
    // WOCHE
    $diff strtotime('now') - strtotime('last monday'strtotime('tomorrow'));
    $full 60*60*24*7// 7 Tage
    $data round($dataWeek*$full/$diff2);
    SetValueFloat($consWeekID$data);
    // MONAT
    $diff strtotime('now') - strtotime('first day of this month 00:00');
    $full 60*60*24*date('t'); // 1 Monat
    $data round($dataMonth*$full/$diff2);
    SetValueFloat($consMonthID$data);
    // JAHR
    $diff strtotime('now') - strtotime('first day of January');
    $full 60*60*24*365// 1 Jahr
    $data round($dataYear*$full/$diff2);
    SetValueFloat($consYearID$data);


    // Funktion zum addieren der Zählerwerte 
    function CalcConsumption($values
    {
    global 
    $roundTo;
        
    $consumption 0;
        foreach(
    $values as $value) {
            
    //echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL; 
            
    $consumption += $value['Avg'];
        }
        return 
    round($consumption$roundTo);
    }     

    // Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen 
    function CreateVariableByName($id$name

        
    $vid = @IPS_GetVariableIDByName($name$id); 
        if(
    $vid === false) { 
            
    $vid IPS_CreateVariable(2); 
            
    IPS_SetParent($vid$id); 
            
    IPS_SetName($vid$name); 
        } 
        return 
    $vid
    }
     
    // Eine Funktion um ein Script im Script-Verzeichnis zu erzeugen 
    // erstellt von hirschbrat, angepasst wgreipl 
    function CreateScriptByName($scriptName$parentId

        
    $scriptID = @IPS_GetScriptIDByName($scriptName$parentId); 
        if (
    $scriptID == 0){ 
            
    $scriptID IPS_CreateScript(0); 
            
    IPS_SetName($scriptID$scriptName); 
            
    IPS_SetParent($scriptID$parentId); 
        } 
        return 
    $scriptID

    ?>
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	strom.PNG 
Hits:	411 
Größe:	168.9 KB 
ID:	42384
    SERVER: FritzBox 7490, Raspberry Pi 3, CCU2 und IP-Symcon V5.1 (Ninja) | SYSTEME: Amazon ECHOs, Apple TVs, Homematic/HmIP, LevelJet, Logitech Harmony, Pioneer AVR, Philips Hue, Samsung TV's, Somfy RFX, Apple & Android Handys & Tablets | MODULE: IPSymconAwido, IPSymconToolmatic, IPSymconAlmanac, SymconMHC | SKINS: WwxSkin

  9. #9
    Registriert seit
    May 2014
    Ort
    Großraum Stuttgart
    Beiträge
    90

    Wow!

    Nachfrage eines hölzernen Programmierers:
    Wie ermittelst Du den Namen Deines Stromzählers bzw. seiner Variablen? Zeile 25 mit "Value"?
    Und der lange String in Zeile 19 "{43192F0B-135B-4CE7-A0A7-1475603F3060}" ist die InstanzID Deiner gesamten Installation? Wo bekomme ich die für mich her?

    Wenn ich nun verschiedene Zähler auslesen wollte würde ich für jeden Zähler ein eigenes Skript anlegen? Ich habe separate Zähler für Haus, Auto, Heizung...

    Sorry für die blöden Fragen, aber ich mag die Sachen verstehen, die ich laufen lasse - soweit möglich zumindest.

    THX!
    Gruß tango
    __________________________________________________ _________________
    IPS 5 im virtuellen W2K12R2. Homematic auf Raspimatic. Eisspeicher mit UVR 16x2 und UVR1611.

  10. #10
    Registriert seit
    Jul 2010
    Ort
    Südwestpfalz
    Beiträge
    6,610

    Gruß Boui . . . IPS-unlim. auf Tinker Board S und pivccu

    Die gefährlichste Form der Zensur ist die Schere im eigenen Kopf.(Curzio Malaparte)