diff --git a/client/src/components/CurrentWeather.vue b/client/src/components/CurrentWeather.vue index 85fcd1f..f7b7b52 100644 --- a/client/src/components/CurrentWeather.vue +++ b/client/src/components/CurrentWeather.vue @@ -5,7 +5,6 @@ import {api, BASE} from '../services/api'; const data = ref({}); function dir(deg: number) { - if(deg > 0 && deg <= 22.5 || deg > 337.5) return 'N'; if(deg > 22.5 && deg <= 67.5) return 'NE'; if(deg > 67.5 && deg <= 112.5) return 'E'; if(deg > 112.5 && deg <= 157.5) return 'SE'; @@ -13,6 +12,7 @@ function dir(deg: number) { if(deg > 202.5 && deg <= 247.5) return 'SW'; if(deg > 247.5 && deg <= 292.5) return 'W'; if(deg > 292.5 && deg <= 337.5) return 'NW'; + return 'N'; } onMounted(async () => { @@ -142,11 +142,11 @@ onMounted(async () => {
-
Precipitation{{ precipProb }}
-
Humidity{{ data.humidity }}over {{ precipHrs }}
-
Wind{{ data.wind_gusts }} ({{ dir(data.wind_direction) }})
-
Clouds{{ data.clouds }}
-
Air Quality{{ data.air_quality }}
+
Precipitation{{ !data.precipitation && data.raining == 'True' ? 'Spitting' : data.precipitation?.toFixed(1) + 'mm'}}
+
Humidity{{ data.humidity?.toFixed(0) }}%
+
Wind{{ data.wind_gusts }} Kph ({{ dir(data.wind_direction) }})
+
Clouds{{ data.clouds?.toFixed(0) }}%
+
Air Quality{{ data.air_quality }} ({{data.air_quality_label}})
UV index{{ data.uv_index }}
diff --git a/sensors/main.py b/sensors/main.py index 0fde316..6996b56 100644 --- a/sensors/main.py +++ b/sensors/main.py @@ -352,10 +352,13 @@ def classify_clouds(c, lux, solar_el): return cloud_pct, label, volatility -def visibility_estimate(lux, humidity): +def visibility_estimate(lux, humidity, solar_el=None): base_km = 50.0 hum_factor = max(0, 1 - ((humidity - 40) / 60)) if humidity > 40 else 1.0 - lux_factor = min(lux / 10000, 1.0) + if solar_el is not None and solar_el > 5: + lux_factor = min(lux / 10000, 1.0) + else: + lux_factor = 1.0 return round(base_km * hum_factor * lux_factor, 1) def read_ltr(c, sensor, solar_el, humidity=None): @@ -365,7 +368,7 @@ def read_ltr(c, sensor, solar_el, humidity=None): null = { 'lux': None, 'uv_index': None, 'solar_wm2': None, 'uv_dose': None, 'clouds': None, 'daily_light_integral': None, - 'daylight': None, 'visibility': None, 'cloud_volatility': None, + 'daylight': None, 'visibility': None, } if not sensor: write(c, 'light', null); return @@ -398,11 +401,9 @@ def read_ltr(c, sensor, solar_el, humidity=None): daylight_start = now daylight_hours = round((now - daylight_start) / 3600, 2) if daylight_start else 0.0 + update_cloud_baseline(c, solar_el, lux) cloud_pct, cloud_label, volatility = classify_clouds(c, lux, solar_el) - if cloud_label == 'Clear': - update_cloud_baseline(c, solar_el, lux) - write(c, 'light', { 'lux': lux, 'uv_index': uvi, @@ -411,7 +412,7 @@ def read_ltr(c, sensor, solar_el, humidity=None): 'clouds': cloud_pct, 'daily_light_integral': dli, 'daylight': daylight_hours, - 'visibility': visibility_estimate(lux, humidity) if humidity else None, + 'visibility': visibility_estimate(lux, humidity, solar_el) if humidity else None, }, tags={'clouds_label': cloud_label or ''}) # ── TF-Luna ───────────────────────────────────────────────────────────────────