landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,113 @@
|
||||
#!/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']})")
|
||||
Reference in New Issue
Block a user