+ Antworten
Seite 1 von 7 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 66
  1. #1
    Registriert seit
    Dec 2017
    Ort
    Wolfsburg
    Beiträge
    196

    Standard Baue Deinen eigenen Wetterdienst - Dark Sky API

    Hallo!

    wer kennt das nicht: Das Wetter gehört einfach auf jedes Display
    Es gibt schon eine Reihe von Modulen. Viele haben viele Werte und benötigen daher viele Variablen. Und dennoch fehlt mal hier und da etwas.
    Daher meine Idee sich selber was zu erstellen mit darksky.
    Darksky ist ein Anbieter, der Informationen diverse Wetter APIs / Stationen aggregiert und abrufbar machet. Der Response erfolgt in JSON und kann daher bequem ausgelesen werden. Ihr könnt Euch auf https://darksky.net/ registrieren und dort mit dem API Key bis zu 1.000 Abfragen am Tag machen.
    Ich selber mache eine Abfrage alle 10 Minuten und benötige daher nur 144 Abrufe täglich.

    Auf geht's ans Basteln. Legt Euch für jeden Wert, den ihr aus den Winter Informationen ziehen wollt eine Variable an.

    Anbei mein Beispiel.

    Name:  darksky.png
Hits: 2452
Größe:  160.8 KB

    Um die Variablen zu erstellen erstellt ein Skript mit Timer. In meinem Falle wird das Skript alle 10 Minuten aufgerufen.
    Ihr müsst Euch bereits bei darksky registriert haben und Euren API Key bereit halten. Falls Ihr Eure GPS Daten nicht kennt, so schaut bei Google Maps etc. nach. Bei Symcon 5 ist ja eine schöne Suchfunktion dabei.

    Skript:

    Code:
    <?
    
    $url = "https://api.darksky.net/forecast/API-KEY-VON-EUCH/48.1111111,14.111111111?exclude=minutely,hourly&lang=de&units=ca";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    $output = curl_exec($ch);
    curl_close($ch);  
    $content = json_decode($output, true);
    SetValueFloat(35382, $content['daily']['data'][0]['temperatureHigh']);
    SetValueFloat(17472, $content['daily']['data'][0]['temperatureLow']);
    SetValueFloat(26163, $content['daily']['data'][0]['humidity']);
    SetValueFloat(25659, $content['daily']['data'][0]['windSpeed']);
    SetValueFloat(58118, $content['daily']['data'][0]['windGust']);
    SetValueFloat(47185, $content['daily']['data'][0]['cloudCover']);
    SetValueFloat(43474, $content['daily']['data'][0]['precipProbability']);
    
    SetValue(15572, $content['daily']['data'][0]['summary']);
    
    ?>
    Anbei ein Beispiel um meine Werte zu füllen.
    Ihr müsst Euren API Key eintragen und die korrekten Koordinaten.
    Der exclude Parameter in der URL sorgt dafür, dass nur tägliche Wetterberichte abgeholt werden. Minütlich und Stündlich ist hier möglich.
    Die gesamte Doku mit Beispiel Response gibt es hier: https://darksky.net/dev/docs
    Viel Spass beim Basteln

  2. #2
    Registriert seit
    Jan 2016
    Ort
    Hessen, Deutschland
    Beiträge
    66

    Klingt interessant!

    Eine Frage habe ich: ist das 1000-Call Limit eine technische Begrenzung die ich nicht überschreiten kann, oder muss ich da selbst drauf achten?

    Aus der FAQ wird es mir nicht ersichtlich. Es klingt fast so als müsste ich selbst aufpassen, und wenn ich über die 1000 Calls komme, wird mein Account gesperrt bis ich zahle. Ist das so, oder bekomme ich nach dem 1000ten Call einfach keine Antwort?

    Mir ist schon klar dass kein einzelner Nutzer 1000 Aufrufe braucht. Aber mal ne Schleife falsch gesetzt oder den Timer falsch eingestellt... ihr wisst schon.

  3. #3
    Registriert seit
    Dec 2017
    Ort
    Wolfsburg
    Beiträge
    196

    Ja, laut FAQ ist es tatsächlich so, dass wenn Du mehr als 1.000 Queries am Tag machst und die erzeugen Kosten nicht bezahlst, wird Dein Account gesperrt.

    If you have gone over the 1,000 free call limit but have not paid your outstanding balance, we will lock your account. If your account has been locked and you would like it to be unlocked, please contact us at developer@darksky.net.
    Entweder schreibst Du dann höflich an die E-Mail Adresse aus der FAQ hin, dass Du ausersehen über dem Limit bist und es sonst nicht kommst oder Du bezahlst oder Du machst Dir nen neuen Account....

  4. #4
    Registriert seit
    Dec 2016
    Beiträge
    502

    Hallo,
    habe mal gerade dein Ansatz probiert und klappt soweit sehr gut. Wie bekomme ich den bei Niederschlagstyp die Sprache auf Deutsch? Bei mir steht da rain.
    Geändert von Stefan71 (09.08.18 um 14:54 Uhr)

  5. #5
    Registriert seit
    Mar 2017
    Ort
    Rems-Murr-Kreis
    Beiträge
    120

    Hallo someone,

    vielen Dank für deine "Bastelvorlage", welche ich erfolgreich umsetzen konnte.

    Jetzt fehlt nur noch ein passendes Icon. Wie kann ich ein Wetter Icon im Webfront darstellen? Die Variable "Icon" habe ich angelegt und diese wird aktuell auch mit "rain" befüllt. Leider weiß ich nicht, wie ich aus "rain" ein Icon erstellen kann.

    Gruß
    AKL
    IP-Symcon 5.0 Professional | IPS View | Colibrico | Raspi Pi 3 | Stretch

  6. #6
    Registriert seit
    Jul 2009
    Ort
    Bremen
    Beiträge
    638

    Du brauchst ein Icon Set, in den faq https://darksky.net/dev/docs/faq findest du dazu Hinweise.

    Du kannst diese dann z.B. im Profil hinterlegen.

    Gruß,
    someone

  7. #7
    Registriert seit
    Mar 2017
    Ort
    Rems-Murr-Kreis
    Beiträge
    120

    OK, Danke für den Hinweis. Und gleich die nächsten Fragen...

    Wo genau muss das Icon Set reinkopiert werden? Habe einen Pi 3 mit Stretch. In dieses Verzeichnis?

    Code:
    /usr/share/symcon/webfront/user/skins/CustomIcons-master/icons
    Kommen dann diese Zeilen einfach in dein Skript dazu?

    PHP-Code:
    var skycons = new Skycons({"color""pink"});

    skycons.add(document.getElementById("icon1"), Skycons.SUN);
    skycons.add(document.getElementById("icon2"), Skycons.RAIN);
    usw...

    skycons.play(); 
    Gruß vom Ahnungslosen
    AKL
    IP-Symcon 5.0 Professional | IPS View | Colibrico | Raspi Pi 3 | Stretch

  8. #8
    Registriert seit
    Apr 2009
    Beiträge
    98

    wahrscheinlich ist das den meisten klar, aber für aktuelle Werte sollte man currently nehmen:

    Code:
    SetValueFloat(17509 /*[Wetter\DarkSky Wetterdaten\Luftfeuchtigkeit]*/, $content['currently']['humidity']*100);
    SetValueFloat(52805 /*[Wetter\DarkSky Wetterdaten\Windgeschwindigkeit]*/, $content['currently']['windSpeed']);
    SetValueFloat(40965 /*[Wetter\DarkSky Wetterdaten\aktuelle Temperatur]*/, $content['currently']['temperature']);
    SetValueFloat(23473 /*[Wetter\DarkSky Wetterdaten\Luftdruck]*/, $content['currently']['pressure']);

  9. #9
    Registriert seit
    Apr 2017
    Beiträge
    637

    Klasse, vielen Dank für den Hinweis und Code!
    So einfach kann's sein mit dem Internetwetter, ohne den Overhead eines Moduls!
    KNX-TP, KNX-RF

  10. #10
    Registriert seit
    May 2013
    Beiträge
    328

    Standard Alternative zum WeatherUnderground Script

    Hier mein Script wegen der Abschaltung von WeatherUnderground.

    Viel Spass!
    Sebastian

    PHP-Code:
    <?

    $api 
    "yourkey";
    $latitude "45.98";
    $longitude "13.97";

     
    $today time();
       
    $d date('d'$today);
       
    $m date('m'$today);
       
    $y date('Y'$today);
    $tomorrow mktime(000$m, ($d 1), $y);
       
    $heute = (integer) date('d');
    $morgen = (integer) date('d'$tomorrow);



    $WochenTage = Array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');


      
    $json_string file_get_contents("https://api.darksky.net/forecast/$api/$latitude,$longitude?exclude=minutely&lang=de&units=si"); 
      
    $parsed_json json_decode($json_string);
      
    $current $parsed_json->{'currently'};
       
    $text0 utf8_decode($current->summary) . "\n";
       
    $text1 utf8_decode($current->temperature) . "\n";
       
    $text2 utf8_decode($current->apparentTemperature) . "\n";
       
    $text3 utf8_decode($current->precipProbability) . "\n";
       
    $text4 utf8_decode($current->windSpeed) . "\n";
       
    $text5 utf8_decode($current->windGust) . "\n";
       
    $text6 utf8_decode($current->cloudCover) . "\n";
       @
    $text7 utf8_decode($current->precipType) . "\n";
       
    $text8 utf8_decode($current->humidity);

       
    $niederschlag "";
                 if (
    $text7 == "rain"$niederschlag "Regen";
                 if (
    $text7 == "snow"$niederschlag "Schnee";
                 if (
    $text7 == "sleet"$niederschlag "Schneeregen";

       
    $InsID = @IPS_GetInstanceIDByName("Aktuell"$IPS_SELF);
        if (
    $InsID === false)
        {
        
    $InsID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");    
        
    IPS_SetName($InsID"Aktuell");
        
    IPS_SetParent($InsID$IPS_SELF); 
        
    IPS_ApplyChanges($InsID);
        }
       
    SetValue(CreateVariableByName($InsID"Zusammenfassung"3"~String"),$text0); 
       
    SetValue(CreateVariableByName($InsID"Temperatur"2"~Temperature"),$text1);
       
    SetValue(CreateVariableByName($InsID"Temperatur gefühlt"2"~Temperature"),$text2);
       
    SetValue(CreateVariableByName($InsID"Niederschl Wahrsch."2"~Intensity.1"),$text3);
       @
    SetValue(CreateVariableByName($InsID"Niederschlag"3"~String"),$text7);
       
    SetValue(CreateVariableByName($InsID"Windgeschw"2"~WindSpeed.ms"),$text4);
       
    SetValue(CreateVariableByName($InsID"Wind Böen"2"~WindSpeed.ms"),$text5);
       
    SetValue(CreateVariableByName($InsID"Wolken"2"~Intensity.1"),$text6);
       
    SetValue(CreateVariableByName($InsID"Feuchte"2"~Intensity.1"),$text8);

       



       
       
    $daily $parsed_json->{'daily'};
        
    $text0 utf8_decode($daily->summary) . "\n";
       
    $days $parsed_json->{'daily'}->{'data'};
       
    $message = array();

            for(
    $i=0;$i<7;$i++)
             {
                 
    $day utf8_decode($days[$i]->time);
                 
    $summary utf8_decode($days[$i]->summary);
                 
    $temphigh utf8_decode($days[$i]->temperatureHigh);
                 
    $templow utf8_decode($days[$i]->temperatureLow);
                 @
    $precipType utf8_decode($days[$i]->precipType);
                 
    $niederschlag "";
                 if (
    $precipType == "rain"$niederschlag "Regen";
                 if (
    $precipType == "snow"$niederschlag "Schnee";
                 if (
    $precipType == "sleet"$niederschlag "Schneeregen";
                 
    $niedr_prop utf8_decode($days[$i]->precipProbability);
                 
    $wind utf8_decode($days[$i]->windSpeed);
                 
    $boen utf8_decode($days[$i]->windGust);
                 
    $wolken utf8_decode($days[$i]->cloudCover);
                 
    $humidity utf8_decode($days[$i]->humidity);
                 
    $tag = (integer) date('d',intval($day));    
                 
    $Wochentag $WochenTage[date('w',intval($day))];     
                 
    $message[$tag] = array(date('d.m',intval($day)),$WochenTage[date('w',intval($day))],$summary,$temphigh,$templow,$niederschlag,$niedr_prop,$wind,$boen,$wolken,$humidity);
                 
    $box[] = "$Wochentag $summary / $niederschlag $niedr_prop % / $temphigh °C $templow °C";
             }
             
        
    $InsID = @IPS_GetInstanceIDByName("Heute"$IPS_SELF);
        if (
    $InsID === false)
        {
        
    $InsID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");    
        
    IPS_SetName($InsID"Heute");
        
    IPS_SetParent($InsID$IPS_SELF); 
        
    IPS_ApplyChanges($InsID);
        }
           
     
                
    SetValue(CreateVariableByName($IPS_SELF"Woche Zusammenfassung"3"~String"),$text0); 
                
    SetValue(CreateVariableByName($InsID"Zusammenfassung"3"~String"),$message[$heute][2]); 
                
    SetValue(CreateVariableByName($InsID"Temp Max"2"~Temperature"),$message[$heute][3]);
                
    SetValue(CreateVariableByName($InsID"Temp Min"2"~Temperature"),$message[$heute][4]);
               @
    SetValue(CreateVariableByName($InsID"Niederschlag"3"~String"),$message[$heute][5]);
                
    SetValue(CreateVariableByName($InsID"Niederschl Wahrsch"2"~Intensity.1"),$message[$heute][6]);
                
    SetValue(CreateVariableByName($InsID"Wind"2"~WindSpeed.ms"),$message[$heute][7]);
                
    SetValue(CreateVariableByName($InsID"Wind Böen"2"~WindSpeed.ms"),$message[$heute][8]);
                
    SetValue(CreateVariableByName($InsID"Wolken"2"~Intensity.1"),$message[$heute][9]);
                
    SetValue(CreateVariableByName($InsID"Feuchte"2"~Intensity.1"),$message[$heute][10]);

                
               

      
       
    $InsID = @IPS_GetInstanceIDByName("Morgen"$IPS_SELF);
        if (
    $InsID === false)
        {
        
    $InsID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");    
        
    IPS_SetName($InsID"Morgen");
        
    IPS_SetParent($InsID$IPS_SELF); 
        
    IPS_ApplyChanges($InsID);
        }
        
               
                
    SetValue(CreateVariableByName($InsID"Zusammenfassung"3"~String"),$message[$morgen][2]); 
                
    SetValue(CreateVariableByName($InsID"Temp Max "2"~Temperature"),$message[$morgen][3]);
                
    SetValue(CreateVariableByName($InsID"Temp Min"2"~Temperature"),$message[$morgen][4]);
               @
    SetValue(CreateVariableByName($InsID"Niederschlag"3"~String"),$message[$morgen][5]);
                
    SetValue(CreateVariableByName($InsID"Niederschl Wahrsch"2"~Intensity.1"),$message[$morgen][6]);
                
    SetValue(CreateVariableByName($InsID"Wind"2"~WindSpeed.ms"),$message[$morgen][7]);
                
    SetValue(CreateVariableByName($InsID"Wind Böen"2"~WindSpeed.ms"),$message[$morgen][8]);
                
    SetValue(CreateVariableByName($InsID"Wolken"2"~Intensity.1"),$message[$morgen][9]);
                
    SetValue(CreateVariableByName($InsID"Feuchte"2"~Intensity.1"),$message[$morgen][10]);


                
    SetValue(CreateVariableByName($IPS_SELF"Wöchentlich"3"~TextBox"), implode("\n",$box));


       

    $hourly $parsed_json->{'hourly'}->{'data'};
       
    $message = array();

            for(
    $i=0;$i<48;$i++)
             {
                 
    $time utf8_decode($hourly[$i]->time);
                 
    $summary utf8_decode($hourly[$i]->summary);
                 
    $temp utf8_decode($hourly[$i]->temperature);
                 
    $temp2 utf8_decode($hourly[$i]->apparentTemperature);
                 
    $humidity utf8_decode($hourly[$i]->humidity);
                 @
    $precipType utf8_decode($hourly[$i]->precipType);
                 
    $niederschlag "";
                 if (
    $precipType == "rain"$niederschlag "Regen";
                 if (
    $precipType == "snow"$niederschlag "Schnee";
                 if (
    $precipType == "sleet"$niederschlag "Schneeregen";
                 
    $niedr_prop utf8_decode($hourly[$i]->precipProbability);
                 
    $wind utf8_decode($hourly[$i]->windSpeed);
                 
    $boen utf8_decode($hourly[$i]->windGust);
                 
    $wolken utf8_decode($hourly[$i]->cloudCover);
                 
    $tag date('d',intval($time));    
                 
    $stunde date('H',intval($time));         
                 
    $Wochentag $WochenTage[date('w',intval($time))];
                 
    $message[$stunde] = array(date('d.m',intval($time)),$WochenTage[date('w',intval($time))],date('H',intval($time)),$summary,$temp,$temp2,$niederschlag,$niedr_prop,$wind,$boen,$wolken,$humidity);
                 
    $box2[]="$Wochentag $stunde Uhr $summary / $niederschlag $niedr_prop % / $temp °C";
             }

        
    SetValue(CreateVariableByName($IPS_SELF"Vorhersage"3"~TextBox"), implode("\n",$box2));


         
         
       
           
      function 
    CreateVariableByName($id$name$type$profile "")
        {
            
    //global $_IPS['SELF'];
            
    $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;
        }

    ?>
    Geändert von Buzz2912 (02.03.19 um 17:17 Uhr)

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 02.11.16, 18:58
  2. Sky+ Receiver per Lan
    Von hoschiman0 im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 0
    Letzter Beitrag: 27.09.16, 19:27
  3. Schweizer Wetterdienst
    Von msiegw im Forum Allgemeine Diskussion
    Antworten: 1
    Letzter Beitrag: 04.04.16, 23:16
  4. TVTV Sky Programm
    Von MichB im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 1
    Letzter Beitrag: 08.02.16, 17:58
  5. Deutscher Wetterdienst
    Von alien80 im Forum WebFront
    Antworten: 1
    Letzter Beitrag: 08.11.10, 11:07