[Modul] Energierechner

Was mir dazu spontan einfällt, ist die Beschriftung der Variablen, die dann nicht Verbrauch/Kosten sondern besser Lieferung/Ertrag lauten könnten. Die Berechnung passt da ja auch nach Eingabe der entsprechenden ct/kWh.

Gruß
Rainer

Moin Moin,

Wenn ich mir meine PV anschaue, gibt es zwei Wünsche. Da ist zum einen die Visualisierung der Bezugs- und Verbraucherströme. Insofern habe ich mich sehr gefreut, dass das mit der neuen Visu geht. (siehe Niels Vortrag am 28.01. auf dem IPS Event)

Zum anderen denke ich an: Eigenverbrauchsquote, Autakrie, Einsparung, Gesamtkosten unter Einbeziehung der Stromverkäufe, und wenn möglich sogar eine Amortisierungsquote.

Gruß Michael

Ich denke dafür sollte man dann etwas eigenes schreiben.

Grüße,
Kai

1 „Gefällt mir“

@KaiS
Kann das sein, dass du weiter oben geschrieben hast, dass die Berechnung am ersten Tag, wo ein Tarif gültig ist, nicht stimmt? Wenn das so ist, wäre das schlecht. Denn bei Awattar ist jeder Tag der erste Tag, wenn für jeden Tag ein neuer Eintrag generiert wird.
Heute ist bei mir der erste Tag mit Awattar und am Morgen haben die Euro-Werte für den Bezug nicht gestimmt. Wurden mit dem bis gestern gültigen Preis berechnet. Ich habe dann die Instanz deaktiviert und wieder aktiviert, dann hat er neu berechnet. Wenn das ein Workaround ist, soll mir das recht sein.

Ich habe aWATTar wieder entfernt.
Ich muss das noch mal anders machen.

Nein, das war darauf bezogen, wenn man das Logging der Variable an dem Tag erst eingeschaltet hat. Da bin ich mir unsicher, ob das passt.

Grüße,
Kai

Dast ist kein Problem, hab ja meine eigene Verson

Ok, dann hab ich das falsch verstanden. Ich werde es morgen noch mal kontrollieren. Wobei ich bei mir einen Fehler gefunden hab. Ich hab für den Tages- und Nachtpreis die Zahl als String eingetragen. Interessanterweise wurde es in der Liste korrekt angezeigt. In der Änderungsmaske (Zahnrad in der Liste) dann waren die Werte 0. Hab ich erste heute in der Früh bemerkt.

Hi Kai,

das fände ich eher ungünstig wenn man nur kWh angeben kann.

Denn wenn man das nicht nur für ein Haus auswertet sondern auch für einzelne Geräte, dann ist kWh sehr sehr grob und man bekommt kein gutes Bild der Kosten.
Wenn zB nur alle 3-5 Tage eine weitere kWh anfällt, das Gerät aber dauernd läuft, sagt das nicht mehr viel aus.

Gibt ja auch Zähler die man auf Wh einstellen kann oder gleich kWh und Wh liefern (wie zB die Lingg&Janke die ich am liebsten verwende).

Schöne Grüße
Seppm

Hallo, ich habe ein Problem. Der Verbrauch (Grundlage Gas in Liter) wird ca. um den Faktor 10 größer als die Anzeige im Symcon Graph der Basisvariable angezeigt.
Zusätzlich ist dann der Preis nochmal um den Faktor ca. 10? ggf. auch die Z-Zahl*Brennwert=11,11 zu hoch.

Sieht jemand einen groben Fehler?

Verbrauch laut Graph von Symcon:

  • Heute: 2800 Liter
  • Gestern: 7000 Liter

Die Werte kommen nur mit 1 Impuls je 100 Liter.

PS: Die Beschriftung der Felder ist etwas ungenau: Kommt da jetzt der Abschlag und Grundpreis je Monat, Tag oder Jahr rein?

