Files
weather-info/app/web/wlan.py
2025-10-19 18:29:10 +02:00

109 lines
2.4 KiB
Python

import time
import network
import urequests
from ..classes.location import Location
from ..classes.weather import CurrentCondition, Weather
API_KEY = '3545ce42d0ba436e8dc164532250410'
ACTUAL_WEATHER = 'https://api.weatherapi.com/v1/current.json?key={{key}}&q={{city}}&aqi=yes'
WEATHER_QUERY_MOCK = {
'location': {
'name': 'Grosshansdorf',
'region': 'Schleswig-Holstein',
'country': 'Germany',
'lat': 53.6667,
'lon': 10.2833,
'tz_id': 'Europe/Berlin',
'localtime_epoch': 1760779328,
'localtime': '2025-10-18 11:22',
},
'current': {
'last_updated_epoch': 1760778900,
'last_updated': '2025-10-18 11:15',
'temp_c': 8.3,
'temp_f': 46.9,
'is_day': 1,
'condition': {
'text': 'Sonnig',
'icon': '//cdn.weatherapi.com/weather/64x64/day/113.png',
'code': 1000,
},
'wind_mph': 2.5,
'wind_kph': 4.0,
'wind_degree': 31,
'wind_dir': 'NNE',
'pressure_mb': 1029.0,
'pressure_in': 30.39,
'precip_mm': 0.0,
'precip_in': 0.0,
'humidity': 76,
'cloud': 0,
'feelslike_c': 8.2,
'feelslike_f': 46.8,
'windchill_c': 10.0,
'windchill_f': 50.0,
'heatindex_c': 9.9,
'heatindex_f': 49.8,
'dewpoint_c': 2.2,
'dewpoint_f': 35.9,
'vis_km': 10.0,
'vis_miles': 6.0,
'uv': 0.9,
'gust_mph': 2.8,
'gust_kph': 4.6,
'air_quality': {
'co': 163.678,
'no2': 7.278,
'o3': 47.0,
'so2': 1.178,
'pm2_5': 5.778,
'pm10': 7.178,
'us-epa-index': 1,
'gb-defra-index': 1,
},
},
}
class Wlan:
def __init__(self, ssid, password):
self.ssid = ssid
self.password = password
def connect(self):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(self.ssid, self.password)
while not wlan.isconnected:
print('connecting, please wait ...')
time.sleep(1)
print('connected! IP=', wlan.ifconfig()[0])
def actual_weather(self, city='grosshansdorf', lang='de', test_mode=False) -> Weather:
weather_url = (
f'https://api.weatherapi.com/v1/current.json?key={API_KEY}&q={city}&aqi=yes&lang={lang}'
)
print(f'query: {weather_url}')
if not test_mode:
r = urequests.get(weather_url)
print('Status-Code:', r.status_code)
json_resp = r.json()
print(json_resp.keys())
r.close()
else:
print('Status-Code: test_mode')
json_resp = WEATHER_QUERY_MOCK
loc = Location(**json_resp['location'])
cc = CurrentCondition(**json_resp['current'])
weather = Weather(location=loc, current=cc)
return weather