Sonnenstunden forecast nächsten Tag

… nur weil ich die Vorhersagen von Donnerwetter.de schonmal ausgewertet hatte - hier der Code-Schnipsel dazu:

<?php
$zip_code = "90471"; /* PLZ eintragen */
$tage = 0; /* Vorhersage heute plus Tage in die Zukunft */


$unixtime = strtotime('today midnight')+($tage*86400);

/* Die Werte von Donnerwetter sind vermutl. Mittelwerte von Gesamtdeutschland ggf. wird die Bewölkung mit eingebunden */
$string = file_get_contents("http://calc.donnerwetter.de/cgi-bin/globalrad/get_globalrad.py/?zip_code=" . $zip_code . "&date=" . $unixtime);

if (empty($string)) {
    IPS_LogMessage(IPS_GetName($_IPS['SELF']), "can't get url content");
    // 
    return;
}

extract_unit($string, '<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body>', '
</body></html>'); // Daten aus dem JSON Objekt extrahieren    
$json = json_decode($string, true); // Wenn TRUE, werden zurückgegebene Objekte in assoziative Arrays konvertiert.

//Echo PHP_EOL.'Vorkommen: '. substr_count($json['table'] ,'<td><strong>') .PHP_EOL;

$fpos =strpos($json['table'],"<tbody>")+7;
$lpos = strripos($json['table'],"</tbody>");
$htmltable= substr($json['table'],11,$lpos-11);

//Echo PHP_EOL.'erste / letzte Position: '. $fpos." / ".$lpos.PHP_EOL;

$table = explode ('<td><strong>' , $htmltable );
//print_r($table);
foreach($table as $key => $line ){
    if($key == 0 ){ continue;}
    //echo substr($line, 0, 19).PHP_EOL;
    $cell = explode ('<td class="data-cell">' , $line );
    //print_r($cell);
    $forecast[] = array('Uhrzeit' => substr($line, 0, 19), 'Globalstrahlung' => substr($cell[1],0,5), 'Direkt' => substr($cell[2],0,5), 'Indirekt' => substr($cell[3],0,5), 'Bewölkung' => substr($cell[4],31,1));
     
}

print_r($forecast);

function extract_unit($string, $start, $end)
{
    $pos = stripos($string, $start);
    
    $str = substr($string, $pos);
    
    $str_two = substr($str, strlen($start));
    
    $second_pos = stripos($str_two, $end);
    
    $str_three = substr($str_two, 0, $second_pos);
    
    $unit = trim($str_three); // remove whitespaces
    
    return $unit;
}
1 „Gefällt mir“

Hallo N22
Ich habe dein Script eingebunden, es gibt die Einstrahlung je Stunde aus.
Gibt es auch eine Ausgabe der Tagessumme?

Bernd

Nach der Zeile " $json = … " steht der Wert zur Verfügung:

echo 'Tagessumme: '.$json['rad_sum'].PHP_EOL; 

Klaus

Danke!
Funktioniert.


Hallo zusammen
Mal ein Update wie die verschiedenen Prognosen sich so schlagen.

Bernd

Hallo Bernd,

hast du mal versucht, alle Prognosen zu mitteln, wie da dann das Ergebnis im Vergleich aussieht?
Es scheint bald so, als würde das dann fast passen und noch etwas Platz hast du ja in deinem Diagramm :wink:

Aber im großen und ganzen zeigen eigentlich alle den Trend ganz gut an.

VG,
Doc

Kann man ausprobieren.
Kommt dann in einer Woche

Bin gespannt …

Gruss,
Doc

Morgen Zusammen,

ich habe das Script (vielen Dank dafür nochmal) bei mir auch laufen, leider funktioniert der Aufruf bei „BASF“ nicht mehr. Ich kann nicht wirklich sagen seit wann, da ich für ein paar Tage auf Dienstreise war.

Läuft das bei euch noch?

Grüße Thomas

Moin,
hier läuft es noch.
Was kommt denn für ein Fehler?
VG,
Doc

ja, gerade gecheckt, geht.

Läuft auch bei mir ohne probleme

Na das ist ja eigenartig.

Als fehlermeldung kommt.

Ja die Meldung bekomme ich auch, wenn ich es direkt im Browser öffne.
Das Script funktioniert aber weiterhin.

Füg’ doch mal ein
print_r ($json);
am Ende ein, dann siehst du ob die Daten kommen.

Vergesst es, es war mal wieder der Wald for lauter Bäumen.
Der End PHP-Tag hat gefehlt, den mus ich gelöscht haben.

Hallo,

seit einigen Tagen bekomme ich die Meldung:

12.07.2021, 03:00:30 | ScriptEngine         | Result for Event 13131

Warning: get_headers(https://www.agrar.basf.de/api/weather/weatherDetails?lang=de&latitude=48.867247&longitude=10.621746): failed to open stream: HTTP request failed! in C:\ProgramData\Symcon\scripts\20588.ips.php on line 34

Notice: Trying to access array offset on value of type bool in C:\ProgramData\Symcon\scripts\20588.ips.php on line 35
url:  https://www.agrar.basf.de/api/weather/weatherDetails?lang=de&latitude=48.867247&longitude=10.621746 does not exist 
<br>

Irgendwelche Ideen ???

Grüße
Proxima

Der Webaufruf mit deiner URl funktioniert.
Vielleicht postest du einfach mal dein Script?

Sicher, bei seiner URL bekomme ich nen Fehler:

XML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: https://www.agrar.basf.de/api/weather/weatherDetails?lang=de&latitude=48.867247&longitude=10.621746
Zeile Nr. 1, Spalte 79039:

Hallo,

@Doctor_Snuggles
ich benutze das Script, welches Du hier veröffentlicht hast, vom 5. Mai.

Grüße
Proxima

Das kommt bei diesem Webaufruf doch immer, steht doch ein paar Posts darüber schon.
Die Daten werden doch ausgegeben.

@Proxima,
das glaube ich nicht, dann wären wir ja Nachbarn.
So hätte man sehen können, was an deinem Script nicht stimmt.
Versuch mal ein print_r ($json );
ob da die Daten richtig ausgegeben werden.