109 lines
2.4 KiB
Python
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
|