Abfrage Solarprognose

Ok, habe es wieder geändert, aber Problem bleibt weiter hin. Habe jetzt auch die url verändert:

$url="https://www.solarprognose.de/web/solarprediction/api/v1?access-token=$SP_TOKEN&project=$SP_PROJECT&item=$SP_ITEM&id=$SP_ID&type=$typ&_format=$SP_FORMAT&algorithm=own-v1&start_day=$start&end_day=$end";

Ich habe es dir komplett mit meinen Daten per PN geschickt.

<?php

function datenholen($typ,$start,$end)
{
$SP_TOKEN   = "xxxxxxxxxx";
$SP_ITEM    = 'location';
$SP_PROJECT = "xxxxxxxxx";
$SP_FORMAT  = 'json';
$SP_TYPE    = 'hourly';
$SP_ID      = 'xxxx';
$SP_START   = 0;
$SP_END     = 4;

$url="https://www.solarprognose.de/web/solarprediction/api/v1?access-token=$SP_TOKEN&project=$SP_PROJECT&item=$SP_ITEM&id=$SP_ID&type=$typ&_format=$SP_FORMAT&algorithm=own-v1&start_day=$start&end_day=$end";
$datenjson=file_get_contents($url);
return $datenjson;  
}
$tageswerteid=10605; //Stringvariable mit dem Profil ~HTMLBox
$stundenwerteid=38649; //Stringvariable mit dem Profil ~HTMLBox
$starttag=0; //0 aktueller Tag
$endtag=4; //die nächsten Tage
//Tagesdaten aufbereiten
$daten=json_decode(datenholen("daily",$starttag,$endtag),true); //Start- und Endtag an den eigenen Tarif anpassen
//$daten=json_decode($daten_taeglich,true);
$Liste_HTML = "";
$Liste_HTML = $Liste_HTML."<table class=\"wwx\" border=\"1\" style=\"width:100%\">";    
$Liste_HTML = $Liste_HTML."<tr>";
$Liste_HTML = $Liste_HTML."<thead class=\"blue\">";
//Tageswerte Kopf
for ($i=$starttag; $i<=$endtag; $i++)
{
    $Liste_HTML=$Liste_HTML."<th><center>".date("d.m.Y",time()+(3600*24)*$i)."</center></th>";
}
$Liste_HTML=$Liste_HTML."</tr></thead>";
//Tageswerte Zeile
$Liste_HTML=$Liste_HTML."<tr>";
for ($i=$starttag; $i<=$endtag; $i++)
{
    $Liste_HTML=$Liste_HTML."<td><center>".$daten["data"][date("Ymd",time()+(3600*24)*$i)]." kWh</center></td>";
}
$Liste_HTML=$Liste_HTML."</tr></table";
setvalue($tageswerteid,$Liste_HTML);

