File size: 8,140 Bytes
5200163
 
 
 
de2af79
a62a375
468b5d8
5200163
de2af79
 
5200163
7e647bf
 
 
 
 
 
 
0042764
 
 
7e647bf
9677e2c
7e647bf
 
5200163
 
 
 
 
a14e140
5200163
 
 
 
 
9cc8f58
9e1dd87
 
ce707d5
 
29d0076
 
9e1dd87
 
 
 
 
 
29d0076
 
 
 
9cc8f58
 
 
 
 
 
613d205
29d0076
 
ce707d5
9cc8f58
29d0076
5200163
424157e
5200163
 
 
 
7e647bf
 
9e1dd87
 
 
 
 
 
0042764
424157e
9e1dd87
424157e
 
4ffd423
 
 
 
 
c22b5b4
4ffd423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e1dd87
 
4ffd423
 
 
9e1dd87
4ffd423
 
 
9e1dd87
4ffd423
 
 
9e1dd87
4ffd423
 
 
9e1dd87
4ffd423
 
 
 
 
 
c22b5b4
4ffd423
 
 
 
424157e
 
4ffd423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5200163
 
 
 
 
 
468b5d8
 
 
 
 
 
 
5200163
424157e
5200163
7a8a059
468b5d8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
import gradio as gr
import openai
import requests
from bs4 import BeautifulSoup
import os
from datetime import datetime
import time

# OpenAI API Key aus Umgebungsvariablen
openai.api_key = os.getenv('OPENAI_API_KEY')

# Funktion, um aktuelle Wetterdaten zu holen
def get_current_weather_data(lat, lon):
    api_key = os.getenv('WEATHER_API_KEY')
    base_url = "http://api.openweathermap.org/data/2.5/weather?"
    complete_url = f"{base_url}lat={lat}&lon={lon}&appid={api_key}&units=metric&lang=de&_={datetime.now().timestamp()}"
    response = requests.get(complete_url)
    if response.status_code == 200:
        data = response.json()
        print(f"API Antwort: {data}")  # Ausgabe der gesamten API-Antwort zur Fehlersuche
        return data
    else:
        print(f"Fehler beim Abrufen der Wetterdaten: {response.status_code}")
        return None

# Funktion, um Wassertemperatur zu holen
def get_water_temperature():
    url = "https://www.badi-info.ch/_temp/ww/sursee.htm"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    water_temp_element = soup.find("b", {"id": "t5"})
    if water_temp_element:
        return water_temp_element.text.strip() + "°C"
    else:
        return "Wassertemperatur nicht verfügbar"

# Funktion, um GPT-3.5 Turbo zu nutzen, um eine Badeempfehlung zu generieren
def get_bathing_recommendation_with_gpt(temp, feels_like_temp, humidity, wind_speed, weather_description, water_temp):
    if water_temp == "Wassertemperatur nicht verfügbar":
        return "Wassertemperatur nicht verfügbar. Keine Badeempfehlung möglich."
    
    prompt = f"""
    Hier sind die aktuellen Wetterdaten:
    - Temperatur: {temp:.2f}°C
    - Gefühlte Temperatur: {feels_like_temp:.2f}°C
    - Luftfeuchtigkeit: {humidity:.2f}%
    - Wetterbeschreibung: {weather_description}
    - Windgeschwindigkeit: {wind_speed:.2f} m/s
    - Wassertemperatur: {water_temp}

    Basierend auf diesen Daten, ist es ein guter Tag zum Baden? Bitte gib eine Empfehlung ab.
    """

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "Du bist ein hilfreicher Assistent, der Empfehlungen basierend auf Wetterdaten gibt."},
            {"role": "user", "content": prompt}
        ],
        max_tokens=256,
        temperature=0.5
    )
    
    recommendation = response.choices[0].message['content'].strip()
    return recommendation