Ich Antworte mir mal selber. Folgende Informationen haben mir zu Anfang gefehlt.

  • Die oben stehende Abfrage nach Einheit - für mich so erkannt - der Zählervariable, stellt offenbar die anzuzeigende Einheit der Ausgabe ein (das hätte ich jetzt manuell per Hand im Profil erwartet)
    → Dies führt dazu, dass ich bei der Angabe Liter eine interne Umrechnung auf die von der Software erwarteten m³ erwartet habe → Wandlerfaktor im Tarif hat mir hier kurzfristig geholfen
    → Unabhängig der angezeigten Einheit wird intern (auch bei Gas) immer auf kWh umgerechnet. Das ist auch durchaus so zu erwarten, verwirrt aber wenn die Einheit autom. auf Liter gesetzt ist.

Modul Tarif:

  • Spaltenbreite zu breit. 1650px muss man erstmal haben. Allerdings recht viel weiß

  • Obwohl mit den drei Gasfaktoren multipliziert wird, ist die Vorauswahl ungünstigerweise 0. Hier würde ich mir wünschen, wenn ‚irgendwelche‘ halbwegs passenden Werte (z.B: Z-Zahl: 0.9597, Brennwert: 11,58) oder die eins (für - keine Änderung) eingetragen wären.

  • Der Grundpreis ist für jeden Tag anzugeben. Leider kann man hier nur zwei Nachkommastellen angeben. Bei 365 Rundungsfehlern kann hier aber ganz schön was auflaufen. Bitte auf drei Stellen anpassen. Feldbeschriftung bitte dann auch in Grundpreis je Tag umbenennen.

  • Abschlagszahlung gilt je einen von 12 Monaten. Die Stadtwerke meiner Stadt haben aber nur 11 Abschläge, welche idr. den Gesamtbetrag abdecken sollten. Der 12. Monat ist für ggf. zu leistende Nachzahlungen bewusst ‚frei‘.
    Feldbeschriftung bitte ebenso anpassen.

Grundsätzlich möchte ich auch nochmal an die typischen PHP Probleme mit Fließkommazahlen erinnern. Ggf. kann es deutliche Unterschiede geben, ob man je Archivzeile rechnet oder je auf die passende Variable (also ganzer Tag, Woche, etc.) aggregiert abfragt.

Und da ich gerne Rechenzeit optimiere: Kann man die Berechnung so umbauen, dass im Normalfall (ohne Änderung der Konfiguration) eine Aktualisierung nur die wirklich relevanten Daten (also idr. HEUTE) ausrechnet? Selbst das Erreichen des Abschlagbetrages (der übrigens idr. bei keinem Anbieter mit dem Jahr gleich sitzt) würde mir alle 24h ausreichen.

Zudem wundert es mich etwas, dass nicht mit den schon durch Symcon Aggregierten Werten gerechnet wird. Das hat bestimmt einen Grund, den ich nur bisher nicht erkannt habe.

Hi @BommelPommel,
eine Frage zu Deinem Skript.

Wenn Du die Kosten um 23:59 einträgst und das eine Zähler Variable ist (hätte ich gerne damit ich Balken und keine Linie habe), müsste dann nicht am gleichen Tag um 00:00 eine 0 eingetragen werden, damit er das richtig hochzählt?

Hab es nämlich gerade bei einer geloggten Zählervariabel (Kosten heute) gemacht und dann zeigt er mir den Wert nicht richtig an.
Hier
03.02. 23.59 Wert 0
04.02. 23.59 Wert 0,74 / angezeigt wird 0,74 passt
05.02. aktuell Wert 1,80 / angezeigt wird aber 1,06 und nicht die 1,8 für heute.

Oder hab ich da einen Wurm drin?

Merci Seppm

Das ist eine spannende Frage und könnte evtl. die Lösung für „meinen Denkfehler“ sein. schau mal das ich da was einbaue.

Hab ich gerade eingebaut,
EDIT: hab es jetzt gesäubert und mehrfach getestet auch mit mehreren Jahren auf einmal. Würde es aber nicht länger als 1 Jahr machen, denn mir ist Symcon ein paar mal abgeschmiert dabei.

Hier das Skript das ich von Dir bzw ggf. KaiS anpasste:
Es reaggregiert die Variable nun auch am Ende.

<?php

