More fixes
This commit is contained in:
@@ -5,7 +5,6 @@ import {api, BASE} from '../services/api';
|
|||||||
const data = ref<any>({});
|
const data = ref<any>({});
|
||||||
|
|
||||||
function dir(deg: number) {
|
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 > 22.5 && deg <= 67.5) return 'NE';
|
||||||
if(deg > 67.5 && deg <= 112.5) return 'E';
|
if(deg > 67.5 && deg <= 112.5) return 'E';
|
||||||
if(deg > 112.5 && deg <= 157.5) return 'SE';
|
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 > 202.5 && deg <= 247.5) return 'SW';
|
||||||
if(deg > 247.5 && deg <= 292.5) return 'W';
|
if(deg > 247.5 && deg <= 292.5) return 'W';
|
||||||
if(deg > 292.5 && deg <= 337.5) return 'NW';
|
if(deg > 292.5 && deg <= 337.5) return 'NW';
|
||||||
|
return 'N';
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
@@ -142,11 +142,11 @@ onMounted(async () => {
|
|||||||
<div class="divider" />
|
<div class="divider" />
|
||||||
|
|
||||||
<div class="stat-grid">
|
<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">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 }}</span><span v-if="precipHrs" class="stat-sub">over {{ precipHrs }}</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 }} ({{ dir(data.wind_direction) }})</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 }}</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></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 class="stat"><span class="stat-label">UV index</span><span class="stat-value">{{ data.uv_index }}</span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -352,10 +352,13 @@ def classify_clouds(c, lux, solar_el):
|
|||||||
|
|
||||||
return cloud_pct, label, volatility
|
return cloud_pct, label, volatility
|
||||||
|
|
||||||
def visibility_estimate(lux, humidity):
|
def visibility_estimate(lux, humidity, solar_el=None):
|
||||||
base_km = 50.0
|
base_km = 50.0
|
||||||
hum_factor = max(0, 1 - ((humidity - 40) / 60)) if humidity > 40 else 1.0
|
hum_factor = max(0, 1 - ((humidity - 40) / 60)) if humidity > 40 else 1.0
|
||||||
|
if solar_el is not None and solar_el > 5:
|
||||||
lux_factor = min(lux / 10000, 1.0)
|
lux_factor = min(lux / 10000, 1.0)
|
||||||
|
else:
|
||||||
|
lux_factor = 1.0
|
||||||
return round(base_km * hum_factor * lux_factor, 1)
|
return round(base_km * hum_factor * lux_factor, 1)
|
||||||
|
|
||||||
def read_ltr(c, sensor, solar_el, humidity=None):
|
def read_ltr(c, sensor, solar_el, humidity=None):
|
||||||
@@ -365,7 +368,7 @@ def read_ltr(c, sensor, solar_el, humidity=None):
|
|||||||
null = {
|
null = {
|
||||||
'lux': None, 'uv_index': None, 'solar_wm2': None,
|
'lux': None, 'uv_index': None, 'solar_wm2': None,
|
||||||
'uv_dose': None, 'clouds': None, 'daily_light_integral': 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
|
if not sensor: write(c, 'light', null); return
|
||||||
@@ -398,10 +401,8 @@ def read_ltr(c, sensor, solar_el, humidity=None):
|
|||||||
daylight_start = now
|
daylight_start = now
|
||||||
daylight_hours = round((now - daylight_start) / 3600, 2) if daylight_start else 0.0
|
daylight_hours = round((now - daylight_start) / 3600, 2) if daylight_start else 0.0
|
||||||
|
|
||||||
cloud_pct, cloud_label, volatility = classify_clouds(c, lux, solar_el)
|
|
||||||
|
|
||||||
if cloud_label == 'Clear':
|
|
||||||
update_cloud_baseline(c, solar_el, lux)
|
update_cloud_baseline(c, solar_el, lux)
|
||||||
|
cloud_pct, cloud_label, volatility = classify_clouds(c, lux, solar_el)
|
||||||
|
|
||||||
write(c, 'light', {
|
write(c, 'light', {
|
||||||
'lux': lux,
|
'lux': lux,
|
||||||
@@ -411,7 +412,7 @@ def read_ltr(c, sensor, solar_el, humidity=None):
|
|||||||
'clouds': cloud_pct,
|
'clouds': cloud_pct,
|
||||||
'daily_light_integral': dli,
|
'daily_light_integral': dli,
|
||||||
'daylight': daylight_hours,
|
'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 ''})
|
}, tags={'clouds_label': cloud_label or ''})
|
||||||
|
|
||||||
# ── TF-Luna ───────────────────────────────────────────────────────────────────
|
# ── TF-Luna ───────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user