Stammtisch Österreich (Ost)

servus, sry die späte antwort ^^ aber wir sind auch wieder am start :smiley: lg

Hallo :smiley:,
nicht vergessen, an diesem Freitag im Alten Zollhaus :beers:
Bin gerade am wechseln meines Stromanbieters auf Smart Control ( smartENERGY ).
Dieser bietet einen CSV Download, Preise für den aktuellen Tag an.
Hat jemand eine Idee, wie ich dies in Symcon einbinden kann?
LG Willi

wie kann man das vergessen :wink:
ja diesbezüglich sollte und bin ich auch am überlegen bei 25 MW im Jahr :joy:
da haben wir ja schon ein Gesprächs Thema für Freitag :stuck_out_tongue_winking_eye:

lg

Servus
In der Tat würde ich euch gerne mal wieder besuchen. Fürn aktuellen Termin passts aber leider nicht.
Nächstes mal gerne, wenns dann etwas wärmer ist.

schöne Grüße aus dem Süden
Bernhard

Hello! - Ja da haben wir wieder ein unerschöpfliches Thema. Ich mache das schon einige Zeit mit aWATTar. Eben stündlich anderer Preis - bei mir hat sich gezeigt dass die stündliche Anpassung wichtig ist, weil es eben zeitweise auch zu negativen Preisen kommt. Mir scheint die „Managementgebühr“ je kWh hoch im Gegensatz zur Berechnung beiaWATTar. Wir können das ja anhand von Beipielen mal durchrechnen…
PS: Ich speicher alle geplanten Werte von aWATTar (kommt als JSON) in meiner MySQL DB. Je Stunde eine Zeile - um eben auch alle zuküftigen Werte zu haben (ohne Archiv tricksen). Dort sind Spalten für Kosten je Stunde = echte Kosten (nach Ablauf der Stunde hinzugefügt) bzw alterative Kosten zb EVN, wienstrom usw) sowie kWh Verbrauch usw. Aus der DB kann ich berechnen welches zb das billigste 4 Stunden Fenster ist um das Auto zu laden, oder welche Stunde die Beste für die Waschmaschine sein wird.
Bis Freitag - LG Alexander

Sehr Gut :wink:,
Ja leider geht die Einbindung für die zukünftigen Stromtarife in IP-Symcon noch nicht.
In naher Zukunft, muss sich das Entwickler Team Symcon was einfallen lassen!
Bis Freitag - LG Willi

Da gibts auch eine API die dir json Daten liefert :wink:
https://www.smartenergy.at/api-schnittstellen
Ich hab mir den Anbieter mal angeschaut und muss das durchrechnen. aWattar hat offenbar was neues eingeführt

  • Teilbeträge
  • zusätzlich 1,5 Cent auf den Preis (wo eh schon 3% Aufschlag draufkommen)
    Mal schauen, ob meine Ära bei aWattar nach einem Jahr zu Ende geht. Hab denen mal eine Anfrage geschickt. Ich habe keine Benachrichtigung über die Änderung bekommen, aber eventuell gilt das nur für Neukunden.

Hallo Helmut,
danke für die Info, war mir nicht bewusst :slightly_smiling_face:
Möchte dies in Symcon integrieren, dabei würde ich Hilfe benötigen :roll_eyes:
Vielleicht, kann mich da wer unterstützen.
Am Stammtisch auch angesprochen, dass ein Modul sicherlich sehr Interessant sein könnte,
Die die noch keinen stündlichen Tarif haben, als Vergleich zum jetzigen, über die vergangenen Monate, den durchschnittlichen Tarif berechnen könnten.
LG Willi

Habe gerade gelesen, dass der Energierechner fast dafür geeignet sein sollte?!
Die stündlichen Tarife, sind noch nicht eingebunden.
Da hat Helmut schon einiges getestet :upside_down_face:
LG Willi

Ja, habe ich. Ich berechne aus den 24 Preisen 2 Durchschnittspreise und die werden als Tag bzw. Nachpreis in die Splitterinstanz vom Energierechner eingetragen.
Ebenso speichere ich mir wie @RedRaz die Werte in einer SQL Tabelle und generiere daraus eine Balkenanzeige. Bei mir aber als HTML und nicht mit dem Archiv.
Daneben führe ich noch eine Exceltabelle die alle Werte enthält. Das mit den zwei Durchschnittspreisen funktioneirt erstaunlich gut und genau genug für mich.
Ich kann dir gerne meine Skripts zur Verfügung stellen. Bei smartEnergy musst aber aufpassen, die liefern Preise pro 15 Minuten im json.