// Diese Script liest eine Variable aus und berechnet die Kosten für den jeweilgen Tag in Verbindung mit dem Energierechner von KaiS
// Archiv steht auf Zähler und bitte NICHT "0 Werte ignrorieren" anklicken, sonst stimmen die Tageswerte nicht.
// Das Skript basiert auf KaiS und BommelPommels Vorarbeit. 
// Ich (seppm) hab nur den Teil ergänzt der für den jeweiligen Tag um 00:01 eine 0.01 im Archiv einträgt damit der Zähler stimmt (nun kann man auch einstellen dass die Nullen ignoriert werden).

// Folgende Daten anpassen
$StartDate = "01.01.2023";
$EndDate = "31.01.2023"; //Heute - 1 Tag da Werte nicht neuer sein dürfen und der Wert immer für 23:59 gesetz wird
$InstanzIDEnergieRechner = 36826;
$ArchiveId = 43570; // Archive Handler
$Zielvariable = 21546; // Da wo die Daten rein sollen ... am besten Kosten heute - hier dann aber die Archivierung einstellen

// ab hier nichts mehr anpassen
while (strtotime($StartDate) <= strtotime($EndDate)) {

    $Start = $StartDate; 
    $End = $StartDate;

    $Start = date('d.m.Y H:i', strtotime($Start));
    $End = date('d.m.Y H:i', strtotime($End . ' +1439 minutes'));
   
    $InstanzID = $InstanzIDEnergieRechner;
    $Start = strtotime($Start);
    $Ende = strtotime($End);
    $aggregationsTyp = 0;
    $result = ER_calculate($InstanzID , $Start, $Ende,$aggregationsTyp);

	$Cost = $result["costs"];
    $Timestamp = strtotime($End);

    $ArchiveArray[] = array(
        'TimeStamp' => $Timestamp,
        'Value' => $Cost
    );

    AC_AddLoggedValues($ArchiveId, $Zielvariable, $ArchiveArray);
    unset($ArchiveArray);

        // Sepp Teil ergänzt um 0 als Startwert kurz nach Mitternacht einzutrageneinzutragen
        $Cost2 = 0.01 ; // Verhindert dass es bei Zähler mit ignorieren von Nullen dann falsche Zahlenwerte für den Tag gibt (war vorher auf 0)
        $End2 = date('d.m.Y H:i', strtotime($End . ' +2 minutes'));  // wird damit um 00:01 eingetragen
        $Timestamp2 = strtotime($End2);

        $ArchiveArray2[] = array(
            'TimeStamp' => $Timestamp2,
            'Value' => $Cost2
        );

        AC_AddLoggedValues($ArchiveId, $Zielvariable, $ArchiveArray2);
        unset($ArchiveArray2);
  
    $StartDate = date('d.m.Y H:i', strtotime($StartDate . ' +1 day '));
}
AC_ReAggregateVariable($ArchiveId, $Zielvariable);

Cheers Seppm

EDIT: Skript angepasst damit es auch bei Zähler geht und man Null Werte ignorieren kann. Wurde für mich notwendig da ich aus Kais Modul jeden Tag manchmal eine Null reinbekam oder öfter und dann die Werte nicht mehr stimmten.
Nun geht also beides.

Ich mag nochmal meine Frage stellen:

Blockzitat
Wenn ich nun n Instanzen des Energierechners habe, könnte ich irgendwo den Gesamtverbrauch, d. h. die Summe aller Instanzen „abgreifen“?

Wie würdet ihr das lösen?
Oder habe ich hier eine Summenfunktion übersehen?

Also würdest du eine Auswahl für die Anzeige erwarten und eine für die Umrechnung?
Das könnte tatsächlich Sinn machen und würde es evtl. vereinfachen.

Das hatte ich so eingestellt, dass die Überschriften auch angezeigt werden, da kann ich aber gerne noch etwas verändern.

Das ist Geschmackssache, kann ich gerne eintragen. Dann gib mir bitte die genauen Werte vor, welche ich dort eintragen soll.

Wieso für jeden Tag? Hast du jeden Tag einen anderen Preis?
Die Nachkommastellen kann ich gerne anpassen.

Da hast du recht, ich habe gerade bei mir nachgeschaut, bei mir ist der Januar „frei“.
Ich schaue mal, ob ich das anpassbar gestalte.

Das kann ich mir auch bei Gelegenheit nochmal anschauen.

Das kannst du selbst einstellen, allerdings wird die stündliche Aggregation benötigt, um auch die Nacht- & Tagtarife zu berechnen.

