[Modul] Energierechner

Ok, dann schaue ich mir das mal an. Hatte mir zwar mal vor langer Zeit ein Paar Skripte angelegt für die Berechnung, aber blicke da nicht mehr so ganz durch was zählt. Hatte den Zähler Kopf mittlerweile gewechselt vom Powerfox zu einem WLAN Kopf.
Danke dir.

Edit: Funktioniert, habe schon Ganze 3,12 Euro dieses Jahr eingenommen. Wird wohl wieder ein bescheidenes Jahr wie 2023. :roll_eyes:

Ich lese meinen Smartmeter direkt über die Schnittstelle aus.

Wenn ich das hier so richtig verfolgt und verstanden habe muss ich, wenn ich nicht mit einem neuen Zähler (Stand 0 kWh) beginne das Modul 1 Tag laufen lassen und dann am 2. Tag den 1. Tag löschen?

Wie lösche ich ihn?

Wir haben einen Tag/Nachttarif, aber mit 2 getrennten Zählern (1 Zähler 2 „Zählwerke“).
Dann muss ich vermutlich 2 Rechner anlegen?

Vortageswert meiner Meinung nach viel zu hoch…

Habe den Energierechner auch neu im Einsatz, nutze ihn aber ohne Tarife. Meine Zählervariable zeigt für gestern einen Anfang von 504 kWh und gestern kurz vor Mitternacht 520 kWh, ergibt einen Vortagesverbrauch für mich von 16 kWH.

Entweder ich mache einen Denkfehler oder mit meinem System stimmt etwas nicht, der Energierechner zeigt 30 kWh an, auch das Symcon Modul Verbrauch im Zeitraum zeigt den gleichen Wert an…

Hat jemand eine Idee wo bei mir der Fehler liegen könnte? Die Werte habe ich visuell geprüft und keine Unstimmigkeiten festgestellt in den geloggten Werten, gibt es
ein Tool in den ich die Plausibilität checken kann?

Du kannst über das Archiv Werte löschen.

Wenn du zwei Variablen hast, dann musst du zwei Energierechner Instanzen anlegen.

Grüße,
Kai

1 „Gefällt mir“

Schau dir mal mein Modul ArchidatenAnomalien an.

Grüße,
Kai

1 „Gefällt mir“

Hallo Kai,
das ist ja absolut genial, hatte tatsächlich einen Dreher drin, warum auch immer, vielen Dank für den Hinweis!

Hab Dir eine kleine Aufmerksamkeit zukommen lassen… Danke nochmals.

Gruß
Jürgen

Hallo Jürgen,

vielen Dank für den Amazon Gutschein ich habe mich sehr gefreut. :slight_smile:

Grüße,
Kai

1 „Gefällt mir“

Ich hab was für aWattar-Kunden und den Energierechner von Kai gebastelt. Es geht darum, die Daten von aWattar regelmäßig (ab 14:00 stehen die Werte für den nächsten Tag bereit) zu holen und zwei Durchschnittspreise (Tag/Nacht) mit allen Abgaben in die Energierechnerinstanz einzutragen.
Den Code habe ich aus meinem System herausgelöst und alles entfernt, was niicht benötigt wird. Es werden keine Variablen angelegt, lediglich ein zyklisches Ereignis, welches um 14:15 die Daten abholt. Das kann aber auch geändert werden.
Weiters gibt es einen Bereich, wo man die Abgaben an den Netzbetreier und aWatter eintragen kann. Diese werden entweder zum Energiepreis addiert oder als Abgabe in den Energierechner eingetragen.
Es sollte auch auf Deutschland funktionieren.
Einfach die Variable $land mit „de“ befüllen. Hab das aber leider nie getestet.
MwSt Satz kann auch geänert werden. Variable: $mwst.
Es müssen nur Anpassungen bei diesen Variablen gemacht werden.

    //START Individuelle Werte 
    //Eingabe der Start und Ende Stunde für Nachtpreis
    $nacht_start=21;
    $nacht_ende=7;
    $mwst=20;
    //Land "at" für Österreich und "de" für Deutschland
    $land="at";

    //Werte vom Netzbetreiber
    // Euro pro Monat
    $verbrauch_netzentgelt=6.92;
    // Cent pro kWh
    $verbrauch_abgabe=1.06;
    //Cent pro kWh
    $grundpreis_netzentgelt=6.21;

    //aWATTAR Werte
    //Euro pro Monat
    $grundpreis_awattar=5.75;
    //Aktuell kommen 3% Gewinnaufschlag dazu
    $prozent_aufschlag_awattar=1+(3/100);
    //Für Neukunden werden aktuell 1.8 Cent pro kWh addiert. Angabe z.b 1.8
    $cent_aufschlag_awattar=1.8;

    //welcher Tag geholt werden soll. 0 = aktueller tag, -1 = vortag, 1 = nächster tag
    $tag=1;
    //ENDE Individuelle Werte 

Ganz wichtig ist dieser Teil

    //Hier die Splitterinstanz-ID vom Energierechner eintragen
    $energierechnerid=0;