Hier meine Skripts für aWattar

Dieses Skript macht folgendes

  • holt die Daten von aWattar
  • fügt sie in eine SQL Tabelle ein
  • erstellt eine neue Zeile für den Energierechner
  • ruft noch diverse andrere Skripte auf, für die Ermittlung der Ladezeiten und die Erstellung der Diagramme.
  • sendet ein Mail mit den Strompreisen
<?php
$nacht1ende=getvalue(36999);
//eine Stunde nach Ende Nacht
$tagstart=getvalue(36999)+1;
//eine Stunde vor Beginn Nacht
$tagende=getvalue(58800)-1;
$nacht2start=getvalue(58800);

$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;

$prozent_aufschlag_awattar=1+(getvalue(59894)/100);
$cent_aufschlag_awattar=getvalue(29086);

$durchschnitttagid=58107;
$durchschnittnachtid=35383;
$energierechnerid=16653;

//welcher Tag geholt werden soll. 0 = aktueller tag, -1 = vortag, 1 = nächster tag
//die neuen Werte werden jeden Tag um 14:30 für den nächsten Tag geholt
$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 (is_array(json_decode($result,true)))
{
    $awattar_daten=json_decode($result,true)["data"];
    for ($i=0;$i<=23;$i++)
    {
    	if (($i>=0 and $i<=$nacht1ende) or ($i>=$nacht2start and $i<=23)) 
    	{
            //+20%MwSt +3% Gewinnauflschag von Awattar
		    $nachtpreis=$nachtpreis+($awattar_daten[$i]["marketprice"]/10*1.2*$prozent_aufschlag_awattar);
		    $nachtzaehler++;
	    }
	    if (($i>=$tagstart and $i<=$tagende))
	    {
            //+20%MwSt +3% Gewinnauflschag von Awattar
    		$tagpreis=$tagpreis+($awattar_daten[$i]["marketprice"]/10*1.2*$prozent_aufschlag_awattar);
		    $tagzaehler++;
	    }
        //+20%MwSt +3% Gewinnauflschag von Awattar + die Transportkosten vom Netzbetreiber
	    $preis=(($awattar_daten[$i]["marketprice"]/10*1.2*$prozent_aufschlag_awattar)+$cent_aufschlag_awattar+$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,7).
        ")");
    }
    mysqli_close($dbhandler);
    //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);
    
    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"=>round($tagpreis,7),
    	"AdvancePayment"=>0,
		"DeductionsPerYear"=>11,
    	"BasePrice"=>$grundpreis,
    	"NightPrice"=>round($nachtpreis,7),
    	"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);
    //Aufruf für die Erstellung eines Balkendiagramms
    IPS_RunScriptWait(30771);
    //IPS_RunScriptWait(59360);
	IPS_RunScriptWait(59360);
	//Ladezeiten für den nächsten Tag ermitteln, HTML Austage erstellen
	IPS_RunScriptWaitEx(47645,array("tag"=>1));	
    IPS_RunScriptWait(59163);
    //Übersicht neu erstellen
    IPS_RunScriptWait(24073);
	Global_Log_Eintrag_erstellen("SUCCESS","Awattar","Awattar Preise aktualisiert");

	//Preisinformation per Mail senden
	if (round($tagpreis,2) <=0.20)
	{
		        $tagpreistext="Der Tagespreis ist niedrig! (bis 0,20 €/kWh)";
	}
	elseif(round($tagpreis,2) >=0.21 and $tagpreis <= 0.30)
	{
		        $tagpreistext="Der Tagespreis ist normal! (0,21 €/kWh-0,30 €/kWh)";
	}
	else
	{
		        $tagpreistext="Der Tagespreis ist hoch! (ab 0,30 €/kWh)";
	}
	if (round($nachtpreis,2) <=0.20)
	{
		        $nachtpreistext="Der Nachtpreis ist niedrig! (bis 0,20 €/kWh)";
	}
	elseif(round($nachtpreis,2) >=0.21 and $nachtpreis <= 0.30)
	{
		        $nachtpreistext="Der Nachtpreis ist normal! (0,121 €/kWh-0,30 €/kWh)";
	}
	else
	{
		        $nachtpreistext="Der Nachtpreis ist hoch! (ab 0,30 €/kWh)";
	}
	RequestAction(28508,strtotime("tomorrow"));
	IPS_Sleep(2000);
	$diagram=getvalue(11531);
	$mailtext="<html>Strompreisinformation für ".date("d.m.Y",$nextdayurl)."<br>Durchschnittspreis Tag: ".number_format($tagpreis,2,",",".")." €/kWh. ".$tagpreistext."<br>Durchschnittspreis Nacht: ".number_format($nachtpreis,2,",",".")." €/kWh. ".$nachtpreistext."<br>".$diagram."</html>";
	SMTP_SendMailEx(27953,"mail@gmail.com","Strompreisinformation",$mailtext);
	SMTP_SendMailEx(27953,"mail@outlook.at","Strompreisinformation",$mailtext);
	RequestAction(28508,time());
}
else
{
	Global_Log_Eintrag_erstellen("ERROR","Awattar","Fehler bei Preisupdate");
	SMTP_SendMailEx(27953,"mail@gmail.com","Fehler Awattar","Fehler bei Preisupdate");
}