Ich finde deine Art und Weise, wie du das kommunizierst nicht so passend, du schreibst hier mit einem Entwickler, der das alles in seiner Freizeit macht und nicht mit einem Angestellten von dir. :wink:

Grüße,
Kai

3 „Gefällt mir“

Da gibt es keine Funktion.
Aber man könnte ein ganz einfaches Script schreiben, welches eine Summe über alle „Gesamt“ Variablen der Energierechner erstellt.

Grüße,
Kai

Sowas in der Art?

setValueFloat(Ziel, getValueFloat(x)+...+getValueFloat(z))

Vermutlich würde es reichen, das einmal am Tag zu aktualisieren.
Mehrere Triggervariablen (auf Änderung), kann ich nicht eingeben, da müsste ich pro Variable einen Trigger setzen.

Hier ein Script dafür:

<?php

$GesamtkostenVariable = 12345; //Variable für die Gesamtkosten
$GesamtverbrauchVariable = 54321; //Variable für den Gesamtverbrauch

$EnergierechnerGUID = '{E02FA048-D39D-4B25-A241-9FAD43789764}';
$InstanzIDs = IPS_GetInstanceListByModuleID($EnergierechnerGUID);

$totalCosts = 0;
$totalConsumption = 0;

foreach ($InstanzIDs as $id) {
    $ChildrenIDs = IPS_GetChildrenIDs($id);
    foreach ($ChildrenIDs as $ChildrenID) {
        if (IPS_GetObject($ChildrenID)['ObjectIdent'] == 'totalCosts') {
            $totalCosts += GetValue($ChildrenID);
        }
        if (IPS_GetObject($ChildrenID)['ObjectIdent'] == 'totalConsumption') {
            $totalConsumption += GetValue($ChildrenID);
        }
    }
}

SetValue(12345, $totalCosts);
SetValue((54321, $GesamtverbrauchVariable);

Du musst nur oben die Variablen anpassen, in denen du die Gesamtwerte speichern möchtest.
Das Script suchst automatisch alle „Gesamt“ Variablen von allen Energierechner Instanzen und rechnet die zusammen.

Grüße,
Kai

2 „Gefällt mir“

Da das Feld in der selben Zeile wie der Basiswert steht, bin ich halt davon ausgegangen, hier die Einheit des Basiswerts (wichtig für die Umrechnung) einzustellen.

Die Ausgabe ist - soweit ich das verstanden habe - sowieso immer in kWh. Für MICH wäre es nicht notwendig, hier einstellbar das Anzeige-Profil zu bearbeiten. Mir würde ein generisches ‚Energierechner.AUSGABE‘ Profil reichen, welches als Prefix ‚L oder kWh‘ hat und von mir einmalig bearbeitet werden will.

Meinte damit, der Feldwert ist heruntergebrochen auf EINEN Tag. Beispiel: Ich habe 170€/Jahr. Jetzt war für mich unklar, trage ich ein:

  • 170€ (Jahresgebühr)
  • 14,166 (Monat)
  • 0,4657 (Tag)

Vielleicht wäre die Bezeichnung ‚Grundpreis heruntegerechnet auf EINEN Tag‘ gut?

Hm. Ich muss zugeben, ich habe mich (aus meiner Perspektive) ausschließlich darauf bemüht so kurz und prägnat wie möglich ein Feedback zu den FUNKTIONEN zu geben. Es ist nicht meine Intention hier irgendwelche nicht explizit geschriebenen Untertöne mitschwingen zu lassen.

Ich überlege mir da nochmal was. Da werde ich sicherlich noch etwas dran verändern.

Angegeben wird der Grundpreis vom Jahr, das rechnet das Modul dann intern auf den Tag um. Ich dachte das wäre verständlich. Nehme ich aber mit in die Doku auf, da fehlt es definitiv.

Alles gut. :slight_smile:

Grüße,
Kai

1 „Gefällt mir“

Bzgl. Grundpreis, hab es gefunden:

Damit entfällt dann auch die dritte Nachkommastelle bei der Eingabe.

Den Quellcode des Energierechner-Parts hatte ich mir genauer angesehen und hier natürlich nurnoch die übergebene Variable ’ $dailyBasePrice gefunden.

1 „Gefällt mir“