Hier muss die ID der Splitterinstanz vom Energierechner eingetragen werden.

Und hier das ganze Ding. Viel Spaß dabei.

    <?php
    //Hier die Splitterinstanz-ID vom Energierechner eintragen
    $energierechnerid=0;

    //Prüfung ob die Splitterinstanz vom Energierechner existiert
    if ($energierechnerid == 0 or !IPS_ObjectExists($energierechnerid) or IPS_Getinstance($energierechnerid)["ModuleInfo"]["ModuleID"] != "{63472C81-7110-5151-BBE7-DEA310682B31}")
    {
        IPS_LogMessage($_IPS["SELF"],"Keine oder falsche Energierechnerinstanz angegeben");
        echo "Keine oder falsche Energierechnerinstanz angegeben";
        exit();
    }
    //Zyklisches Ereignis erstellen. Täglich um 14:15
    if (!@IPS_GetObjectIDByIdent("ERADDON_AWATTAR",$_IPS["SELF"]))
    {
        $eid = IPS_CreateEvent(1);
        IPS_SetParent($eid, $_IPS["SELF"]);
        IPS_SetEventCyclicTimeFrom($eid, 14, 15, 0);
        IPS_SetEventActive($eid,true);
        IPS_SETIDENT($eid,"ERADDON_AWATTAR");
    }
    //START Individuelle Werte 
    //Eingabe der Start und Ende Stunde für Nachtpreis
    $nacht_start=21;
    $nacht_ende=7;
    $mwst=20;
    //Land "at" für Österreich und "de" für Deutschland
    $land="at";

    //Werte vom Netzbetreiber
    // Euro pro Monat
    $verbrauch_netzentgelt=6.92;
    // Cent pro kWh
    $verbrauch_abgabe=1.06;
    //Cent pro kWh
    $grundpreis_netzentgelt=6.21;

    //aWATTAR Werte
    //Euro pro Monat
    $grundpreis_awattar=5.75;
    //Aktuell kommen 3% Gewinnaufschlag dazu
    $prozent_aufschlag_awattar=1+(3/100);
    //Für Neukunden werden aktuell 1.8 Cent pro kWh addiert. Angabe z.b 1.8
    $cent_aufschlag_awattar=1.8;

    //welcher Tag geholt werden soll. 0 = aktueller tag, -1 = vortag, 1 = nächster tag
    $tag=1;
    //ENDE Individuelle Werte 
    $mwstberechnung=1+($mwst/100);
    $tagpreis=0;
    $nachtpreis=0;
    $tagzaehler=0;
    $nachtzaehler=0;
    //eine Stunde nach Ende Nacht
    $tag_start=$nacht_ende+1;
    //eine Stunde vor Beginn Nacht
    $tag_ende=$nacht_start-1;
    //Gesamtgrundpreis
    $grundpreis=$grundpreis_netzentgelt+$grundpreis_awattar;

    $nextdayurl=mktime(0,0,0,date("m",time()+(24*60*60*$tag)),date("d",time()+(24*60*60*$tag)),date("Y",time()+(24*60*60*$tag)));
    $url='https://api.awattar.'.$land.'/v1/marketdata?start='.$nextdayurl."000";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    if (is_array(json_decode($result,true)))
    {
        $awattar_daten=json_decode($result,true)["data"];
        for ($i=0;$i<=23;$i++)
        {
            if (($i>=0 and $i<=$nacht_ende) or ($i>=$nacht_start and $i<=23)) 
            {
                //+20%MwSt +3% Gewinnauflschag von Awattar
                $nachtpreis=$nachtpreis+($awattar_daten[$i]["marketprice"]/10*$mwstberechnung*$prozent_aufschlag_awattar);
                $nachtzaehler++;
            }
            if (($i>=$tag_start and $i<=$tag_ende))
            {
                //+20%MwSt +3% Gewinnauflschag von Awattar
                $tagpreis=$tagpreis+($awattar_daten[$i]["marketprice"]/10*$mwstberechnung   *$prozent_aufschlag_awattar);
                $tagzaehler++;
            }
        }
        //Nachtpreis + Transportkosten
        $nachtpreis=((($nachtpreis/$nachtzaehler)+$cent_aufschlag_awattar+$verbrauch_netzentgelt+$verbrauch_abgabe)/100);
        //Tagpreis + Transportkosten
        $tagpreis=((($tagpreis/$tagzaehler)+$cent_aufschlag_awattar+$verbrauch_netzentgelt+$verbrauch_abgabe)/100);

        $periode=json_decode(json_decode(IPS_GetConfiguration($energierechnerid),true)["Periods"],true);
        array_push($periode,[
            "StartDate"=>"{\"year\":".date("Y",time()+(24*60*60*$tag)).",\"month\":".date("n",time()+(24*60*60*$tag)).",\"day\":".date("j",time()+(24*60*60*$tag))."}",
            "DayPrice"=>round($tagpreis,7),
            "AdvancePayment"=>0,
            "DeductionsPerYear"=>11,
            "BasePrice"=>$grundpreis,
            "NightPrice"=>round($nachtpreis,7),
            "NightTimeStart"=>"{\"hour\":".$nacht_start.",\"minute\":0,\"second\":0}",
            "NightTimeEnd"=>"{\"hour\":".$nacht_ende.",\"minute\":0,\"second\":0}",
            "ElectricitySuppliers"=>"aWattar",
            "GasPriceCalculationActive"=>false,
            "GasConversionFactor"=>0,
            "GasZNumber"=>0,
            "GasCalorificValue"=>0
        ]);
        IPS_SetProperty($energierechnerid,"Periods",json_encode($periode));
        IPS_ApplyChanges($energierechnerid);
        IPS_LogMessage($_IPS["SELF"],"Daten von aWattar erfolgreich geholt");
    }
    else
    {
        IPS_LogMessage($_IPS["SELF"],"Fehler beim Holen der Daten von aWattar");
    }

