[Modul] Energierechner

Ich bein dabei auf Awattar zu wechseln und mir die Daten täglich zu holen. Awattar hat ja stündliche Preise. Diese einzutragen ist sinnfrei. Aber ich möchte einen ungefähren Überblick haben. So errechne ich für den Tag und für die Nacht einen Durchsnittspreis. Mit allen Abgaben und Grundgebühren. Das funktioniert auch schon, erstellt aber halt jeden Tag einen neuen Datensatz.

Überraschung…
Es gibt eine neue Beta Version, dort habe ich mal versucht aWATTar einzubauen.

In der Tarife Instanz gibt es dafür folgende Einstellung:

image
Dort einfach das Startdatum angeben, ab welchem Datum die Preise von aWATTar bezogen werden sollen.
Wenn die Preise von aWATTar bezogen werden, kann die Liste für die Zeiträume nicht mehr verwendet werden. Wenn der Anbieter also vorher nicht aWATTar war, muss eine extra Tarife Instanz angelegt werden.

In der Energierechner Instanz kann die Zeitraumberechnung auch nicht mehr genutzt werden:


Die Berechnung für den Nachttarif und das Addieren des Grundpreise funktioniert mit aWATTar ebenfalls nicht, ich weiß allerdings auch nicht, ob das benötigt wird.

Wenn die Berechnung stimmt und die Werte passen, dann würde ich versuchen diese Einstellungsmöglichkeiten auszublenden.

Sollte die Berechnung nicht richtig funktionieren wäre es sicherlich sinnvoll ein eigenes Modul dafür zu bauen.

Ich würde mich also freuen, wenn ihr das mal testet.

Edit: Wenn die Berechnugnen passen, versuche aWATTar in die Liste zu integrieren.

Grüße,
Kai

:smiley:
Angefixed worden? Ich kann dir gerne meinen Teil für das Holen und Eintragen in dein Modul geben. Das Abholintervall brauchst nicht. Um 14:00 gibt es die neuen Preise für morgen :wink: . Ich hole um 14:30 ab.

Ich hatte geschrieben, dass ich es es mir irgendwann anschaue. :smiley:
Wie trägst du es in die Liste ein?
Ich möchte ungerne jeden Zeitraum (Stunde oder Tag) einzeln haben.

Grüße,
Kai

Jede Stunde drinnen zu haben macht meiner Meinung nach keinen Sinn. Daher rechne ich für Tag und Nacht einen Durchshnitt aus. Auf den Cent wird es so und so nie genau stimmen. Das ist aber auch nicht wesentlich.
Was du auf jeden Fall machen musst, ist eine Unterscheidung zwischen Österreich und Deutschland. Die Preise sind nicht gleich.

<?php
$nacht1start=0;
$nacht1ende=7;
$tagstart=8;
$tagende=20;
$nacht2start=21;
$nacht2ende=23;

$tagpreis=0;
$nachtpreis=0;
$tagzaehler=0;
$nachtzaehler=0;

$verbrauch_netzentgelt=9.114;
$verbrauch_abgabe=0.12;

$grundpreis_netzentgelt=3.6;
$grundpreis_awattar=5.75;
$grundpreis=$grundpreis_netzentgelt+$grundpreis_awattar;

$energierechnerid=54617;

$tag=1;

$sqlserver=getvalue(59311);
$user=getvalue(41755);
$password=getvalue(17356);
$database=getvalue(33225);
$dbhandler=mysqli_connect($sqlserver,$user,$password,$database);
mysqli_query($dbhandler,"delete from awattar where datum='".date("Y-m-d",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))))."'");

$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.at/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);

$awattar_daten=json_decode($result,true)["data"];
for ($i=0;$i<=23;$i++)
{
	if (($i>=$nacht1start and $i<=$nacht1ende) or ($i>=$nacht2start and $i<=$nacht2ende)) 
	{
		$nachtpreis=$nachtpreis+($awattar_daten[$i]["marketprice"]/10*1.2*1.03);
		$nachtzaehler++;
	}
	if (($i>=$tagstart and $i<=$tagende))
	{
		$tagpreis=$tagpreis+($awattar_daten[$i]["marketprice"]/10*1.2*1.03);
		$tagzaehler++;
	}
	$preis=($awattar_daten[$i]["marketprice"]/10*1.2*1.03)+$verbrauch_netzentgelt+$verbrauch_abgabe;
	$timestart=$awattar_daten[$i]["start_timestamp"]/1000;
	mysqli_query($dbhandler,
    "insert into awattar (datum,stunde,preis) values ('".
    date("Y-m-d",$timestart)."',".
    $i.",".
    number_format($preis,4).
    ")");
}
mysqli_close($dbhandler);
$nachtpreis=($nachtpreis/$nachtzaehler)+$verbrauch_netzentgelt+$verbrauch_abgabe;
$tagpreis=($tagpreis/$tagzaehler)+$verbrauch_netzentgelt+$verbrauch_abgabe;