//Stündliche Daten
$daten=json_decode(datenholen("hourly",$starttag,$endtag),true);
$i=0;
$Liste_HTML = "";
$Liste_HTML_erg="";
$Liste_HTML_ergs="";
$datum=0;
$zeit=0;
$Liste_HTML = $Liste_HTML."<table class=\"wwx\" border=\"1\" style=\"width:100%\">";    
//var_dump($daten["data"]);
foreach ($daten["data"] as $stunde)
{
    //Datum aus dem Array Index ermitteln
	$timestamp=array_keys($daten["data"])[$i];
    if ($datum!=date("d.m.Y",$timestamp))
    {
        //ab Zeile 2 die vorige Zeile anhängen und die Zeitenzeile schließen
        if ($i>0)
        {
            $Liste_HTML=$Liste_HTML."</tr></thead>";
            $Liste_HTML_erg=$Liste_HTML_erg."</tr>";
            $Liste_HTML_ergs=$Liste_HTML_ergs."</tr>";
            $Liste_HTML=$Liste_HTML.$Liste_HTML_erg.$Liste_HTML_ergs;
            $Liste_HTML_erg="";        
            $Liste_HTML_ergs="";
        }
        //Datumskopf
        $datum=date("d.m.Y",$timestamp);
        $Liste_HTML=$Liste_HTML."<tr><thead class=\"blue\"><th colspan=\"11\"><center>".date("d.m.Y",$timestamp)."</center></th></thead></tr>";
        //Beginn Kopf für Zeiten
        $Liste_HTML=$Liste_HTML."<tr><thead class=\"blue\">";

        $Liste_HTML_erg=$Liste_HTML_erg."<tr>";
        $Liste_HTML_ergs=$Liste_HTML_ergs."<tr>";
    }
    //Zeiten
    if ($zeit<strtotime(date("G:i:s",$timestamp)))
    {
        $zeit=strtotime(date("G:i:s",$timestamp));
        $Liste_HTML=$Liste_HTML."<th><center>".date("G:i",$timestamp)."</center></th>";
        $Liste_HTML_erg=$Liste_HTML_erg."<td>".$stunde[0]." kW</td>";
        $Liste_HTML_ergs=$Liste_HTML_ergs."<td>".$stunde[1]." kWh</td>";
    }
    else
    {
        $zeit=0;
        $Liste_HTML=$Liste_HTML."<tr><thead class=\"blue\">";
        $Liste_HTML=$Liste_HTML."<th><center>".date("G:i",$timestamp)."</center></th>";
        $Liste_HTML_erg=$Liste_HTML_erg."<tr>";    
        $Liste_HTML_ergs=$Liste_HTML_ergs."<tr>";    
        $Liste_HTML_erg=$Liste_HTML_erg."<td>".$stunde[0]." kW</td>";        
        $Liste_HTML_ergs=$Liste_HTML_ergs."<td>".$stunde[1]." kWh</td>";        
    }
	$i++;
}
//letzte Zeile anhängen
$Liste_HTML=$Liste_HTML."</tr></thead>";
$Liste_HTML_erg=$Liste_HTML_erg."</tr>";
$Liste_HTML_ergs=$Liste_HTML_ergs."</tr>";
$Liste_HTML=$Liste_HTML.$Liste_HTML_erg.$Liste_HTML_ergs;
$Liste_HTML = $Liste_HTML."</table>";
setvalue($stundenwerteid,$Liste_HTML);

Ich habe gestern auch mal in den Tarif Premium gewechselt mit 60 Abfragen am Tag.

Hat sich jetzt geklärt, hatte anstatt die Standort ID die Anlagen ID im Skript. Großes Danke an pitti

@pitti

Kann man oben deinen Timer Code für das normale Skript auch nutzen oder nur mit deiner angepassten Version?

Hi Heiko,

sieht ja wirklich großartig aus. ich würde das auch gerne installieren. Welches Skript sollte man jetzt nehmen, also welche funktioniert? Dein Skript würdest du nicht posten?

Kannst du verraten wie das mit den Balken funktioniert oder ist das eher Top Secret?
Gefällt mir sehr sehr gut und ist übersichtlich.

Danke schon mal und Grüße
Stephan

1 „Gefällt mir“

Hi Stephan,

Du bist nicht der Erste der nach dem Script frage :slight_smile:

Kann ich schon machen, aber ist nicht so ein ‘ich führ das mal aus und alles geht’. Da muss man halt noch etwas Hand anlegen.

  • Timer anlegen
  • Archivierung aktivieren und einstellen
  • Quickchart Klasse installieren/hinterlegen
  • WebFront gestalten

Um nur paar Dinge zu nennen.

Ich kann das gern morgen mal einstellen wenn es @Proxima recht ist.
Will da nicht dazwischenfunken.

Meinst Du das Balkendiagramm, das ist ganz normales IPS - nix Geheimnisvolles. Die Befüllung der Archivvariable war etwas tricky weil über den Tag kann die Prognose auch mal nach unten gehen und das mögen Zählervariablen nicht so richtig.

Gruß Heiko

4 „Gefällt mir“

Mir ???

Klar ist mir das recht. Ich war ja nicht der Urheber des Ausgangsscripts. Und um ehrlich zu sein, gefällt mir die Art, wie Du das Thema visualisiert hast. Das würde ich ebenfalls nachbauen wollen.

Speziell das installieren/hinterlegen der Quickchart Klasse ist mir nicht klar.

Was zeigt die aktuelle Leistung an? Die Leistung des/der Wechselrichter?

Grüße

1 „Gefällt mir“