Bei mir läuft das schon seit über einem Jahr problemlos. Klar hat man einen Fehler, da nur mit zwei Durschnittspreisen gerechnet wird. Aber der Fehler ist relativ gering. Für mich passt das so um einen Überblick zu behalten.
Man muss sich aber bewußt sein, dass die Berechnung teilweise sehr lange braucht wenn viele Daten vorhanden sind.

Seit ein paar Tagen oder seit der Version 7.1 bekomme ich folgende Warnung ins Log

14.04.2024 00:05:34 | 44160 | MESSAGE | Energierechner       | Einstellungen gespeichert
14.04.2024 00:05:34 | 44160 | WARNING | Energierechner       | Buffer 'Periods' is over 256kB

Kann ich da etwas erhöhen?

Auszug aus der Doku:

Der Buffer besitzt ein Softlimt von 256kB und ein Hardlimit von 1024kB. Das heißt ab 256kB größe wirft IP-Symcon eine „Warning“ in die Meldungen und die maximale Größe des Buffers beträgt 1024kB. Daten größer als 1024kB werden abgeschnitten.

Ich glaube das man das nicht anpassen kann.
Wenn ich wieder mehr Zeit habe, kann ich mal schauen, ob ich das auch anders lösen kann.
Der Fall tritt aber auch nur bei dir auf, weil du so viel Inhalt in der Liste wegen aWATTar hast.

Grüße,
Kai

Das mit der Menge an Einträgen in meiner Instanz hab ich mir auch gedacht. Jedoch tritt es nicht immer auf.
Ich habe mir die letzten Tage angesehen und es tritt nur bei der Berechnung nach Mitternacht auf


Kann es sein, dass das mit meiner Automatik zum deaktiveren/aktivieren der Energierechnerinstanzen.
Das habe ich irgendwann eingeführt, weil die das brauchen damit das mit den Preisen passt - glaube ich. Dieses Skript wird um Mitternacht aufgerufen. Ich bau da noch mehr logging ein.
Da gab es auch einen Beitrag hier im Forum.

<?php
function reload($id)
{
	IPS_SetProperty($id, "Active", false);
	IPS_ApplyChanges($id);
	IPS_SetProperty($id, "Active", true);
	IPS_ApplyChanges($id);
}

$er_id=array(
				57354,
				18894,
				44160,
				22902,
				45025,
				19573,
				40729,
				16012,
				45752,
				10511,
				52772,
				56934,
				23037

);

foreach($er_id as $id)
{
	reload($id);
}

Moin Kai,

ich kriege

30.05.2024, 06:55:53 | TimerPool | Energierechner (ER_UpdateCalculation):
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php:446
Stack trace:
#0 /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php(522): Energierechner->getPrice(1717041600)
#1 /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php(195): Energierechner->calculate(1717020000, 1717044953)
#2 /var/lib/symcon/scripts/__generated.inc.php(14831): Energierechner->updateCalculation()
#3 /-(1): ER_updateCalculation(34794)
#4 {main}
thrown in /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php on line 446

es handelt sich dabei um eine Instanz in der Einheit „Liter“, die zugehörige Var ist ein S0 Impuls, der natürlich als Zähler eingerichtet ist.

Grüße,
Tom

Hallo zusammen,
Ich habe ein komisches Phänomen, bei einer Instanz des energierechner wird seit dem 1.6. der Wert nicht mehr aktualisiert hattet ihr das auch mal oder kennt jemand eine Lösung dazu?
Viele Grüße
Dominik

Ändere mal was an der Konfiguration und Speicher das. Manchmal hilft das.

Gruß
Stephan

Hallo Stephan,
Danke für den Hinweis, nachdem ich nachgedacht habe liegt es an einem Skript was ich umgebaut hatte :thinking:

Viele Grüße
Dominik

Hast du dein Problem in den Griff bekommen?

Grüße,
Kai

Hast du die aktuelle Beta Version installiert?

Grüße,
Kai

Die Warnung ist noch immer da, macht aber sonst keine Probleme. Am Tag kommt diese Warnung nicht.

Das versuche ich gerade. Leider hängt das irgendwie aber verdächtig lange - also ich sehe nur dieses animierte symcon-Logo. „Erneut installieren“ läuft zum gleichen Problem.

Irgendwann kommt ein „Connection lost“