$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"=>$tagpreis,
	"AdvancePayment"=>0,
	"BasePrice"=>$grundpreis,
	"NightPrice"=>$nachtpreis,
	"NightTimeStart"=>"{\"hour\":".$nacht2start.",\"minute\":0,\"second\":0}",
	"NightTimeEnd"=>"{\"hour\":".$nacht1ende.",\"minute\":0,\"second\":0}",
	"ElectricitySuppliers"=>"Awattar",
	"GasPriceCalculationActive"=>false,
	"GasConversionFactor"=>0,
	"GasZNumber"=>0,
	"GasCalorificValue"=>0
]);
IPS_SetProperty($energierechnerid,"Periods",json_encode($periode));
IPS_ApplyChanges($energierechnerid);

Ich würde tatsächlich von jeder Stunde die Werte ins Modul holen und intern verarbeiten. Dann hätte man es wirklich genau.

Grüße,
Kai

Ok, sicher auch ein Weg. Da das ja in der aktuellen Version nicht geht, hab ich mir damit geholfen. Aber wie oben ergänzt: Österreich/Deutschland haben unterschiedliche Preise.
Die Grundpreise pro kWh und pro Monat (vom Netzbetreiber und von Awattar) sind ja bekannt und könnten auch eingegeben werden.
Was auch noch bei Awattar dazukommt ist ein 3%iger Aufschlag. das ist das „*1.03“ bei mir. Der kommt zu den Werten die über die Json Schnittstelle kommen noch dazu. Ebenso die Mehrwertsteuer. In Österreich sind das 20%.

Kannst du denn mal meine Änderung im Modul testen und schauen, ob die Berechnung passen würde? Wenn das passt, dann würde ich versuchen es pro Eintrag in der Liste einzubauen.

Edit: Okay, ich glaube ich nehme das erstmal wieder raus und mache ein Kopie der Splitter Instanz dafür fertig. :smiley:

Grüße,
Kai

Kann ich es so machen, dass ich eine dritte Splitter Instanz anlege und damit teste? Ich hab eine Instanz für meinen aktuellen Lieferanten. Eine Spielinstanz mit meiner Version. Deine wäre dann die dritte. Meine Berechnungen hängen derzeit noch an der ersten.

Das könnte eine gute Idee sein :wink:

Am besten wartest du noch, bis ich eine neue Version online gestellt habe.

Grüße,
Kai

Das Modul ist echt Cool.
Danke Kai für die Bereitstellung.

Ich hatte Energieverbrauch bis dato nicht ganz so wichtig genommen, denn als Nachtspeicherheizer ist es völlig egal, ob ich den Fernseher im Standby laufen lasse :slight_smile:

Jetzt aber …

Also habe ich nochmal das Verbrauchthema angeschaut.

Long Story short:
Der Zähler funktioniert bei mir ganz wunderbar, alleine Euros, will nicht.
Wobei ich mich auch gerade frage: Müsste der Gesamtverbrauch nicht >0 sein?

Tarif habe ich angelegt, muss ich den noch „irgendwie verknüpfen“?

Mic

das kann ja auch nicht funktionieren, dein Zeitraum beginnt erst nächsten Monat

im Februar wirds dann plötzlich klappen

:smile:

Das hast Du wohl vollkommen Recht, ab da die neuen Strompreise.
Muss ich die alten noch eintragen :wink:

Danke

Dass Gesamtverbrauch (kWh) 0, kannst du dir das erklären?

Vor allen Dingen würde ich erst einmal die Werte richtig eintragen.
Strom ist zwar aktuell recht teuer, aber €41,79 kostet auch bei euch bestimmt nicht die kWh? :wink:

VG,
Doc

Ja ist mir auch gerade aufgefallen.
Wer weiß, wie sich der Strompreis noch entwickelt :wink:

