From f025fd6ca10bb5cba76059d1bcf3d5a94e074d71 Mon Sep 17 00:00:00 2001 From: Paul Warren Date: Fri, 28 Jan 2022 21:33:35 +1100 Subject: [PATCH] new bom_rrd script using weather_au api thing --- bom_rrd2.py | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100755 bom_rrd2.py diff --git a/bom_rrd2.py b/bom_rrd2.py new file mode 100755 index 0000000..3f2cbdf --- /dev/null +++ b/bom_rrd2.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +import urllib +import datetime +import json +import collections + +import rrdtool + +from weather_au import api + +# Grab current temps from sensors around the house +#outside = rrdtool.fetch("/media/media/mqtt/ESP_b5952/temp/c.rrd", "AVERAGE") +#rows = outside[2][::-1] +#for data in rows: +# if data[0] is not None: +# outside_temp = data[0] +# break +outside_temp = 0 + +bedroom = rrdtool.fetch("/media/media/mqtt/ESP_4c7682/temp.rrd", "AVERAGE") +rows = bedroom[2][::-1] +for data in rows: + if data[0] is not None: + bedroom_temp = int(data[0]) + break + +lounge = rrdtool.fetch("/media/media/mqtt/ESP_b3fe20/temp.rrd", "AVERAGE") +rows = lounge[2][::-1] +for data in rows: + if data[0] is not None: + lounge_temp = data[0] + break +lounge_temp = 0 + +bom_icons = { + 'sunny': 'SUNNY.JPG', + 'clear': 'CLEAR.JPG', + 'partly_cloudy': 'PCLOUD.JPG', + 'cloudy': 'CLOUDY.JPG', + 'haze': 'HAZE.JPG', + 'light_rain': 'LRAIN.JPG', + 'wind': 'WIND.JPG', + 'fog': 'FOG.JPG', + 'shower': 'SHOWER.JPG', + 'rain': 'RAIN.JPG', + 'dust': 'DUST.JPG', + 'frost': 'FROST.JPG', + 'snow': 'SNOW.JPG', + 'storm': 'STORM.JPG', + 'light_showers': 'LSHOWE.JPG', + 'heavy_showers': 'HSHOWE.JPG', + 'cyclone': 'CYCLON.JPG' +} + + +w = api.WeatherApi(search="longley+tas") + +wdays_dict = w.forecasts_daily() + +new = {} +weather = {} + +weather['today'] = wdays_dict[0] +weather['tomorrow'] = wdays_dict[1] +weather['day_after'] = wdays_dict[2] + +# The first forecast period doesn't always have the temperature and other bits +# I get the overnight low and forecast to substitute when this happens. + +if weather['today']['temp_min'] is None: + night = 1 + weather['tomorrow'] = wdays_dict[2] + weather['day_after'] = wdays_dict[3] +else: + night = 0 + +if night: + for day in weather.keys(): + new[day] = {} + if (day == 'today'): + new[day]['day'] = 'Tonight' + new[day]['max'] = weather['tomorrow']['temp_min'] + new[day]['icon'] = bom_icons[weather['today']['icon_descriptor']] + else: + new[day]['day'] = datetime.datetime.strptime(weather[day]['date'], "%Y-%m-%dT%H:%M:%S%z").strftime("%A") + new[day]['icon'] = bom_icons[weather['today']['icon_descriptor']] + new[day]['max'] = weather['today']['temp_max'] + +else: + + for day in weather.keys(): + new[day] = {} + new[day]['day'] = datetime.datetime.strptime(weather[day]['date'], "%Y-%m-%dT%H:%M:%S%z").strftime("%A") + + new[day]['icon'] = bom_icons[weather[day]['icon_descriptor']] + new[day]['max'] = weather[day]['temp_max'] + + +new['current'] = {} +new['current']['outside'] = outside_temp +new['current']['bedroom'] = bedroom_temp +new['current']['lounge'] = lounge_temp + +with open('bom.json', 'w') as output: + output.write(json.dumps(new)) + output.close()