Hallo Heiko,

vielen Dank, ich würde mich sehr freuen wenn du dein Skript bereitstellen würdest.
Auch wenn es nicht unbedingt Plug & Play ist würde ich es doch gerne versuchen :blush: .

Mich würde auch interessieren was die aktuelle Leistung anzeigt?

Viele Grüße
Stephan

Moin,

das mit der „Aktuellen Leistung“ war bissle Spielerei bzw. Vorbereitung auf meine PV-Anlage. Im Moment wird da nur die aktuelle Stundenprognose verwendet :slight_smile: Kann man also an dieser Stelle auch weglassen.

Gruß Heiko

Bei diesem Bedarf würde sich beinahe ein Modul lohnen… :wink:

Wenn es jemand machen will, gerne. Aus meinen Basteleien kann genommen werden was gebraucht wird. Ich hab damit kein Problem.

1 „Gefällt mir“

Ha, sorry - das Originalscript kommt ja von Dir - hatte es verwechselt :smiley:

Gruß Heiko

1 „Gefällt mir“

So, wer mehr über die Chart-Darstellung wissen möchte => Pitti's erste Skript-Bibliothek - #4 von pitti

Gruß Heiko

1 „Gefällt mir“

Hallo Heiko,
bei deinem Timer Event passiert bei mir nichts bzw. wenn ich das Skript ausführe

// TIMER EVENT
else if($_IPS['SENDER'] == "TimerEvent") {
    $event = IPS_GetName($_IPS['EVENT']);
    if($event == 'UpdateDaily') {
        // Midnight reset to 0
        $vid = CreateVariableByName($_IPS['SELF'], 'Tagesprognose', 2);
        SetValue($vid, 0);
        $vid = CreateVariableByName($_IPS['SELF'], 'Stundenprognose', 2);
        SetValue($vid, 0);
    } elseif($event == 'UpdateHourly')  {
        // from 05:00 to 21:00
        $data = UpdateForecast($SP_TOKEN, $SP_PROJECT, $SP_ITEM, $SP_ID, $SP_HOURLY, $SP_FORMAT, $SP_START, $SP_END);
        // aktuellen Werte abgleichen wenn notwendig
        $vid = CreateVariableByName($_IPS['SELF'], 'Tagesprognose', 2);
        $ad = GetValue($vid);
        if($ad != $data['Tageswert']) {
            SetValue($vid, $data['Tageswert']);
        }
        $vid = CreateVariableByName($_IPS['SELF'], 'Stundenprognose', 2);
        SetValue($vid, $data['Stundenwert']);
        // SVG Chart
        $vid = CreateVariableByName($_IPS['SELF'], 'Aktuelle Leistung', 3);
        $svg = DrawChart($data['Stundenwert']);
        SetValue($vid, $svg);
        // HTML Table
        $html = BuildHtml($data);
        $vid = CreateVariableByName($_IPS['SELF'], 'Vorhersage', 3);
        SetValue($vid, $html);
    }
}

Das else if am Anfang ist glaube ich falsch oder?

Zeig doch mal deine Timer (Screenshot Objectbaum)!

Ahh Quatsch, das war doch nur ein Ausschnitt von meinem Script! Das passt doch gar nicht zu dem Original?!?!

Hatte ich mir gedacht, deshalb hatte ich oben gefragt ob der Timer Code nur zu deinem Skript passt. :grin:

Bei mir sind die Prognosedaten ziemlich daneben. Gestern Prognose 10,3 kWh und habe jetzt 17,1 kWh aktuell. Vorgestern war es noch mehr, da war es fast das doppelte von der Prognose her.

Hmm, da bin ja dann gespannt wenn mal meine Anlage produziert!

Aber sei doch froh - schlimmer wenn anders herum :smiley:

Ich bin noch nicht dazu gekommen das Script online zu stellen. Bin derzeit etwas überbeansprucht - kann erst Ende nächster Woche werden, aber es bringt ja auch nix es online zu stellen und ich kann nicht supporten!

Gruß Heiko

1 „Gefällt mir“

Hauptsache das Skript kommt :wink:

Weiß jetzt auch nicht in wie weit man einen Verlust mit einrechnen muss was die Anlage macht.

image