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.