Python und Kivy
Verfasst: Freitag 29. März 2019, 00:13
Hallo liebe Forenmitglieder!
Ich habe mir vorgenommen ein Wetterstation Script zu schreiben welches mir über OpenWeathermap verschiedene Wetterdaten liefert.
Mein momentanes Problem besteht in der aktualisierung der Daten. Ich würde gerne alle 60sec eine Abfrage an den Server schicken
Der Code für die Abfrage steht soweit und funktioniert, jedoch fahr ich bei der aktualisierung von Kivy gegen die Wand.
Ich Schlaumeier hab als erstes versucht mit while True() : die Abfrage in eine Schleife zu setzen und mit time. sleep(60) zu pausieren... geht natürlich nicht weil ich damit die gui "schlafen" schicke...
Hab dann probiert den Code in die Klasse zu packen mit def Abfrage() : und das Ganze mit t = Timer(60) t.start() laufen zu lassen hat ebenfalls nicht funktioniert.
Wäre super wenn mir da jemand auf die Sprünge helfen könnte. Ich hab Meister Google natürlich auch schon ausführlich mit meinem Problem gefüttert und folgenden Beitrag im englischen Forum gefunden:
https://stackoverflow.com/questions/342 ... m-and-kivy
Irgendwie bekomm ichs aber damit auch nicht gebacken
Das ist die abgespeckte Version. Wie ihr vl schon bemerkt habt bin ich recht neu in dem Thema, also wundert euch nicht wenn das Script vermurkst aussieht.
Die trennung von kv und py file hab ebenfalls nicht auf die Reihe bekommen, deswegen steht der kivy code bis auf weiteres im "Hauptprogramm"
Beste Grüße
Bergstern
Ich habe mir vorgenommen ein Wetterstation Script zu schreiben welches mir über OpenWeathermap verschiedene Wetterdaten liefert.
Mein momentanes Problem besteht in der aktualisierung der Daten. Ich würde gerne alle 60sec eine Abfrage an den Server schicken
Der Code für die Abfrage steht soweit und funktioniert, jedoch fahr ich bei der aktualisierung von Kivy gegen die Wand.
Ich Schlaumeier hab als erstes versucht mit while True() : die Abfrage in eine Schleife zu setzen und mit time. sleep(60) zu pausieren... geht natürlich nicht weil ich damit die gui "schlafen" schicke...
Hab dann probiert den Code in die Klasse zu packen mit def Abfrage() : und das Ganze mit t = Timer(60) t.start() laufen zu lassen hat ebenfalls nicht funktioniert.
Wäre super wenn mir da jemand auf die Sprünge helfen könnte. Ich hab Meister Google natürlich auch schon ausführlich mit meinem Problem gefüttert und folgenden Beitrag im englischen Forum gefunden:
https://stackoverflow.com/questions/342 ... m-and-kivy
Irgendwie bekomm ichs aber damit auch nicht gebacken

Code: Alles auswählen
#TEST
from datetime import datetime, timedelta
import requests
import time
import kivy
kivy.require('1.10.1')
#from kivy.interactive import InteractiveLauncher
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.core.image import Image
from kivy.graphics import BorderImage
from kivy.graphics import Color, Rectangle
from kivy.properties import NumericProperty
from kivy.properties import StringProperty
from kivy.clock import Clock
#Abfrage der daten
webseite = "http://api.openweathermap.org/data/2.5/weather?&APPID=db0d3062e5b81bbe72ecc6d74e8e8171&q=achenkirch&units=metric"
#Daten in Variable
wetterdaten = requests.get(webseite).json()
#Daten Variablen zuweisen
wetter = wetterdaten['weather'][0]['main']
temperatur = wetterdaten['main']['temp']
sonnenaufgangunix = wetterdaten['sys']['sunrise']
sonnenuntergangunix = wetterdaten['sys']['sunset']
station = wetterdaten['name']
uhrzeitunix = wetterdaten['dt']
#Zeit von Unix in MEZ umrechnen
unix_ts1 = uhrzeitunix
unix_ts2 = sonnenaufgangunix
unix_ts3 = sonnenuntergangunix
uhrzeit = (datetime.fromtimestamp(unix_ts1) - timedelta(hours=0)).strftime('%H:%M:%S')
sonnenaufgang = (datetime.fromtimestamp(unix_ts2) - timedelta(hours=0)).strftime('%H:%M:%S')
sonnenuntergang = (datetime.fromtimestamp(unix_ts3) - timedelta(hours=0)).strftime('%H:%M:%S')
#Daten in Shell ausgeben
print(station)
print(uhrzeit)
print(temperatur)
if wetter == "Clouds":
wetter = ("Bewoelkt")
if wetter == "Rain":
wetter = ("Regen")
if wetter == "Clear":
wetter = ("Wolkenlos")
if wetter == "Snow":
wetter = ("Schneefall")
print(wetter)
print(sonnenaufgang)
print(sonnenuntergang)
#Daten in Datei speichern
f = open("Wetter Achenkirch.txt","w")
f.write("Temperatur "+str(temperatur))
#Temperatur als string abspeichern
f.close()
Builder.load_string('''
<Hauptseite>:
Label:
text: root.wetter
''')
class Hauptseite(BoxLayout):
wetter = StringProperty('')
def __init__(self, **kwargs):
super(Hauptseite, self).__init__(**kwargs)
self.wetter = wetter
class TestApp(App):
def build(self):
return Hauptseite()
TestApp().run()
Die trennung von kv und py file hab ebenfalls nicht auf die Reihe bekommen, deswegen steht der kivy code bis auf weiteres im "Hauptprogramm"
Beste Grüße
Bergstern