# Funktion, um Wetterdaten zu holen und Bericht zu erstellen
def get_weather():
    # Koordinaten für Seebad Eich
    lat, lon = 47.1511104, 8.1662631

    current_weather_data = get_current_weather_data(lat, lon)
    
    if current_weather_data:
        temp = current_weather_data["main"]["temp"]
        feels_like_temp = current_weather_data["main"]["feels_like"]
        humidity = current_weather_data["main"]["humidity"]
        wind_speed = current_weather_data["wind"]["speed"]
        weather_description = current_weather_data["weather"][0]["description"]
        print(f"Extrahierte Wetterbeschreibung: {weather_description}")  # Ausgabe der extrahierten Wetterbeschreibung zur Überprüfung
        water_temp = get_water_temperature()
        recommendation = get_bathing_recommendation_with_gpt(temp, feels_like_temp, humidity, wind_speed, weather_description, water_temp)
        
        weather_report = f"""
        <!DOCTYPE html>
        <html lang="de">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <link rel="manifest" href="/manifest.json">
            <meta name="apple-mobile-web-app-capable" content="yes">
            <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
            <meta name="apple-mobile-web-app-title" content="Wetterbericht Seebad Eich">
            <title>Wetterbericht Seebad Eich</title>
            <style>
                body {{
                    font-family: Arial, sans-serif;
                    background-color: #333;
                    color: #fff;
                    margin: 0;
                    padding: 0;
                    width: 100%;
                }}
                .container {{
                    width: 100%;
                    padding: 20px;
                    box-sizing: border-box;
                }}
                h2 {{
                    text-align: center;
                }}
                table {{
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }}
                th, td {{
                    text-align: left;
                    padding: 8px;
                }}
                h3 {{
                    margin-top: 40px;
                }}
            </style>
        </head>
        <body>
            <div class="container">
                <h2>Wetterbericht Seebad Eich</h2>
                <table>
                    <tr>
                        <th>Parameter</th>
                        <th>Wert</th>
                    </tr>
                    <tr>
                        <td>Temperatur</td>
                        <td>{temp:.2f}°C</td>
                    </tr>
                    <tr>
                        <td>Gefühlte Temperatur</td>
                        <td>{feels_like_temp:.2f}°C</td>
                    </tr>
                    <tr>
                        <td>Luftfeuchtigkeit</td>
                        <td>{humidity:.2f}%</td>
                    </tr>
                    <tr>
                        <td>Wetterbeschreibung</td>
                        <td>{weather_description}</td>
                    </tr>
                    <tr>
                        <td>Windgeschwindigkeit</td>
                        <td>{wind_speed:.2f} m/s</td>
                    </tr>
                    <tr>
                        <td>Wassertemperatur am Sempachersee</td>
                        <td>{water_temp}</td>
                    </tr>
                </table>
                <h3 style="margin-top: 40px;">Badeempfehlung</h3>
                <p>{recommendation}</p>
            </div>
        </body>
        </html>
        """
    else:
        weather_report = """
        <!DOCTYPE html>
        <html lang="de">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <link rel="manifest" href="/manifest.json">
            <meta name="apple-mobile-web-app-capable" content="yes">
            <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
            <meta name="apple-mobile-web-app-title" content="Wetterbericht Seebad Eich">
            <title>Wetterbericht Seebad Eich</title>
            <style>
                body {
                    font-family: Arial, sans-serif;
                    background-color: #333;
                    color: #fff;
                    margin: 0;
                    padding: 0;
                    width: 100%;
                }
                .container {
                    width: 100%;
                    padding: 20px;
                    box-sizing: border-box;
                }
                h2 {
                    text-align: center;
                }
                p {
                    text-align: center;
                }
            </style>
        </head>
        <body>
            <div class="container">
                <h2>Wetterbericht Seebad Eich</h2>
                <p>Wetterdaten konnten nicht abgerufen werden. Bitte versuchen Sie es später erneut.</p>
            </div>
        </body>
        </html>
        """

    return weather_report

# Gradio-Interface ohne Input, direktes Ausführen bei Start
iface = gr.Blocks()

def update_weather():
    while True:
        weather_report = get_weather()
        iface.clear()
        iface.HTML(weather_report)
        time.sleep(3600)  # Wartezeit von einer Stunde (3600 Sekunden)

with iface:
    gr.HTML(get_weather())
    
iface.launch()
update_weather()