Dieses Skript erstellt ein Balkendiagramm mit einem Vergleich (gestern/heute/morgen) und eine HTML Tabelle (sortierbar) mit den stündlichen Preisen

<?php

$sqlserver=getvalue(59311);
$user=getvalue(41755);
$password=getvalue(17356);
$database=getvalue(33225);
$dbhandler=mysqli_connect($sqlserver,$user,$password,$database);

$i=0;
$datumvortag=date("Y-m-d",getvalue(28508)-24*60*60);
$datum=date("Y-m-d",getvalue(28508));
$datummorgen=date("Y-m-d",getvalue(28508)+25*60*60);

$datenvor= mysqli_query($dbhandler,"select * from awattar where datum='".$datumvortag."' order by stunde");
$daten= mysqli_query($dbhandler,"select * from awattar where datum='".$datum."' order by stunde");
$datenmorgen= mysqli_query($dbhandler,"select * from awattar where datum='".$datummorgen."' order by stunde");

$preis=array(array());
$preis_tabelle=array();
while($zeile = mysqli_fetch_object($daten))
{
    $zeilevor=mysqli_fetch_object($datenvor);
    $zeilemorgen=mysqli_fetch_object($datenmorgen);
    if ($datenvor->num_rows >0) $preis[$i][0]=$zeilevor->preis; else $preis[$i][0]=0;
    if ($daten->num_rows>0) $preis[$i][1]=$zeile->preis; else $preis[$i][1]=0;
    $preis_tabelle[$i]=$zeile->preis;
    if ($datenmorgen->num_rows>0) $preis[$i][2]=$zeilemorgen->preis; else $preis[$i][2]=0;
    $i++;
}

if ($i>0)
{
    $html="
    <html>
    <head>
        <script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>
        <script type=\"text/javascript\">
        google.charts.load('current', {'packages':['bar']});
        google.charts.setOnLoadCallback(drawChart);

        function drawChart() {
            var data = google.visualization.arrayToDataTable([
            ['Stunde', '".date("d.m.Y",getvalue(28508)-24*60*60)."', '".date("d.m.Y",getvalue(28508))."', '".date("d.m.Y",getvalue(28508)+25*60*60)."']";

    for ($i=0;$i<=23;$i++)
    {
        $html=$html.",".PHP_EOL."['".$i."-".$preis[$i][1]."',".number_format($preis[$i][0],7,".",",").",".number_format($preis[$i][1],7,".",",").",".number_format($preis[$i][2],7,".",",")."]";
    }
    $html=$html."
            ]);

            var options = {
            chart: {
                title: 'aWATTar',
                subtitle: 'Stündliche Preise €/kWh',
            }
            };

            var chart = new google.charts.Bar(document.getElementById('columnchart_material'));

            chart.draw(data, google.charts.Bar.convertOptions(options));
        }
        </script>
    </head>
    
        <div id=\"columnchart_material\" style=\"width: 100%; height: 380px;\"></div>
    </body>
    </html>
    ";
}
else
{
    $html="
    <html>
<head>
<link rel=\"stylesheet\" href=\"../skins/WwXSkin/webfront.css\">
<title></title>
</head>
<body>
<h2><span style=\"color:white;\"><span style=\"font-family:arial,helvetica,sans-serif;\">Keine Daten gefunden!</span></span></h2>
</body>
</html>
";
}
//HTML - Datei erzeugen
file_put_contents("c:\\Program Files\\Symcon\\webfront\\awattar.html",$html);
//damit wird die Anzeige aktualisiert
setvalue(42001,"<center><iframe src=\"awattar.html\" height=\"400px\" width=\"100%\" frameborder=\"0\"></iframe></center>");
//setvalue(42001,$html);
mysqli_close($dbhandler);

