From 38c37d1bb9c70a04e91dafc9c1e17cb19e7a49f2 Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Tue, 21 Apr 2026 09:49:52 +0200 Subject: [PATCH] modified: app.py --- __pycache__/app.cpython-310.pyc | Bin 8201 -> 8430 bytes app.py | 18 ++++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc index 6218ade77127d3777fea4d68a2d99c963b255406..426bc3084219b08c6a8eda8d834b6302440236f1 100644 GIT binary patch delta 2981 zcmZ8iTZ~&r89sB)@qO*}`hNFb)woF$Eu`eqG&Jd!rqE3(Nm<2B0+;S-jT4_=giK^HVydtU!Q~?i22zcOuO1xPVi3+JgqEM+Iq&@)OjGa~5UHLoz z<@^7+{4@W2`>}tV3$=nlzlOhe55Hgk#nCrIi=OTR)Chi$Ehijay>C{Et zw{^$EJsaM>Z=g9|?%nV^KJM#My`#0CumjvjJw2U$(VpPG9-(9t^14>n*7OzalBWD# z_%Cr^KZpdry5{(i&hG?x067R_hzzJm6SA~Q{w5D7KJ<+cC26fciD*BvgsE>p`rRp+ z41@dNia?&=6LxeX#&znyO_G`ufa*#F{b%LBQaf$}lWsKK*5 zE4Ol=Ft19MJxCUFaw~K`+NLYi2FxJ3}<_0pX|OmI^Fhce{O(NK01PK z?FtUzO|6s@3IB;WBe*OVKMp?8VXdv&vGX<7s9R#$Kj#~IDwRgfs#HYRf0wMkl?uE= zCgz9Uy_Qw0TWhVM2xM~pq1UcAYtknEHnBt=6i0*2`LgdajBUHx+$#I+y~=9K+Nm+S z9Dv+ttyUZLy_)!baQ?}mZ;RC}yHdNgT3Q$yjj9c3S?nQ9ihUkX_Ec`DDY5fXGgxiA z?6GQ9hU`N(u+y;Flj5V`)3MJh4-LhG!u!yXljk*N56D4lp2E>qWaFA0$eB2oXZ-xPljor&j&-zX5jo*{mM zFG&znkBLVoXUX&8`s9D&uOYN8+ftaAh>RfzTNRD)`{cN|JoVI}N8n4?!5KgNS1V+Nj}++(HM?b zm``p@QjJcbZ%xsN6S3pm?8*B*i~AkLwT#g?ZhzcP@HkDNvHXn3HHo~*{nS8HcU0be zjiyu>ZZA*m5ccnNji%ReJmo*lyza(XPoL2+&1_ne)50b8NE@^qT3cr1k*9ua&39c| z8UcNs76zbi#c1S&W@su&@gPZQOrIVnfk!2Y(U}9zBV*3&m;=vj*-)?DKpE0bmS?b%G};u_gcUM7HO(*B%oq|*3CW?7T78A=l^QqF8dO9-y6~&Ly2M6S!{D{@fH&8|Qjx>PqAnzDrqU3Ij$_I;PSEu$oFblcUvx1}nZ6YEG& z9biXF=gtC4WN2*Gc1vD0Y}qS^sx<4?J*j$Yluw1pRAsN~UQIa8ir=LcNL750ns#53 z883@y`Z!q;7t&viz95s&F%zGmS!L^Owk+OE$GguZguL_{6>6&uC>vJmCX*ee zY;^3^p@-GB8r9XBYRc>}8E{U5?8K27o2|l7nqf_R*l0ac;u2N>OXf3QI3azXy}AVA`W6#C`t@G9g{+4U$X!nq-HiX~d~m)%s3Ne3+SC?8=-kNxwm> zyX7FQ)*HJOOt)EOyF)_R*CnARK|UDl74dj>#{F}M?f1k+_LO_V@Z0yh%R^nSSDJ L;unn(^MC&b?u+&j delta 2741 zcmZ8jU2I%O6~1%#?)rMy`~UyzwVgCwCoOWC)Qw3CZIiU7O%zH>#md3Bp0!#3>^ie| z6Wg835^W1DV9D*MRiy^B`@{nRiI#^xAQg!SB%XkWJ}e0FRv`i64UiDEl-0Xq|9~dAp`K<%~&RmvP@F__|Ry z*31`-FBrOi4E<-NuV=&GS2x_T4#Ig|TiOW1#5K6u+SLO0!AcI7rL7&H+8F1)tkLts z9fR}&-0rj91O>z3HhO~K<8s^yZG@%C#}8QAaQ$-BEB%`+3+=k$2H+imcZXdtuK#w) zbSK;(_w&HZh79(iedB`BWp2oc$xtuOC;AMnu;#%&b0bbdM!Kx^Jtyg;i1ARu;AYos zFmAa~tqVgJgDwW$yIKeK30<6Y9Ug%&0bv5dyIKf#6fCKOMWIP)76VH|or3y9nQDxI zr@?u6j7c`V7)p(UdvLD6(B2g*&%C% zbTIIdrl>V(XiCtOv}Rgsz9M9{V5ygu6EZBLGA@%c zEAz4_C*_or!JAs)uEleA0)57e8@n2#&#RyKXTnzoW6R51wZ`(YV5oETNB`Sw`MtfsuNf<-mx32qMg1(etv(+*maUHO zh9NGic zsQOm7nr+^ydRpy<_%w<9x9SbP%Q}dC(Cl4TQ(b0`Ci`gt;+Dt5|C!-&+ht$c~;{6Ng5|0qj6a-CBB#$6P zY!UF5x)VFW7S-L@_23WDZsEKewkf!JFkT5wq7lNQuYyXXvy z(s`N2d5O9)8RJPDr#Lbi=P4Z2AIbPenj1LC#KPR*(F0^!#$A-R3~YME`!ecAn9*Q2 z-jbG#z#B1Tgd4Az;1+I#l(aCyYoq9$d*Rav|DlZcGJOLzpOtYGn!z*LEiKbBb(4v| ztQ$PLjw+xZs>UZ%GJW2_H1k{)}7~+tL@*Ze24T%gubcK^X~mqJqbAXC(;B{)-J1y~?iexjFK0e`FBzcZN zAANlZY*Ul&CD9^s_GZn zvhP{)zO4S7J;Sc5soWPU4n>*~7G48uMXa~PQ$)QjN7Q$OhvaF3YpR#abZA*sPosHj zU_15g+J3W9t9shb>R?RNcD7blYXh5X^~PGWYFEJ)!3KfF?VYA@E(*~U18Zl`*%yKa z8Lu_k+cmM`)Wj1s#?gKaJQ!X)O&V_<+tm^miF>YMIp}L|3%b_8YR?b9 zQmo-6hKnTDCb$ZyhPIon?fUL=%UN;i_yo|6EjCm$UpjV+`p2-SWvoQJOfBDwI-BAf zq}l_h-{hx#yVTlO|IFtjFA~S)@PVlDscKJ&3vOR96{VZhpnZ1c8 Jo?zC0{tE?#rQ84j diff --git a/app.py b/app.py index e40d95f..2c289ea 100644 --- a/app.py +++ b/app.py @@ -64,6 +64,14 @@ def _round_temp(k): def get_mosmix_forecast(lat, lon, hours=72): """Holt MOSMIX-Vorhersage für die nächsten Stunden.""" try: + # Zeitzone Berlin für alle Anzeige-Timestamps + try: + import zoneinfo + _berlin = zoneinfo.ZoneInfo("Europe/Berlin") + except ImportError: + import pytz + _berlin = pytz.timezone("Europe/Berlin") + req = DwdMosmixRequest(parameters=MOSMIX_PARAMS) nearest = req.filter_by_rank(latlon=(lat, lon), rank=1) result = nearest.values.all() @@ -119,7 +127,7 @@ def get_mosmix_forecast(lat, lon, hours=72): wind_dir = float(wind_dir_v) if not _isnan(wind_dir_v) else None forecast.append({ - "datetime": date_val, + "datetime": pd.Timestamp(date_val).tz_convert(_berlin).tz_localize(None), "temp_c": temp_c, "wind_kmh": wind_kmh, "gust_kmh": gust_kmh, @@ -200,7 +208,7 @@ def wetter(): station_lon = float(mosmix_station.get("longitude", lon)) station_dist = round(haversine(lat, lon, station_lat, station_lon), 1) - # "Aktuell" = erste Stunde >= jetzt (UTC), sonst erste verfügbare + # "Aktuell" = erste Stunde >= jetzt (Berliner Lokalzeit) now_utc = _dt.datetime.now(_dt.timezone.utc).replace(tzinfo=None) try: import zoneinfo @@ -208,12 +216,14 @@ def wetter(): except ImportError: import pytz berlin = pytz.timezone("Europe/Berlin") - now_local = _dt.datetime.now(berlin).strftime("%H:%M") + now_local_dt = _dt.datetime.now(berlin) + now_local = now_local_dt.strftime("%H:%M") + now_berlin_naive = now_local_dt.replace(tzinfo=None) current_idx = 0 for i, h in enumerate(forecast): dt = h["datetime"] dt_naive = dt.replace(tzinfo=None) if hasattr(dt, "tzinfo") and dt.tzinfo is not None else dt - if dt_naive >= now_utc: + if dt_naive >= now_berlin_naive: current_idx = i break current = forecast[current_idx]