More fixes

This commit is contained in:
2026-06-24 01:03:13 -04:00
parent aac3486dd3
commit 70372a23cf
2 changed files with 14 additions and 13 deletions

View File

@@ -5,7 +5,6 @@ import {api, BASE} from '../services/api';
const data = ref<any>({});
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 () => {
<div class="divider" />
<div class="stat-grid">
<div class="stat"><span class="stat-label">Precipitation</span><span class="stat-value">{{ precipProb }}</span></div>
<div class="stat"><span class="stat-label">Humidity</span><span class="stat-value">{{ data.humidity }}</span><span v-if="precipHrs" class="stat-sub">over {{ precipHrs }}</span></div>
<div class="stat"><span class="stat-label">Wind</span><span class="stat-value">{{ data.wind_gusts }} ({{ dir(data.wind_direction) }})</span></div>
<div class="stat"><span class="stat-label">Clouds</span><span class="stat-value">{{ data.clouds }}</span></div>
<div class="stat"><span class="stat-label">Air Quality</span><span class="stat-value">{{ data.air_quality }}</span></div>
<div class="stat"><span class="stat-label">Precipitation</span><span class="stat-value">{{ !data.precipitation && data.raining == 'True' ? 'Spitting' : data.precipitation?.toFixed(1) + 'mm'}}</span></div>
<div class="stat"><span class="stat-label">Humidity</span><span class="stat-value">{{ data.humidity?.toFixed(0) }}%</span></div>
<div class="stat"><span class="stat-label">Wind</span><span class="stat-value">{{ data.wind_gusts }} Kph <span class="fg-muted">({{ dir(data.wind_direction) }})</span></span></div>
<div class="stat"><span class="stat-label">Clouds</span><span class="stat-value">{{ data.clouds?.toFixed(0) }}%</span></div>
<div class="stat"><span class="stat-label">Air Quality</span><span class="stat-value">{{ data.air_quality }} <span class="fg-muted">({{data.air_quality_label}})</span></span></div>
<div class="stat"><span class="stat-label">UV index</span><span class="stat-value">{{ data.uv_index }}</span></div>
</div>
</div>

View File

@@ -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 ───────────────────────────────────────────────────────────────────