//Übersicht Preise erstellen
$html=
'<html>
 <head>
 <link rel="stylesheet" href="../skins/WwXSkin/webfront.css">
  <script>'.IPS_GetScriptContent(18188).'</script>
 </head>
 <body>
<div>
  <table id="T1" class="wwx" border="1" style="width:30%;">
  <caption>Stündliche Preise für '.date("d.m.Y",getvalue(28508)).'</caption>
   <thead class="blue">
    <tr>
     <th>Uhrzeit <button onclick="sortTable(0,1)">&uarr;</button><button onclick="sortTable(0,0)">&darr;</button></th>
     <th>Preis <button onclick="sortTable(1,1)">&uarr;</button><button onclick="sortTable(1,0)">&darr;</button></th>
    </tr>
   </thead>
   <tbody>';
for ($i=0;$i<=23;$i++)
{
    
    $html=$html.'<tr>';
    $html=$html.'<td>'.str_pad($i,2,0,STR_PAD_LEFT).'</td>';
    $html=$html.'<td>'.number_format($preis_tabelle[$i],7,",",".").'</td>';
	$html=$html.'</tr>';
}
$html=$html.'
   </tbody>
  </table>
  </div>
 </body>
</html>';

SetValue(11531,$html);
IPS_RunScript(59360);

Ich hoffe das hilft etwas.

Gilt für Neukunden. Das giltb schon seit ein paar Monaten, Ich habe nie Vorauszahlungen.

Denke ich mir auch. Die Vorauszahlung wäre lästig, aber nicht so das Problem. Strenger sehe ich den Aufschlag. Ich habe mal ein Mail an aWattar gesendet.

Hallo Helmut,
danke für die PHP Skripte.
Werde versuchen, Schritt für Schritt die Einbindung zu schaffen.
Bin da nicht so der erfahrene Programmierer :upside_down_face:
Als erster werde ich die Daten von der API ( SmartEnergy ) in Symcon importieren wollen.
Ich hab auf der Synology im Docker MySQL installiert.
Hast Du einen extra Tag- und Nachtzähler?
Für was verwendest du dies?
LG Willi

Nein, hab ich nicht. Ich mache deswegen zwei Durchschnittspreise um den Fehler, der beim Mittelwert zwansgläufig auftritt, zu minimieren. Zwei Durchschnittspreise sind „richtiger“ als einer.
Die Speicherung in einer SQL Tabelle ist nicht zwinged notwendig, um den Energierechner mit Werten zu bedienen. Wenn du nur das machen willst, dann brauchst den ganzen SQL Teil nicht.

Und die Stromtarif Verteilung ( Balkendiagramm ) ist auch ohne SQL möglich?

In meiner Version nicht, da das Diagramm immer „on-the-fly“ generiert wird. Und ich kann auch in die Vergangenheit zurück, mit einer Datumsauswahl, und somit wird die SQL dafür benötigt.
Meine Übersicht sie so aus:


Zum einen auf der linken Seite die aktuellen Preise und die für morgen. Dann noch die Auswahl fürs Datum und ob ich das Balkendiagramm oder die Preistabelle haben möchte. Unten noch eine Archivanzeige meiner Tag/Nacht Preise. Die Preise für morgen, werden um Mitternacht in die Variablen für „heute“ übertragen, somit ergibt sich dann das Diagramm.

So ich lese schon ewig hier mit und habe festgestellt, beim nächsten Stammtisch muss ich dabei sein. Vor allem die Integration von awattar im Energierechner hat es mir angetan :heart_eyes:

Peter hat ja schon eine Fahrgemeinschaft angeboten :+1:

@hfichtinger : hättest du zu deinen Skripten noch eine kurze Erklärung zu den Var’s. Die meisten sind ja selbsterklärend. Aber ich bin mir nicht sicher ob ich alles richtig verstanden habe.

lg
hagi, der aus OÖ :wink:

hallo Willi,
bin schon gespannt auf deine Erfahrungen damit - überlege gerade zu SmartEnergy zu wechseln.
lg Walter

Ich kann nur versuchen noch mehr Kommentar einzufügen. Um welche Variablen gehts dir?