Gesamtverbrauch ist auch klar.
Das bezieht sich auf einen Zeitraumberechnung, dann muss ich da auch was eingeben.

Wie so oft sitzt das Problem an der Tastatur.

Nachdem ich die Preise nun korrekt erfasst habe,

liefern die Shellys, die in kWh berichten, die richtigen Preise.
Bei den Homematics, die in Wh berichten, habe ich aber Preise als wären es kWh.

image

In der Instanz habe ich aber Wh gewählt:
image

Nach Preisänderung habe ich die komplette Energierechne Instanz nochmal neu angelegt.
Selbes Ergebnis.

Keiner der 41,79€ pro kWh bezahlt? :thinking: :sweat_smile: :rofl:

Ich habe heute bemerkt, dass ich beim Eintragen in das Modul einen Fehler beim Preis pro kWh habe. Die waren um den Faktor 100 zu hoch. Das habe ich jetzt korrigiert. Ebenso beim Eintrag in die Datenbank.

<?php
$nacht1start=getvalue(38721);
$nacht1ende=getvalue(36999);
$tagstart=getvalue(26596);
$tagende=getvalue(16994);
$nacht2start=getvalue(58800);
$nacht2ende=getvalue(22461);

$tagpreis=0;
$nachtpreis=0;
$tagzaehler=0;
$nachtzaehler=0;

$verbrauch_netzentgelt=getvalue(16967);
$verbrauch_abgabe=getvalue(35985);

$grundpreis_netzentgelt=getvalue(51369);
$grundpreis_awattar=getvalue(52484);
$grundpreis=$grundpreis_netzentgelt+$grundpreis_awattar;

$durchschnitttagid=59403;
$durchschnittnachtid=34028;
$energierechnerid=54617;

$tag=1;

$sqlserver=getvalue(59311);
$user=getvalue(41755);
$password=getvalue(17356);
$database=getvalue(33225);
$dbhandler=mysqli_connect($sqlserver,$user,$password,$database);
mysqli_query($dbhandler,"delete from awattar where datum='".date("Y-m-d",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))))."'");

$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.at/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 (count(json_decode($result,true)["data"])>0)
{
    $awattar_daten=json_decode($result,true)["data"];
    for ($i=0;$i<=23;$i++)
    {
    	if (($i>=$nacht1start and $i<=$nacht1ende) or ($i>=$nacht2start and $i<=$nacht2ende)) 
    	{
		    $nachtpreis=$nachtpreis+($awattar_daten[$i]["marketprice"]/10*1.2*1.03);
		    $nachtzaehler++;
	    }
	    if (($i>=$tagstart and $i<=$tagende))
	    {
    		$tagpreis=$tagpreis+($awattar_daten[$i]["marketprice"]/10*1.2*1.03);
		    $tagzaehler++;
	    }
	    $preis=(($awattar_daten[$i]["marketprice"]/10*1.2*1.03)+$verbrauch_netzentgelt+$verbrauch_abgabe)/100;
	    $timestart=$awattar_daten[$i]["start_timestamp"]/1000;
	    mysqli_query($dbhandler,
        "insert into awattar (datum,stunde,preis) values ('".
        date("Y-m-d",$timestart)."',".
        $i.",".
        number_format($preis,4).
        ")");
    }
    mysqli_close($dbhandler);
    $nachtpreis=(($nachtpreis/$nachtzaehler)+$verbrauch_netzentgelt+$verbrauch_abgabe)/100;
    $tagpreis=(($tagpreis/$tagzaehler)+$verbrauch_netzentgelt+$verbrauch_abgabe)/100;
    
    setvalue($durchschnitttagid,$tagpreis);
    setvalue($durchschnittnachtid,$nachtpreis);

    $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"=>number_format($tagpreis,4,".",","),
    	"AdvancePayment"=>0,
    	"BasePrice"=>$grundpreis,
    	"NightPrice"=>number_format($nachtpreis,4,".",","),
    	"NightTimeStart"=>"{\"hour\":".$nacht2start.",\"minute\":0,\"second\":0}",
    	"NightTimeEnd"=>"{\"hour\":".$nacht1ende.",\"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_RunScript(30771);
}

DIe Berechnung ist also noch falsch für Wh?
Schau ich mir an, aber wahrscheinlich erst nach dem Wochenende, oder morgen Abend in Lübeck beim Event. :slight_smile:

Grüße,
Kai