Baue Deinen eigenen Wetterdienst - Dark Sky API

Den Wert Ozon scheint es nicht zu geben bei Pirate Weather. Wie machst du das mit der Anzeige der Icons, das Skript muss man ja auch anpassen.

Ozone habe ich aber mit drin
[ozone] => 342,66

Die hatte ich schon immer durch eigene ausgetauscht, deshalb hab ich da keine Baustelle :smiley:

Sorry, war falsch. Es ist die Niederschlagsart. Muss mir das mal genauer anschauen.

Wie krieg ich die Icons wieder hin?
Hab mal getauscht auf https://api.pirateweather.net/images/weather-icons/
aber es kommt keines mehr. In der api doc unter icon finde ich keinen Hinweis ob der Pfad vielleicht neu ist?
Alles andere funktioniert wirklich 1:1. Genial.

Hi,

hast Du das Problem mit dem Niederschlag schon eingrenzen können ???

Grüße
Proxima

Hallo,
habe noch nicht danach geschaut, Sorry. Kann ja aber eigentlich nur sein das der Befehl anders heißt oder die geben diesen Wert nicht aus.
In der alten Dark Sky hieß der Befehl bzw. als json: [‚hourly‘][‚data‘][0][‚precipType‘]

Hallo zusammen,
anbei mal mein abgewandeltes Script. Da ich es nicht mehr über die HTML Box mache, lasse ich die einzelnen Werte ausgeben. Bei den Bildern habe ich in IPSView ein Assoziationimage genommen, in dem alle Bilder (nun lokal) drin sind und ich diese nur über die ermittelte ID auswähle.
Wenn jemanden Werte fehlen, einfach an der gekennzeichneten Stelle hinzufügen.

Das Ergebnis sieht dann wie folgt aus. Dabei ist Tag_1_xxx immer der aktuelle Tag und Tag_2_xxx morgen usw.

und in IPSView

Das Assoziationsimage sieht wie folgt aus

<?php

$api_secret = "XXXXXXXXXXXXXXXXXXXXXXXX"; 
$latitude = "XX.XXXX"; 
$longitude = "X.XXXXX"; 

$url = "https://api.pirateweather.net/forecast/$api_secret/$latitude,$longitude?exclude=minutely,hourly&units=ca";
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_URL, $url);  
$result = curl_exec($ch); 
curl_close($ch);   
$pirateweather_data = json_decode($result, true); 

$weather_daily = $pirateweather_data["daily"]["data"]; 

$InsID = @IPS_GetInstanceIDByName("Wettertage", $IPS_SELF);
if ($InsID === false)
{
    $InsID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");    
    IPS_SetName($InsID, "Wettertage");
    IPS_SetParent($InsID, $IPS_SELF); 
    IPS_ApplyChanges($InsID);
}

Weather_Now_And_Next_Days($weather_daily,$InsID); 

//************************** FUNCTIONS ******************************************************************************************************
function Weather_Now_And_Next_Days($weather_daily,$InsID) 
{ 
    $tag=1;
    foreach ($weather_daily as $day => $data){ 
        if (isToday($data['time'])){ 
            $weekday = "Heute"; 
        } else { 
            $day_names = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); 
            $weekday = $day_names[date("w",intval($data['time']))]; 
        } 
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_Tag", 3, ""),$weekday);
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_TemperaturHigh", 2, "~Temperature"),utf8_decode($data['temperatureHigh']));
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_TemperaturLow", 2, "~Temperature"),utf8_decode($data['temperatureLow']));
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_Icon", 1, ""),GetWeatherIconID(utf8_decode($data['icon'])));
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_IconName", 3, ""),utf8_decode($data['icon']));
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_Regenwahrscheinlichkeit", 1, ""),round(ConvertPercent($data['precipProbability']),0));
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_Windgeschwindigkeit", 2, ""),utf8_decode($data['windSpeed']));
        SetValue(CreateVariableByName($InsID, "Tag_".$tag."_Windgeschwindigkeit Max", 2, ""),utf8_decode($data['windGust']));

        //Hier ggfs. weitere Werte eintragen
        
        $tag++;
   } 
} 

function GetWeatherIconID($weathericonname){
    $id=0;
    if ($weathericonname == "clear-day"){$id=8;}
    if ($weathericonname == "clear-night"){$id=3;}
    if ($weathericonname == "rain"){$id=5;}
    if ($weathericonname == "snow"){$id=6;}
    if ($weathericonname == "sleet"){$id=6;}
    if ($weathericonname == "wind"){$id=7;}
    if ($weathericonname == "fog"){$id=2;}
    if ($weathericonname == "cloudy"){$id=1;}
    if ($weathericonname == "partly-cloudy-day"){$id=9;}
    if ($weathericonname == "partly-cloudy-night"){$id=4;}

    return $id;
}

function ConvertPercent($value) 
{ 
    $percentage = $value * 100; 
    return $percentage; 
} 

function CreateVariableByName($id, $name, $type, $profile = "")
{
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false){
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
        if($profile !== "") {
            IPS_SetVariableCustomProfile($vid, $profile); 
        }
    }
    return $vid;
}

function isToday($time){ 
   $begin = mktime(0, 0, 0); 
   $end = mktime(23, 59, 59); 
   return (($time >= $begin) && ($time <= $end)); 
} 


Hat mir nicht noch jemand einen Tip, wie ich die Wetter Icons wieder zum laufen kriege?
Alles andere scheint mir zu funktionieren. Danke.

Ich wollte mir bei pirateweather einen API Key besorgen, habe aber schon Probleme beim erstellen eines Accounts. Beim Login bekomme ich immer ‚Incorrect credentials‘.
Bekommt man nach erstellen des Accounts eine Antwort oder einen Usernamen an die Email Adresse zugesandt?

der account muss via email bestätigt werden, danach ging es bei mir. das skript von dark sky funktioniert noch wenn man den apikey und die url austauscht :slight_smile:

Keine Idee wie ich wieder die Icons sehe?