aee0f09db8
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
114 lines
3.2 KiB
Python
114 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Analysera väderkonsekvenser för vägar
|
|
"""
|
|
import sqlite3
|
|
from datetime import datetime
|
|
|
|
DB_PATH = "/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db"
|
|
|
|
def analyze_weather_impact(temperature, precipitation):
|
|
"""
|
|
Analysera väderpåverkan på vägar
|
|
Returnerar risknivå och rekommendationer
|
|
"""
|
|
risks = []
|
|
|
|
# Temperaturanalys
|
|
if temperature < 0:
|
|
risks.append({
|
|
"type": "ice_risk",
|
|
"severity": "high",
|
|
"description": "Risk för halka och isbildning"
|
|
})
|
|
elif temperature < 5:
|
|
risks.append({
|
|
"type": "frost_risk",
|
|
"severity": "medium",
|
|
"description": "Risk för frostskador på vägbanan"
|
|
})
|
|
|
|
# Nederbördsanalys
|
|
if precipitation > 10:
|
|
risks.append({
|
|
"type": "flooding_risk",
|
|
"severity": "high",
|
|
"description": "Risk för översvämning och nedsatt framkomlighet"
|
|
})
|
|
elif precipitation > 5:
|
|
risks.append({
|
|
"type": "wet_road",
|
|
"severity": "medium",
|
|
"description": "Blöt vägbana, ökad bromssträcka"
|
|
})
|
|
|
|
# Kombinerade effekter
|
|
if temperature < 0 and precipitation > 0:
|
|
risks.append({
|
|
"type": "black_ice",
|
|
"severity": "critical",
|
|
"description": "Mycket hög risk för svartis"
|
|
})
|
|
|
|
return risks
|
|
|
|
def get_affected_roads(county="Uppsala"):
|
|
"""Hämta vägar i ett specifikt län"""
|
|
conn = sqlite3.connect(DB_PATH)
|
|
c = conn.cursor()
|
|
|
|
c.execute("SELECT id, road_number, name, type FROM roads WHERE county = ?", (county,))
|
|
roads = c.fetchall()
|
|
|
|
conn.close()
|
|
return roads
|
|
|
|
def generate_weather_alerts():
|
|
"""Generera vädervarningar för vägar"""
|
|
# Hämta senaste väderdata
|
|
import sys
|
|
sys.path.insert(0, '/home/bernt/.openclaw/workspace/life-prod/ingestion')
|
|
from smhi_weather import fetch_temperature, fetch_precipitation
|
|
|
|
temp_data = fetch_temperature()
|
|
precip_data = fetch_precipitation()
|
|
|
|
if not temp_data or not precip_data:
|
|
print("Ingen väderdata tillgänglig")
|
|
return []
|
|
|
|
temperature = temp_data["temperature"]
|
|
precipitation = precip_data["precipitation_mm"]
|
|
|
|
# Analysera risker
|
|
risks = analyze_weather_impact(temperature, precipitation)
|
|
|
|
# Hämta påverkade vägar
|
|
roads = get_affected_roads()
|
|
|
|
alerts = []
|
|
for road in roads:
|
|
for risk in risks:
|
|
alerts.append({
|
|
"road_id": road[0],
|
|
"road_number": road[1],
|
|
"road_name": road[2],
|
|
"road_type": road[3],
|
|
"risk_type": risk["type"],
|
|
"severity": risk["severity"],
|
|
"description": risk["description"],
|
|
"temperature": temperature,
|
|
"precipitation": precipitation,
|
|
"timestamp": datetime.now().isoformat()
|
|
})
|
|
|
|
return alerts
|
|
|
|
if __name__ == "__main__":
|
|
alerts = generate_weather_alerts()
|
|
print(f"Genererade {len(alerts)} vädervarningar")
|
|
|
|
# Visa första 3
|
|
for alert in alerts[:3]:
|
|
print(f" {alert['road_number']}: {alert['risk_type']} ({alert['severity']})")
|