Ankündigung

Einklappen
Keine Ankündigung bisher.

[Logik] Openweather

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [callidomus] [Logik] Openweather

    Abend zusammen,

    da für meine Region keine DWD-Wetterdaten existieren, habe ich eine kleine Logik für die Openweather-API erstellt.

    Um das Plugin nutzen zu können, benötigt ihr einen entsprechenden API-Key, diesen könnt hr hier [KLICK] erhalten. Diesen könnt ihr dann am Ende des Scripts unter
    Code:
    api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ersetzen. Zusätzlich wird noch die City-ID benötigt. Unter http://openweathermap.org/find könnt ihr die entsprechende Stadt eintragen. Die ID findet ihr dann in der aufgerufenen URL (Bsp London: http://openweathermap.org/city/2643743). Diese muss innerhalb des Skripts ersetzt werden:
    Code:
    city_id = "xxxxxx"
    Ich habe festgestellt, das meine Stadt ab und zu nicht gefunden wird (warum auch immer), nach ein paar Minuten gehts dann wieder. Dies tritt auch während der Ausführung der Logik auf, ist aber nicht weiter tragisch. Im Log wird die entsprechende Meldung dann angezeigt.

    Weiterhin müssen (wenn ihr das Script so 1:1 einsetzen wollt) folgende Items in Callidomus angelegt werden:

    weather.temperature (Typ 'Nummer')
    weather.humidity (Nummer)
    weather.wind_direction (Zeichenkette)
    weather.wind_speed(Nummer)
    weather.weather_condition(Zeichenkette)
    weather.cloudiness(Nummer)

    Die angehängte Datei muss in das Verzeichnis "/data/callidomus/local/logics" kopiert werden (bitte die txt-Endung entfernen). Das Skript kann dann als Logik aller x-Minuten ausgeführt werden . Ich habe hier 10min gewählt. Openweather beschränkt die API-Aufrufe bei der kostenlosen Version auf 500 am Tag, also locker ausreichend.


    Sobald die Doku für die Plugins / Widgets draussen ist, werde ich daraus ein entsprechndes Plugin bauen. Zusätzlich werde ich noch die Wettervorhersage implementieren, das meiste ist im Code schon vorbereitet.


    Gruss,

    Stefan
    Angehängte Dateien
    Zuletzt geändert von pfischi; 22.06.2016, 22:32. Grund: Typo
    Sonos

    #2
    Vielen Dank fürs Teilen! Werde ich bei Gelegenheit auf jeden Fall mal ausprobieren!

    Kommentar


      #3
      Hallo pfischi,

      hört sich gut an!! Ich habe mit dem DWD Plugin das gleiche Problem. Ich habe dein Script gleich mal ausprobiert. Leider läuft es bei mir nicht.

      Bei der Defintion
      Code:
      dict_to_weather_object
      (ab Zeile 197) erhalte ich den Fehler:
      Code:
      'NoneType' object is not subscriptable
      .

      Was könnte das sein?

      Gruß
      Thomas

      Kommentar


        #4
        Das Problem tritt dann auf, wenn die Stadt nicht gefunden wird. Warum das ab und an Auftritt weiß ich leider nicht. Ich mach das heute noch etwas robuster mit einer entsprechend aussagekräftigeren Fehlermeldung.

        Gruss,

        Stefan
        Sonos

        Kommentar


          #5
          Zitat von pfischi Beitrag anzeigen
          Das Problem tritt dann auf, wenn die Stadt nicht gefunden wird.
          Bei mir kommt die Fehlermeldung aber dauerhaft. Wenn ich die URL in Zeile 182 über den Browser aufrufe (mit dem API-Key und der ID für die Stadt), bekomme ich das gültige JSON geliefert.

          Thomas

          Kommentar


            #6
            Kannst du mir mal deine City-id geben?

            Gruss, Stefan
            Sonos

            Kommentar


              #7
              Hallo pfischi ,

              meine City-ID ist 2809346 (Wiesbaden).

              Ich habe mir jetzt mal den Code etwas genauer angeschaut. Ich habe Zeile 197 wie folgt geändert:
              Code:
              def dict_to_weather_object(data, current_weather):
              Mir erschien es seltsam, dass du current_weather fest auf "False" setzt. Damit rufst du doch immer das Wetter für den nächsten Tag ab, oder? Kann es sein, dass es deshalb hin und wieder nicht funktioniert?
              Dafür habe ich dann den Aufruf der Funktion für den Forecast entsprechend geändert:
              Code:
              weather_objects.append(dict_to_weather_object(item, current_weather=False))
              ... und den "Forecast" habe ich auch mal auskommentiert, also so
              Code:
              items = parse_weather_data(get_current_weather_data(api_key, city_id))
              Jetzt funktioniert es bei mir!

              Zumindest gibt er einen Wert für die Windgeschwindingkeit aus - mehr habe ich erstmal noch nicht in die Visu eingebaut ... ;-))

              Auf jeden Fall schon mal VIELEN DANK für dein Script.

              Gruß
              Thomas
              Zuletzt geändert von Stereofeld; 25.06.2016, 21:15. Grund: Tippfehler ...

              Kommentar

              Lädt...
              X